diff options
163 files changed, 3699 insertions, 2274 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index ce7df5ecd794..6fcf0559aec6 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -3693,8 +3693,18 @@ package android.media.audiopolicy { package android.media.session { public final class MediaSessionManager { + method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void registerCallback(@NonNull android.media.session.MediaSessionManager.Callback, @Nullable android.os.Handler); method @RequiresPermission(android.Manifest.permission.SET_MEDIA_KEY_LISTENER) public void setOnMediaKeyListener(android.media.session.MediaSessionManager.OnMediaKeyListener, @Nullable android.os.Handler); method @RequiresPermission(android.Manifest.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER) public void setOnVolumeKeyLongPressListener(android.media.session.MediaSessionManager.OnVolumeKeyLongPressListener, @Nullable android.os.Handler); + method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void unregisterCallback(@NonNull android.media.session.MediaSessionManager.Callback); + } + + public abstract static class MediaSessionManager.Callback { + ctor public MediaSessionManager.Callback(); + method public abstract void onAddressedPlayerChanged(android.media.session.MediaSession.Token); + method public abstract void onAddressedPlayerChanged(android.content.ComponentName); + method public abstract void onMediaKeyEventDispatched(android.view.KeyEvent, android.media.session.MediaSession.Token); + method public abstract void onMediaKeyEventDispatched(android.view.KeyEvent, android.content.ComponentName); } public static interface MediaSessionManager.OnMediaKeyListener { diff --git a/core/java/android/os/RedactingFileDescriptor.java b/core/java/android/os/RedactingFileDescriptor.java index 4e5eaac3442f..a1ed2146b38e 100644 --- a/core/java/android/os/RedactingFileDescriptor.java +++ b/core/java/android/os/RedactingFileDescriptor.java @@ -35,7 +35,7 @@ import java.util.Arrays; /** * Variant of {@link FileDescriptor} that allows its creator to specify regions - * that should be redacted (appearing as zeros to the reader). + * that should be redacted. * * @hide */ @@ -44,13 +44,16 @@ public class RedactingFileDescriptor { private static final boolean DEBUG = true; private volatile long[] mRedactRanges; + private volatile long[] mFreeOffsets; private FileDescriptor mInner = null; private ParcelFileDescriptor mOuter = null; - private RedactingFileDescriptor(Context context, File file, int mode, long[] redactRanges) + private RedactingFileDescriptor( + Context context, File file, int mode, long[] redactRanges, long[] freeOffsets) throws IOException { mRedactRanges = checkRangesArgument(redactRanges); + mFreeOffsets = freeOffsets; try { try { @@ -88,13 +91,17 @@ public class RedactingFileDescriptor { * * @param file The underlying file to open. * @param mode The {@link ParcelFileDescriptor} mode to open with. - * @param redactRanges List of file offsets that should be redacted, stored + * @param redactRanges List of file ranges that should be redacted, stored * as {@code [start1, end1, start2, end2, ...]}. Start values are * inclusive and end values are exclusive. + * @param freePositions List of file offsets at which the four byte value 'free' should be + * written instead of zeros within parts of the file covered by {@code redactRanges}. + * Non-redacted bytes will not be modified even if covered by a 'free'. This is + * useful for overwriting boxes in ISOBMFF files with padding data. */ public static ParcelFileDescriptor open(Context context, File file, int mode, - long[] redactRanges) throws IOException { - return new RedactingFileDescriptor(context, file, mode, redactRanges).mOuter; + long[] redactRanges, long[] freePositions) throws IOException { + return new RedactingFileDescriptor(context, file, mode, redactRanges, freePositions).mOuter; } /** @@ -169,6 +176,15 @@ public class RedactingFileDescriptor { for (long j = start; j < end; j++) { data[(int) (j - offset)] = 0; } + // Overwrite data at 'free' offsets within the redaction ranges. + for (long freeOffset : mFreeOffsets) { + final long freeEnd = freeOffset + 4; + final long redactFreeStart = Math.max(freeOffset, start); + final long redactFreeEnd = Math.min(freeEnd, end); + for (long j = redactFreeStart; j < redactFreeEnd; j++) { + data[(int) (j - offset)] = (byte) "free".charAt((int) (j - freeOffset)); + } + } } return n; } diff --git a/core/java/com/android/internal/app/PlatLogoActivity.java b/core/java/com/android/internal/app/PlatLogoActivity.java index 57785443919e..157e0a74712b 100644 --- a/core/java/com/android/internal/app/PlatLogoActivity.java +++ b/core/java/com/android/internal/app/PlatLogoActivity.java @@ -16,252 +16,167 @@ package com.android.internal.app; +import android.animation.ObjectAnimator; import android.animation.TimeAnimator; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.ContentResolver; import android.content.Intent; +import android.content.res.ColorStateList; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.ColorFilter; +import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; +import android.graphics.PixelFormat; +import android.graphics.Shader; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.provider.Settings; import android.util.Log; +import android.view.HapticFeedbackConstants; import android.view.MotionEvent; -import android.view.MotionEvent.PointerCoords; import android.view.View; -import android.widget.FrameLayout; +import android.view.ViewGroup; +import android.widget.ImageView; + +import com.android.internal.R; import org.json.JSONObject; +/** + * @hide + */ public class PlatLogoActivity extends Activity { - FrameLayout layout; - TimeAnimator anim; - PBackground bg; - - private class PBackground extends Drawable { - private float maxRadius, radius, x, y, dp; - private int[] palette; - private int darkest; - private float offset; - - public PBackground() { - randomizePalette(); - } - - /** - * set inner radius of "p" logo - */ - public void setRadius(float r) { - this.radius = Math.max(48*dp, r); - } - - /** - * move the "p" - */ - public void setPosition(float x, float y) { - this.x = x; - this.y = y; - } - - /** - * for animating the "p" - */ - public void setOffset(float o) { - this.offset = o; - } - - /** - * rough luminance calculation - * https://www.w3.org/TR/AERT/#color-contrast - */ - public float lum(int rgb) { - return ((Color.red(rgb) * 299f) + (Color.green(rgb) * 587f) + (Color.blue(rgb) * 114f)) / 1000f; - } - - /** - * create a random evenly-spaced color palette - * guaranteed to contrast! - */ - public void randomizePalette() { - final int slots = 2 + (int)(Math.random() * 2); - float[] color = new float[] { (float) Math.random() * 360f, 1f, 1f }; - palette = new int[slots]; - darkest = 0; - for (int i=0; i<slots; i++) { - palette[i] = Color.HSVToColor(color); - color[0] = (color[0] + 360f/slots) % 360f; - if (lum(palette[i]) < lum(palette[darkest])) darkest = i; - } - - final StringBuilder str = new StringBuilder(); - for (int c : palette) { - str.append(String.format("#%08x ", c)); - } - Log.v("PlatLogoActivity", "color palette: " + str); - } - - @Override - public void draw(Canvas canvas) { - if (dp == 0) dp = getResources().getDisplayMetrics().density; - final float width = canvas.getWidth(); - final float height = canvas.getHeight(); - if (radius == 0) { - setPosition(width / 2, height / 2); - setRadius(width / 6); - } - final float inner_w = radius * 0.667f; - - final Paint paint = new Paint(); - paint.setStrokeCap(Paint.Cap.BUTT); - canvas.translate(x, y); - - Path p = new Path(); - p.moveTo(-radius, height); - p.lineTo(-radius, 0); - p.arcTo(-radius, -radius, radius, radius, -180, 270, false); - p.lineTo(-radius, radius); - - float w = Math.max(canvas.getWidth(), canvas.getHeight()) * 1.414f; - paint.setStyle(Paint.Style.FILL); - - int i=0; - while (w > radius*2 + inner_w*2) { - paint.setColor(0xFF000000 | palette[i % palette.length]); - // for a slower but more complete version: - // paint.setStrokeWidth(w); - // canvas.drawPath(p, paint); - canvas.drawOval(-w/2, -w/2, w/2, w/2, paint); - w -= inner_w * (1.1f + Math.sin((i/20f + offset) * 3.14159f)); - i++; - } - - // the innermost circle needs to be a constant color to avoid rapid flashing - paint.setColor(0xFF000000 | palette[(darkest+1) % palette.length]); - canvas.drawOval(-radius, -radius, radius, radius, paint); - - p.reset(); - p.moveTo(-radius, height); - p.lineTo(-radius, 0); - p.arcTo(-radius, -radius, radius, radius, -180, 270, false); - p.lineTo(-radius + inner_w, radius); - - paint.setStyle(Paint.Style.STROKE); - paint.setStrokeWidth(inner_w*2); - paint.setColor(palette[darkest]); - canvas.drawPath(p, paint); - paint.setStrokeWidth(inner_w); - paint.setColor(0xFFFFFFFF); - canvas.drawPath(p, paint); - } - - @Override - public void setAlpha(int alpha) { - - } - - @Override - public void setColorFilter(ColorFilter colorFilter) { - - } + ImageView mZeroView, mOneView; + BackslashDrawable mBackslash; + int mClicks; + + static final Paint sPaint = new Paint(); + static { + sPaint.setStyle(Paint.Style.STROKE); + sPaint.setStrokeWidth(4f); + sPaint.setStrokeCap(Paint.Cap.SQUARE); + } - @Override - public int getOpacity() { - return 0; + @Override + protected void onPause() { + if (mBackslash != null) { + mBackslash.stopAnimating(); } + mClicks = 0; + super.onPause(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + final float dp = getResources().getDisplayMetrics().density; - layout = new FrameLayout(this); - setContentView(layout); + getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + getWindow().setNavigationBarColor(0); + getWindow().setStatusBarColor(0); - bg = new PBackground(); - layout.setBackground(bg); + getActionBar().hide(); - final ContentResolver cr = getContentResolver(); + setContentView(R.layout.platlogo_layout); - layout.setOnTouchListener(new View.OnTouchListener() { - final String TOUCH_STATS = "touch.stats"; + mBackslash = new BackslashDrawable((int) (50 * dp)); - final PointerCoords pc0 = new PointerCoords(); - final PointerCoords pc1 = new PointerCoords(); + mOneView = findViewById(R.id.one); + mOneView.setImageDrawable(new OneDrawable()); + mZeroView = findViewById(R.id.zero); + mZeroView.setImageDrawable(new ZeroDrawable()); - double pressure_min, pressure_max; - int maxPointers; - int tapCount; + final ViewGroup root = (ViewGroup) mOneView.getParent(); + root.setClipChildren(false); + root.setBackground(mBackslash); + root.getBackground().setAlpha(0x20); + View.OnTouchListener tl = new View.OnTouchListener() { + float mOffsetX, mOffsetY; + long mClickTime; + ObjectAnimator mRotAnim; @Override public boolean onTouch(View v, MotionEvent event) { - final float pressure = event.getPressure(); + measureTouchPressure(event); switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: - pressure_min = pressure_max = pressure; - // fall through - case MotionEvent.ACTION_MOVE: - if (pressure < pressure_min) pressure_min = pressure; - if (pressure > pressure_max) pressure_max = pressure; - final int pc = event.getPointerCount(); - if (pc > maxPointers) maxPointers = pc; - if (pc > 1) { - event.getPointerCoords(0, pc0); - event.getPointerCoords(1, pc1); - bg.setRadius((float) Math.hypot(pc0.x - pc1.x, pc0.y - pc1.y) / 2f); + v.animate().scaleX(1.1f).scaleY(1.1f); + v.getParent().bringChildToFront(v); + mOffsetX = event.getRawX() - v.getX(); + mOffsetY = event.getRawY() - v.getY(); + long now = System.currentTimeMillis(); + if (now - mClickTime < 350) { + mRotAnim = ObjectAnimator.ofFloat(v, View.ROTATION, + v.getRotation(), v.getRotation() + 3600); + mRotAnim.setDuration(10000); + mRotAnim.start(); + mClickTime = 0; + } else { + mClickTime = now; } break; - case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_MOVE: + v.setX(event.getRawX() - mOffsetX); + v.setY(event.getRawY() - mOffsetY); + v.performHapticFeedback(HapticFeedbackConstants.TEXT_HANDLE_MOVE); + break; case MotionEvent.ACTION_UP: - try { - final String touchDataJson = Settings.System.getString(cr, TOUCH_STATS); - final JSONObject touchData = new JSONObject( - touchDataJson != null ? touchDataJson : "{}"); - if (touchData.has("min")) { - pressure_min = Math.min(pressure_min, touchData.getDouble("min")); - } - if (touchData.has("max")) { - pressure_max = Math.max(pressure_max, touchData.getDouble("max")); - } - touchData.put("min", pressure_min); - touchData.put("max", pressure_max); - Settings.System.putString(cr, TOUCH_STATS, touchData.toString()); - } catch (Exception e) { - Log.e("PlatLogoActivity", "Can't write touch settings", e); - } - - if (maxPointers == 1) { - tapCount ++; - if (tapCount < 7) { - bg.randomizePalette(); - } else { - launchNextStage(); - } - } else { - tapCount = 0; - } - maxPointers = 0; + v.performClick(); + // fall through + case MotionEvent.ACTION_CANCEL: + v.animate().scaleX(1f).scaleY(1f); + if (mRotAnim != null) mRotAnim.cancel(); + testOverlap(); break; } return true; } - }); + }; + + findViewById(R.id.one).setOnTouchListener(tl); + findViewById(R.id.zero).setOnTouchListener(tl); + findViewById(R.id.text).setOnTouchListener(tl); + } + + private void testOverlap() { + final float width = mZeroView.getWidth(); + final float targetX = mZeroView.getX() + width * .2f; + final float targetY = mZeroView.getY() + width * .3f; + if (Math.hypot(targetX - mOneView.getX(), targetY - mOneView.getY()) < width * .2f + && Math.abs(mOneView.getRotation() % 360 - 315) < 15) { + mOneView.animate().x(mZeroView.getX() + width * .2f); + mOneView.animate().y(mZeroView.getY() + width * .3f); + mOneView.setRotation(mOneView.getRotation() % 360); + mOneView.animate().rotation(315); + mOneView.performHapticFeedback(HapticFeedbackConstants.CONFIRM); + + mBackslash.startAnimating(); + + mClicks++; + if (mClicks >= 7) { + launchNextStage(); + } + } else { + mBackslash.stopAnimating(); + } } private void launchNextStage() { final ContentResolver cr = getContentResolver(); - if (Settings.System.getLong(cr, Settings.System.EGG_MODE, 0) == 0) { + if (Settings.System.getLong(cr, "egg_mode" /* Settings.System.EGG_MODE */, 0) == 0) { // For posterity: the moment this user unlocked the easter egg try { Settings.System.putLong(cr, - Settings.System.EGG_MODE, + "egg_mode", // Settings.System.EGG_MODE, System.currentTimeMillis()); } catch (RuntimeException e) { - Log.e("PlatLogoActivity", "Can't write settings", e); + Log.e("com.android.internal.app.PlatLogoActivity", "Can't write settings", e); } } try { @@ -270,36 +185,206 @@ public class PlatLogoActivity extends Activity { | Intent.FLAG_ACTIVITY_CLEAR_TASK) .addCategory("com.android.internal.category.PLATLOGO")); } catch (ActivityNotFoundException ex) { - Log.e("PlatLogoActivity", "No more eggs."); + Log.e("com.android.internal.app.PlatLogoActivity", "No more eggs."); } finish(); } + static final String TOUCH_STATS = "touch.stats"; + double mPressureMin = 0, mPressureMax = -1; + + private void measureTouchPressure(MotionEvent event) { + final float pressure = event.getPressure(); + switch (event.getActionMasked()) { + case MotionEvent.ACTION_DOWN: + if (mPressureMax < 0) { + mPressureMin = mPressureMax = pressure; + } + break; + case MotionEvent.ACTION_MOVE: + if (pressure < mPressureMin) mPressureMin = pressure; + if (pressure > mPressureMax) mPressureMax = pressure; + break; + } + } + + private void syncTouchPressure() { + try { + final String touchDataJson = Settings.System.getString( + getContentResolver(), TOUCH_STATS); + final JSONObject touchData = new JSONObject( + touchDataJson != null ? touchDataJson : "{}"); + if (touchData.has("min")) { + mPressureMin = Math.min(mPressureMin, touchData.getDouble("min")); + } + if (touchData.has("max")) { + mPressureMax = Math.max(mPressureMax, touchData.getDouble("max")); + } + if (mPressureMax >= 0) { + touchData.put("min", mPressureMin); + touchData.put("max", mPressureMax); + Settings.System.putString(getContentResolver(), TOUCH_STATS, touchData.toString()); + } + } catch (Exception e) { + Log.e("com.android.internal.app.PlatLogoActivity", "Can't write touch settings", e); + } + } + @Override public void onStart() { super.onStart(); + syncTouchPressure(); + } - bg.randomizePalette(); + @Override + public void onStop() { + syncTouchPressure(); + super.onStop(); + } - anim = new TimeAnimator(); - anim.setTimeListener( - new TimeAnimator.TimeListener() { - @Override - public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) { - bg.setOffset((float) totalTime / 60000f); - bg.invalidateSelf(); - } - }); + static class ZeroDrawable extends Drawable { + int mTintColor; + + @Override + public void draw(Canvas canvas) { + sPaint.setColor(mTintColor | 0xFF000000); + + canvas.save(); + canvas.scale(canvas.getWidth() / 24f, canvas.getHeight() / 24f); + + canvas.drawCircle(12f, 12f, 10f, sPaint); + canvas.restore(); + } - anim.start(); + @Override + public void setAlpha(int alpha) { } + + @Override + public void setColorFilter(ColorFilter colorFilter) { } + + @Override + public void setTintList(ColorStateList tint) { + mTintColor = tint.getDefaultColor(); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } } - @Override - public void onStop() { - if (anim != null) { - anim.cancel(); - anim = null; + static class OneDrawable extends Drawable { + int mTintColor; + + @Override + public void draw(Canvas canvas) { + sPaint.setColor(mTintColor | 0xFF000000); + + canvas.save(); + canvas.scale(canvas.getWidth() / 24f, canvas.getHeight() / 24f); + + final Path p = new Path(); + p.moveTo(12f, 21.83f); + p.rLineTo(0f, -19.67f); + p.rLineTo(-5f, 0f); + canvas.drawPath(p, sPaint); + canvas.restore(); + } + + @Override + public void setAlpha(int alpha) { } + + @Override + public void setColorFilter(ColorFilter colorFilter) { } + + @Override + public void setTintList(ColorStateList tint) { + mTintColor = tint.getDefaultColor(); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + } + + private static class BackslashDrawable extends Drawable implements TimeAnimator.TimeListener { + Bitmap mTile; + Paint mPaint = new Paint(); + BitmapShader mShader; + TimeAnimator mAnimator = new TimeAnimator(); + Matrix mMatrix = new Matrix(); + + public void draw(Canvas canvas) { + canvas.drawPaint(mPaint); + } + + BackslashDrawable(int width) { + mTile = Bitmap.createBitmap(width, width, Bitmap.Config.ALPHA_8); + mAnimator.setTimeListener(this); + + final Canvas tileCanvas = new Canvas(mTile); + final float w = tileCanvas.getWidth(); + final float h = tileCanvas.getHeight(); + + final Path path = new Path(); + path.moveTo(0, 0); + path.lineTo(w / 2, 0); + path.lineTo(w, h / 2); + path.lineTo(w, h); + path.close(); + + path.moveTo(0, h / 2); + path.lineTo(w / 2, h); + path.lineTo(0, h); + path.close(); + + final Paint slashPaint = new Paint(); + slashPaint.setAntiAlias(true); + slashPaint.setStyle(Paint.Style.FILL); + slashPaint.setColor(0xFF000000); + tileCanvas.drawPath(path, slashPaint); + + //mPaint.setColor(0xFF0000FF); + mShader = new BitmapShader(mTile, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); + mPaint.setShader(mShader); + } + + public void startAnimating() { + if (!mAnimator.isStarted()) { + mAnimator.start(); + } + } + + public void stopAnimating() { + if (mAnimator.isStarted()) { + mAnimator.cancel(); + } + } + + @Override + public void setAlpha(int alpha) { + mPaint.setAlpha(alpha); + } + + @Override + public void setColorFilter(ColorFilter colorFilter) { + mPaint.setColorFilter(colorFilter); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + + @Override + public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) { + if (mShader != null) { + mMatrix.postTranslate(deltaTime / 4f, 0); + mShader.setLocalMatrix(mMatrix); + invalidateSelf(); + } } - super.onStop(); } } + diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index f25f93fddb15..119d5ea33dc3 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -4656,8 +4656,9 @@ android:process=":ui"> </activity> <activity android:name="com.android.internal.app.PlatLogoActivity" - android:theme="@style/Theme.Wallpaper.NoTitleBar.Fullscreen" + android:theme="@style/Theme.DeviceDefault.DayNight" android:configChanges="orientation|keyboardHidden" + android:icon="@drawable/platlogo" android:process=":ui"> </activity> <activity android:name="com.android.internal.app.DisableCarModeActivity" diff --git a/core/res/res/drawable-nodpi/android_logotype.xml b/core/res/res/drawable-nodpi/android_logotype.xml new file mode 100644 index 000000000000..bd298e48ef34 --- /dev/null +++ b/core/res/res/drawable-nodpi/android_logotype.xml @@ -0,0 +1,42 @@ +<!-- +Copyright (C) 2015 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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="290dp" + android:height="64dp" + android:viewportWidth="290.0" + android:viewportHeight="64.0"> + <path + android:fillColor="#FF000000" + android:pathData="M21.81,28.91c-7.44,0,-12.45,5.85,-12.45,13.37c0,7.52,5.01,13.37,12.45,13.37s12.45,-5.85,12.45,-13.37 C34.26,34.76,29.24,28.91,21.81,28.91 M20.13,20.55c6.02,0,11.03,3.09,13.37,6.43v-5.6l9.19,0l0,41.78l-6.24,0 c-1.63,0,-2.95,-1.32,-2.95,-2.95v-2.65C31.17,60.91,26.15,64,20.14,64C8.69,64,0,54.23,0,42.28C0,30.33,8.69,20.55,20.13,20.55"/> + <path + android:fillColor="#FF000000" + android:pathData="M53.13,21.39l9.19,0l0,5.68c2.5,-4.18,7.27,-6.52,12.7,-6.52c9.69,0,15.96,6.85,15.96,17.46l0,25.15l-6.24,0 c-1.63,0,-2.95,-1.32,-2.95,-2.95l0,-20.7c0,-6.6,-3.34,-10.61,-8.69,-10.61c-6.1,0,-10.78,4.76,-10.78,13.7l0,20.55l-6.25,0 c-1.63,0,-2.95,-1.32,-2.95,-2.95L53.13,21.39z"/> + <path + android:fillColor="#FF000000" + android:pathData="M120.06,28.91c-7.43,0,-12.45,5.85,-12.45,13.37c0,7.52,5.01,13.37,12.45,13.37c7.43,0,12.45,-5.85,12.45,-13.37 C132.51,34.76,127.5,28.91,120.06,28.91 M118.39,20.55c6.02,0,11.03,3.09,13.37,6.43l0,-26.49l9.19,0l0,62.66h-6.24 c-1.63,0,-2.95,-1.32,-2.95,-2.95v-2.65c-2.34,3.34,-7.35,6.43,-13.37,6.43c-11.45,0,-20.14,-9.77,-20.14,-21.72 C98.25,30.33,106.94,20.55,118.39,20.55"/> + <path + android:fillColor="#FF000000" + android:pathData="M151.39,21.39l9.19,0v7.44c1.59,-4.76,6.27,-7.86,11.03,-7.86c1.17,0,2.34,0.08,3.59,0.34v9.44c-1.59,-0.5,-2.92,-0.75,-4.59,-0.75 c-5.26,0,-10.03,4.43,-10.03,12.78l0,20.39l-6.24,0c-1.63,0,-2.95,-1.32,-2.95,-2.95L151.39,21.39z"/> + <path + android:fillColor="#FF000000" + android:pathData="M199.98,55.48c7.35,0,12.53,-5.77,12.53,-13.2c0,-7.44,-5.18,-13.2,-12.53,-13.2c-7.44,0,-12.62,5.77,-12.62,13.2 C187.37,49.71,192.55,55.48,199.98,55.48 M199.98,64c-12.37,0,-21.89,-9.61,-21.89,-21.72c0,-12.12,9.52,-21.73,21.89,-21.73 c12.37,0,21.89,9.61,21.89,21.73C221.87,54.39,212.35,64,199.98,64"/> + <path + android:fillColor="#FF000000" + android:pathData="M229.32,21.39l9.19,0l0,41.78l-6.24,0c-1.63,0,-2.95,-1.32,-2.95,-2.95L229.32,21.39z M233.92,12.28 c-3.34,0,-6.18,-2.76,-6.18,-6.18c0,-3.34,2.84,-6.1,6.18,-6.1c3.43,0,6.1,2.76,6.1,6.1C240.02,9.53,237.34,12.28,233.92,12.28"/> + <path + android:fillColor="#FF000000" + android:pathData="M267.87,28.91c-7.43,0,-12.45,5.85,-12.45,13.37c0,7.52,5.01,13.37,12.45,13.37c7.44,0,12.45,-5.85,12.45,-13.37 C280.32,34.76,275.31,28.91,267.87,28.91 M266.2,20.55c6.02,0,11.03,3.09,13.37,6.43l0,-26.49l9.19,0l0,62.66l-6.24,0 c-1.63,0,-2.95,-1.32,-2.95,-2.95v-2.65c-2.34,3.34,-7.35,6.43,-13.37,6.43c-11.44,0,-20.14,-9.77,-20.14,-21.72S254.76,20.55,266.2,20.55"/> +</vector> diff --git a/core/res/res/drawable-nodpi/platlogo.xml b/core/res/res/drawable-nodpi/platlogo.xml index f5bbadcce06b..19a296a0e46b 100644 --- a/core/res/res/drawable-nodpi/platlogo.xml +++ b/core/res/res/drawable-nodpi/platlogo.xml @@ -1,5 +1,5 @@ <!-- -Copyright (C) 2018 The Android Open Source Project +Copyright (C) 2015 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. @@ -13,21 +13,15 @@ Copyright (C) 2018 The Android Open Source Project See the License for the specific language governing permissions and limitations under the License. --> -<vector - xmlns:android="http://schemas.android.com/apk/res/android" - android:name="vector" - android:width="640dp" - android:height="640dp" - android:viewportWidth="64" - android:viewportHeight="64"> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> <path - android:name="bg" - android:pathData="M 27 43 L 32 43 C 38.075 43 43 38.075 43 32 C 43 25.925 38.075 21 32 21 C 25.925 21 21 25.925 21 32 L 21 64" - android:strokeColor="#6823a1" - android:strokeWidth="16"/> + android:fillColor="#FF000000" + android:pathData="M19.45,22.89l-10.250001,-10.249999l-2.6599998,2.6599998l-1.77,-1.7600002l4.43,-4.4300003l12.0199995,12.0199995l-1.7699986,1.7600002z"/> <path - android:name="fg" - android:pathData="M 29 43 L 32 43 C 38.075 43 43 38.075 43 32 C 43 25.925 38.075 21 32 21 C 25.925 21 21 25.925 21 32 L 21 64" - android:strokeColor="#ff0000" - android:strokeWidth="8"/> + android:fillColor="#FF000000" + android:pathData="M12,6a6,6 0,1 1,-6 6,6 6,0 0,1 6,-6m0,-2.5A8.5,8.5 0,1 0,20.5 12,8.51 8.51,0 0,0 12,3.5Z"/> </vector> diff --git a/core/res/res/layout/platlogo_layout.xml b/core/res/res/layout/platlogo_layout.xml new file mode 100644 index 000000000000..4a4ad751e421 --- /dev/null +++ b/core/res/res/layout/platlogo_layout.xml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2019 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. +--> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:clipChildren="false" + android:background="@android:color/transparent"> + <ImageView + android:id="@+id/text" + android:layout_width="400dp" + android:layout_height="wrap_content" + android:translationY="-100dp" + android:adjustViewBounds="true" + android:layout_marginBottom="-80dp" + android:layout_centerInParent="true" + android:src="@drawable/android_logotype" + android:tint="?android:attr/textColorPrimary" + /> + <ImageView + android:id="@+id/one" + android:layout_width="200dp" + android:layout_height="200dp" + android:layout_marginLeft="24dp" + android:layout_below="@id/text" + android:layout_alignLeft="@id/text" + android:tint="?android:attr/textColorPrimary" + /> + <ImageView + android:id="@+id/zero" + android:layout_width="200dp" + android:layout_height="200dp" + android:layout_marginRight="34dp" + android:layout_below="@id/text" + android:layout_alignRight="@id/text" + android:tint="?android:attr/textColorPrimary" + /> +</RelativeLayout> diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 74f0e68ca498..7a0d475a7285 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Beweeg foon na links."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Beweeg foon na regs."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Kyk asseblief meer reguit na jou toestel."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Kan nie jou gesig sien nie. Kyk na die foon."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Posisioneer jou gesig direk voor die foon."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Te veel beweging. Hou foon stil."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Skryf jou gesig asseblief weer in."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Kan nie meer gesig herken nie. Probeer weer."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Maak oop met"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Maak oop met %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Maak oop"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Maak <xliff:g id="HOST">%1$s</xliff:g>-skakels oop met"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Maak skakels oop met"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Maak skakels oop met <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Maak <xliff:g id="HOST">%1$s</xliff:g>-skakels oop met <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Verleen toegang"</string> <string name="whichEditApplication" msgid="144727838241402655">"Redigeer met"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Redigeer met %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Begin webblaaier?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Aanvaar oproep?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Altyd"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Stel om altyd oop te maak"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Net een keer"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Instellings"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s steun nie werkprofiel nie"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index af0ed28ca379..11ab44de7fea 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"ስልክን ወደ ግራ ያንቀሳቅሱ።"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"ስልክን ወደ ቀኝ ያንቀሳቅሱ።"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"እባክዎ መሣሪያዎን ይበልጥ በቀጥታ ይመልከቱ።"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"የእርስዎን ፊት መመልከት አይችልም። ስልኩ ላይ ይመልከቱ።"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"መልክዎን በቀጥታ ከስልኩ ፊት ያድርጉት።"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"ከልክ በላይ ብዙ እንቅስቃሴ። ስልኩን ቀጥ አድርገው ይያዙት።"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"እባክዎ ፊትዎን እንደገና ያስመዝግቡ"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"ከእንግዲህ ፊትን ለይቶ ማወቅ አይችልም። እንደገና ይሞክሩ።"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"ክፈት በ"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"ክፈት በ%1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"ክፈት"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> አገናኞችን ክፈት ከዚህ ጋር"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"አገናኞችን ክፈት ከዚህ ጋር"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"አገናኞችን ከ <xliff:g id="APPLICATION">%1$s</xliff:g> ጋር ክፈት"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> አገናኞችን ከ <xliff:g id="APPLICATION">%2$s</xliff:g> ጋር ክፈት"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"መዳረሻ ስጥ"</string> <string name="whichEditApplication" msgid="144727838241402655">"ያርትዑ በ"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"ያርትዑ በ%1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ማሰሺያን አስነሳ?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"ጥሪ ተቀበል?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"ዘወትር"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"ሁልጊዜ ክፍት ወደ የሚል ተቀናብሯል"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"አንዴ ብቻ"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"ቅንብሮች"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s የስራ መገለጫ አይደግፍም"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 603239fc0936..6edc9339008c 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -580,7 +580,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"يُرجى نقل الهاتف إلى اليمين."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"يُرجى نقل الهاتف إلى اليسار."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"يُرجى النظر إلى جهازك مباشرة أكثر."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"يتعذّر رؤية وجهك. يُرجى النظر إلى الهاتف."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"ضع وجهك أمام الهاتف مباشرة."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"حركة أكثر من اللازم يُرجى حمل بدون حركة."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"يُرجى إعادة تسجيل وجهك."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"لم يعُد يمكن التعرّف على الوجه. حاول مرة أخرى."</string> @@ -1211,14 +1211,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"فتح باستخدام"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"فتح باستخدام %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"فتح"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"فتح روابط <xliff:g id="HOST">%1$s</xliff:g> باستخدام"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"فتح الروابط باستخدام"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"فتح الروابط باستخدام <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"فتح روابط <xliff:g id="HOST">%1$s</xliff:g> باستخدام <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"منح إذن الوصول"</string> <string name="whichEditApplication" msgid="144727838241402655">"تعديل باستخدام"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"تعديل باستخدام %1$s"</string> @@ -1682,8 +1678,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"تشغيل المتصفح؟"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"هل تريد قبول المكالمة؟"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"دومًا"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"ضبط على الفتح دائمًا"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"مرة واحدة فقط"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"الإعدادات"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"لا يدعم %1$s الملفات الشخصية للعمل"</string> diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index b126468c3869..36604039d884 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"ফ’নটো বাওঁফালে নিয়ক।"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"ফ’নটো সোঁফালে নিয়ক।"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"আপোনাৰ ডিভাইচটোলৈ অধিক পোনে পোনে চাওক।"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"আপোনাৰ মুখমণ্ডল দেখা নাই। ফ’নটোলৈ চাওক।"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"আপোনাৰ মুখখন পোনপটীয়াকৈ ফ’নটোৰ সন্মুখত ৰাখক।"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"বেছি লৰচৰ কৰি আছে। ফ’নটো স্থিৰকৈ ধৰক।"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"আপোনাৰ মুখমণ্ডল পুনৰ পঞ্জীয়ন কৰক।"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"মুখমণ্ডল আৰু চিনাক্ত কৰিব নোৱাৰি। আকৌ চেষ্টা কৰক।"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"ইয়াৰ জৰিয়তে খোলক"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$sৰ জৰিয়তে খোলক"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"খোলক"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> লিংকসমূহ ইয়াৰ জৰিয়তে খোলক"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"লিংকসমূহ ইয়াৰ জৰিয়তে খোলক"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"লিংকসমূহ <xliff:g id="APPLICATION">%1$s</xliff:g>ৰ জৰিয়তে খোলক"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> লিংকসমূহ <xliff:g id="APPLICATION">%2$s</xliff:g>ৰ জৰিয়তে খোলক"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"এক্সেছ দিয়ক"</string> <string name="whichEditApplication" msgid="144727838241402655">"ইয়াৰ দ্বাৰা সম্পাদনা কৰক"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$sৰদ্বাৰা সম্পাদনা কৰক"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ব্ৰাউজাৰ লঞ্চ কৰিবনে?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"কল স্বীকাৰ কৰিবনে?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"সদায়"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"সদায় খোলক-লৈ ছেট কৰক"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"মাত্ৰ এবাৰ"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"ছেটিংসমূহ"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$sএ কৰ্মস্থানৰ প্ৰ\'ফাইল সমৰ্থন নকৰে।"</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index f372fec14a44..e2b399850af7 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Telefonu sola hərəkət etdirin."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Telefonu sağa hərəkət etdirin."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Birbaşa cihaza baxın."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Üzünüz görünmür. Telefona baxın."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Üzünüzü telefonun qarşısında sabit saxlayın."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Cihaz stabil deyil. Telefonu tərpətməyin."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Üzünüzü yenidən qeydiyyatdan keçirin."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Üzü artıq tanımaq olmur. Yenidən cəhd edin."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Bununla açın"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s ilə açın"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Açın"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> linklərini belə açın:"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Linkləri belə açın:"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Linkləri <xliff:g id="APPLICATION">%1$s</xliff:g> ilə açın"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> linklərini <xliff:g id="APPLICATION">%2$s</xliff:g> ilə açın"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"İcazə verin"</string> <string name="whichEditApplication" msgid="144727838241402655">"Bununla düzəliş edin:"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s ilə düzəliş edin"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Brauzer işə salınsın?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Zəngi qəbul edək?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Həmişə"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"\"Həmişə açıq\" olaraq ayarlayın"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Sadəcə bir dəfə"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Ayarlar"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s iş profilini dəstəkləmir"</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index b4faae72fa2b..821b73039c89 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -571,7 +571,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Pomerite telefon ulevo."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Pomerite telefon udesno."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Gledajte pravo u uređaj."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Ne vidi se lice. Gledajte u telefon."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Postavite lice direktno ispred telefona"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Mnogo se pomerate. Držite telefon mirno."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Ponovo registrujte lice."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Više ne može da se prepozna lice. Probajte ponovo."</string> @@ -1151,14 +1151,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Otvorite pomoću"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Otvorite pomoću aplikacije %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Otvori"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Otvarajte <xliff:g id="HOST">%1$s</xliff:g> linkove pomoću"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Otvaratej linkove pomoću"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Otvarajte linkove pomoću aplikacije <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Otvarajte <xliff:g id="HOST">%1$s</xliff:g> linkove pomoću aplikacije <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Dozvoli pristup"</string> <string name="whichEditApplication" msgid="144727838241402655">"Izmenite pomoću"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Izmenite pomoću aplikacije %1$s"</string> @@ -1613,8 +1609,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Želite li da pokrenete pregledač?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Želite li da prihvatite poziv?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Uvek"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Podesi na „uvek otvaraj“"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Samo jednom"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Podešavanja"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ne podržava poslovni profil"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 996a02b13350..d5732028981e 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -574,7 +574,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Перамясціце тэлефон улева."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Перамясціце тэлефон управа."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Глядзіце прама на экран прылады."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Не відаць твару. Глядзіце на тэлефон."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Трымайце тэлефон прама перад тварам."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Трымайце прыладу нерухома. Трымайце тэлефон роўна."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Паўтарыце рэгістрацыю твару."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Не ўдаецца распазнаць твар. Паўтарыце спробу."</string> @@ -1171,14 +1171,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Адкрыць з дапамогай"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Адкрыць з дапамогай %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Адкрыць"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Адкрываць спасылкі <xliff:g id="HOST">%1$s</xliff:g> з дапамогай"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Адкрываць спасылкі з дапамогай"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Адкрываць спасылкі з дапамогай праграмы \"<xliff:g id="APPLICATION">%1$s</xliff:g>\""</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Адкрываць спасылкі <xliff:g id="HOST">%1$s</xliff:g>з дапамогай праграмы \"<xliff:g id="APPLICATION">%2$s</xliff:g>\""</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Даць доступ"</string> <string name="whichEditApplication" msgid="144727838241402655">"Рэдагаваць з дапамогай"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Рэдагаваць з дапамогай %1$s"</string> @@ -1636,8 +1632,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Запусцiць браўзер?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Прыняць выклік?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Заўсёды"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Прызначыць стандартна для адкрыцця"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Толькі адзін раз"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Налады"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s не падтрымлівае працоўны профіль"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index e4e1e808ae48..e073b7d9948b 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Преместете телефона наляво."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Преместете телефона надясно."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Моля, гледайте точно към устройството си."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Лицето ви не се вижда. Погледнете към телефона."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Позиционирайте лицето си директно пред телефона."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Твърде много движение. Дръжте телефона неподвижно."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Моля, регистрирайте лицето си отново."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Лицето не бе разпознато. Опитайте отново."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Отваряне чрез"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Отваряне чрез %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Отваряне"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Отваряне на връзките от <xliff:g id="HOST">%1$s</xliff:g> посредством"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Отваряне на връзките посредством"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Отваряне на връзките посредством <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Отваряне на връзките от <xliff:g id="HOST">%1$s</xliff:g> посредством <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Даване на достъп"</string> <string name="whichEditApplication" msgid="144727838241402655">"Редактиране чрез"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Редактиране чрез %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Да се стартира ли браузърът?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Да се приеме ли обаждането?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Винаги"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Задаване винаги да се отваря"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Само веднъж"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Настройки"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s не поддържа служебен потребителски профил"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index ca4d12237544..368ff90b5368 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"ফোনটি বাঁদিকে সরান।"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"ফোনটি ডানদিকে সরান।"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"সরাসরি ডিভাইসের দিকে তাকান।"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"আপনার মুখ দেখা যাচ্ছে না। ফোনের দিকে তাকান।"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"আপনার মুখ সরাসরি ফোনের সামনে রাখুন।"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"খুব বেশি নড়ছে। ফোনটি যাতে না কাঁপে সেইভাবে ধরুন।"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"আপনার মুখের ছবি আবার নথিভুক্ত করুন।"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"আর মুখ চিনতে পারবেন না। আবার চেষ্টা করুন।"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"এর মাধ্যমে খুলুন"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s দিয়ে খুলুন"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"খুলুন"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"এই ব্রাউজারে <xliff:g id="HOST">%1$s</xliff:g> লিঙ্কটি খুলুন"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"এই ব্রাউজারে লিঙ্কটি খুলুন"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g>-এ লিঙ্ক খুলুন"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="APPLICATION">%2$s</xliff:g>-এ <xliff:g id="HOST">%1$s</xliff:g> লিঙ্কটি খুলুন"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"অ্যাক্সেস দিন"</string> <string name="whichEditApplication" msgid="144727838241402655">"এর মাধ্যমে সম্পাদনা করুন"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s দিয়ে সম্পাদনা করুন"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ব্রাউজার লঞ্চ করতে চান?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"কল গ্রহণ করবেন?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"সবসময়"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"\'সবসময় খোলা থাকবে\' হিসেবে সেট করুন"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"শুধু একবার"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"সেটিংস"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s কর্মস্থলের প্রোফাইল সমর্থন করে না।"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index fd441287bb39..ce852b6a01dd 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -127,7 +127,7 @@ <item msgid="3910386316304772394">"Da biste pozivali i slali poruke koristeći WiFi mrežu, prvo zatražite od operatera da postavi tu uslugu. Zatim ponovo uključite pozivanje putem WiFi-ja u Postavkama. (Kôd greške: <xliff:g id="CODE">%1$s</xliff:g>)"</item> </string-array> <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="7372514042696663278">"Došlo je do problema prilikom registracije pozivanja putem WiFi mreže kod vašeg operatera: <xliff:g id="CODE">%1$s</xliff:g>"</item> + <item msgid="7372514042696663278">"Došlo je do problema prilikom registracije pozivanja putem WiFi mreže kod vašeg mobilnog operatera: <xliff:g id="CODE">%1$s</xliff:g>"</item> </string-array> <!-- no translation found for wfcSpnFormat_spn (4998685024207291232) --> <skip /> @@ -571,7 +571,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Pomjerite telefon ulijevo."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Pomjerite telefon udesno."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Gledajte direktno u uređaj."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Ne vidi se lice. Gledajte u telefon."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Postavite lice direktno ispred telefona"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Previše pokreta. Držite telefon mirno."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Ponovo registrirajte lice."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Nije više moguće prepoznati lice. Pokušajte opet."</string> @@ -802,7 +802,7 @@ <string name="quick_contacts_not_available" msgid="746098007828579688">"Nije pronađena aplikacija za pregled ovog kontakta."</string> <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Unesite PIN"</string> <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Unesite PUK i novi PIN"</string> - <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kôd"</string> <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Novi PIN"</string> <string name="keyguard_password_entry_touch_hint" msgid="2644215452200037944"><font size="17">"Dodirnite za unos lozinke"</font></string> <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Unesite lozinku za otključavanje tipkovnice"</string> @@ -894,7 +894,7 @@ <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Otključavanje licem."</string> <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Otključavanje pinom."</string> <string name="keyguard_accessibility_sim_pin_unlock" msgid="9149698847116962307">"Otključavanje Pin-om za Sim."</string> - <string name="keyguard_accessibility_sim_puk_unlock" msgid="9106899279724723341">"Otključavanje Puk-om za Sim."</string> + <string name="keyguard_accessibility_sim_puk_unlock" msgid="9106899279724723341">"Otključavanje SIM-a PUK-om"</string> <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Otključavanje lozinkom."</string> <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Uzorak oblasti."</string> <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Oblast za pomjeranje klizača."</string> @@ -1151,14 +1151,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Otvori koristeći"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Otvori koristeći %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Otvori"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Otvaranje <xliff:g id="HOST">%1$s</xliff:g> linkova pomoću"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Otvaranje linkova pomoću"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Otvaranje linkova pomoću aplikacije <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Otvaranje <xliff:g id="HOST">%1$s</xliff:g> linkova pomoću aplikacije <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Dozvoli pristup"</string> <string name="whichEditApplication" msgid="144727838241402655">"Uredi koristeći"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Uredi koristeći %1$s"</string> @@ -1547,7 +1543,7 @@ <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"Povećaj sate"</string> <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"Smanji sate"</string> <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"Postavi za poslijepodne (PM)"</string> - <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"Postavi za prijepodne (AM)"</string> + <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"Postavi za prijepodne"</string> <string name="date_picker_increment_month_button" msgid="5369998479067934110">"Povećaj mjesece"</string> <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"Smanji mjesece"</string> <string name="date_picker_increment_day_button" msgid="7130465412308173903">"Povećaj dane"</string> @@ -1615,8 +1611,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Pokretanje preglednika?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Prihvatiti poziv?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Uvijek"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Postavi da se uvijek otvara"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Samo ovaj put"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Postavke"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ne podržava poslovni profil"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 1638fd82c243..7cfcaf4c8809 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Mou el telèfon cap a l\'esquerra."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Mou el telèfon cap a la dreta."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Mira més directament cap al dispositiu."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"No se\'t veu la cara. Mira el telèfon."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Posa la cara directament davant del telèfon."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Massa moviment. Subjecta bé el telèfon."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Torna a registrar la teva cara."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Ja no es reconeix la teva cara. Torna-ho a provar."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Obre amb"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Obre amb %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Obre"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Obre els enllaços de <xliff:g id="HOST">%1$s</xliff:g> amb"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Obre els enllaços amb"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Obre els enllaços amb <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Obre els enllaços de <xliff:g id="HOST">%1$s</xliff:g> amb <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Dona accés"</string> <string name="whichEditApplication" msgid="144727838241402655">"Edita amb"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Edita amb %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Vols iniciar el navegador?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vols acceptar la trucada?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Obre sempre"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Només una vegada"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Configuració"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s no admet perfils professionals."</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 5208e5bc1c3a..4171a8bce984 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -574,7 +574,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Přesuňte telefon vlevo."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Přesuňte telefon vpravo."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Dívejte se přímo na zařízení."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Obličej není vidět. Podívejte se na telefon."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Umístěte obličej přímo před telefon."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Příliš mnoho pohybu. Držte telefon nehybně."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Zaznamenejte obličej znovu."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Obličej už nelze rozpoznat. Zkuste to znovu."</string> @@ -1171,14 +1171,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Otevřít v aplikaci"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Otevřít v aplikaci %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Otevřít"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Odkazy <xliff:g id="HOST">%1$s</xliff:g> otevírat pomocí aplikace"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Odkazy otevírat pomocí aplikace"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Odkazy otevírat pomocí aplikace <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Odkazy <xliff:g id="HOST">%1$s</xliff:g> otevírat pomocí aplikace <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Udělit přístup"</string> <string name="whichEditApplication" msgid="144727838241402655">"Upravit v aplikaci"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Upravit v aplikaci %1$s"</string> @@ -1636,8 +1632,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Spustit prohlížeč?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Přijmout hovor?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Vždy"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Nastavit na Otevírat vždy"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Pouze jednou"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Nastavení"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s pracovní profily nepodporuje."</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 401fa4f75334..b6cb874eb647 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Flyt telefonen til venstre."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Flyt telefonen til højre."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Kig mere direkte på din enhed."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Dit ansigt kan ikke registreres. Kig på telefonen."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Sørg for, at dit ansigt er direkte foran telefonen."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Der er for meget bevægelse. Hold telefonen stille."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Registrer dit ansigt igen."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Ansigtet kan ikke længere genkendes. Prøv igen."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Åbn med"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Åbn med %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Åbn"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Åbn <xliff:g id="HOST">%1$s</xliff:g>-links med"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Åbn links med"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Åbn links med <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Åbn <xliff:g id="HOST">%1$s</xliff:g>-links med <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Giv adgang"</string> <string name="whichEditApplication" msgid="144727838241402655">"Rediger med"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Rediger med %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Vil du starte browseren?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vil du besvare opkaldet?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Altid"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Angiv som altid åben"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Kun én gang"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Indstillinger"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s understøtter ikke arbejdsprofil"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 67c179dc5e95..5316d13a9fcf 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -316,15 +316,15 @@ <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Fensterinhalte abrufen"</string> <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Die Inhalte eines Fensters, mit dem du interagierst, werden abgerufen."</string> <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"\"Tippen & Entdecken\" aktivieren"</string> - <string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"Berührte Elemente werden laut vorgelesen und der Bildschirm kann über Gesten erkundet werden."</string> + <string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"Berührte Elemente werden laut vorgelesen und der Bildschirm kann über Touch-Gesten erkundet werden."</string> <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Text bei der Eingabe beobachten"</string> <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Einschließlich personenbezogener Daten wie Kreditkartennummern und Passwörter."</string> <string name="capability_title_canControlMagnification" msgid="3593493281059424855">"Displayvergrößerung festlegen"</string> <string name="capability_desc_canControlMagnification" msgid="4791858203568383773">"Legt die Zoom-Stufe und -Position auf dem Display fest."</string> - <string name="capability_title_canPerformGestures" msgid="7418984730362576862">"Gesten möglich"</string> - <string name="capability_desc_canPerformGestures" msgid="8296373021636981249">"Tippen, Wischen, Zusammenziehen und andere Gesten möglich."</string> - <string name="capability_title_canCaptureFingerprintGestures" msgid="6309568287512278670">"Bewegungen auf dem Fingerabdrucksensor"</string> - <string name="capability_desc_canCaptureFingerprintGestures" msgid="4386487962402228670">"Erfasst Bewegungen auf dem Fingerabdrucksensor des Geräts."</string> + <string name="capability_title_canPerformGestures" msgid="7418984730362576862">"Touch-Gesten möglich"</string> + <string name="capability_desc_canPerformGestures" msgid="8296373021636981249">"Tippen, Wischen, Zusammenziehen und andere Touch-Gesten möglich."</string> + <string name="capability_title_canCaptureFingerprintGestures" msgid="6309568287512278670">"Fingerabdrucksensor-Gesten"</string> + <string name="capability_desc_canCaptureFingerprintGestures" msgid="4386487962402228670">"Erfasst Touch-Gesten auf dem Fingerabdrucksensor des Geräts."</string> <string name="permlab_statusBar" msgid="7417192629601890791">"Statusleiste deaktivieren oder ändern"</string> <string name="permdesc_statusBar" msgid="8434669549504290975">"Ermöglicht der App, die Statusleiste zu deaktivieren oder Systemsymbole hinzuzufügen oder zu entfernen"</string> <string name="permlab_statusBarService" msgid="4826835508226139688">"Statusleiste darstellen"</string> @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Beweg das Smartphone nach links."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Beweg das Smartphone nach rechts."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Bitte sieh direkt auf dein Gerät."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Gesicht wurde nicht gefunden. Blicke aufs Telefon."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Halte dein Gesicht direkt vor dein Smartphone."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Zu viel Unruhe. Halte das Smartphone ruhig."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Bitte registriere dein Gesicht noch einmal."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Gesicht wird nicht mehr erkannt. Erneut versuchen."</string> @@ -971,8 +971,8 @@ <string name="searchview_description_submit" msgid="2688450133297983542">"Anfrage senden"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Sprachsuche"</string> <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"\"Tippen & Entdecken\" aktivieren?"</string> - <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> fordert die Aktivierung von \"Tippen & Entdecken\" an. Wenn \"Tippen & Entdecken\" aktiviert ist, kannst du Beschreibungen dessen hören oder sehen, was sich unter deinen Fingern befindet, oder Gesten ausführen, um mit dem Tablet zu kommunizieren."</string> - <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> fordert die Aktivierung von \"Tippen & Entdecken\" an. Wenn \"Tippen & Entdecken\" aktiviert ist, kannst du Beschreibungen dessen hören oder sehen, was sich unter deinen Fingern befindet, oder Gesten ausführen, um mit dem Telefon zu kommunizieren."</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> fordert die Aktivierung von \"Tippen & Entdecken\" an. Wenn \"Tippen & Entdecken\" aktiviert ist, kannst du Beschreibungen dessen hören oder sehen, was sich unter deinen Fingern befindet, oder über Touch-Gesten mit dem Tablet kommunizieren."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> fordert die Aktivierung von \"Tippen & Entdecken\" an. Wenn \"Tippen & Entdecken\" aktiviert ist, kannst du Beschreibungen dessen hören oder sehen, was sich unter deinen Fingern befindet, oder über Touch-Gesten mit dem Telefon kommunizieren."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"Vor 1 Monat"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Vor mehr als 1 Monat"</string> <plurals name="last_num_days" formatted="false" msgid="5104533550723932025"> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Öffnen mit"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Mit %1$s öffnen"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Öffnen"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Links von <xliff:g id="HOST">%1$s</xliff:g> öffnen mit"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Links öffnen mit"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Links mit <xliff:g id="APPLICATION">%1$s</xliff:g> öffnen"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Links von <xliff:g id="HOST">%1$s</xliff:g> mit <xliff:g id="APPLICATION">%2$s</xliff:g> öffnen"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Zugriff erlauben"</string> <string name="whichEditApplication" msgid="144727838241402655">"Bearbeiten mit"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Mit %1$s bearbeiten"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Browser starten?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Anruf annehmen?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Immer"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Auf \"Immer geöffnet\" festlegen"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Nur diesmal"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Einstellungen"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"Das Arbeitsprofil wird von %1$s nicht unterstützt."</string> @@ -1675,8 +1670,8 @@ <string name="accessibility_shortcut_disabling_service" msgid="2747243438223109821">"<xliff:g id="SERVICE_NAME">%1$s</xliff:g> wurde durch die Bedienungshilfenverknüpfung deaktiviert"</string> <string name="accessibility_shortcut_spoken_feedback" msgid="8376923232350078434">"Halten Sie beide Lautstärketasten drei Sekunden lang gedrückt, um <xliff:g id="SERVICE_NAME">%1$s</xliff:g> zu verwenden"</string> <string name="accessibility_button_prompt_text" msgid="1176658502969738564">"Wähle den Dienst aus, der verwendet werden soll, wenn du auf die Schaltfläche für die Bedienungshilfen tippst:"</string> - <string name="accessibility_gesture_prompt_text" msgid="8259145549733019401">"Wähle den Dienst aus, der mit der Bewegung für die Bedienungshilfen verwendet werden soll (mit zwei Fingern vom unteren Bildschirmrand nach oben wischen):"</string> - <string name="accessibility_gesture_3finger_prompt_text" msgid="1041435574275047665">"Wähle den Dienst aus, der mit der Geste für die Bedienungshilfen verwendet werden soll (mit drei Fingern vom unteren Bildschirmrand nach oben wischen):"</string> + <string name="accessibility_gesture_prompt_text" msgid="8259145549733019401">"Wähle den Dienst aus, der mit der Touch-Geste für die Bedienungshilfen verwendet werden soll (mit zwei Fingern vom unteren Bildschirmrand nach oben wischen):"</string> + <string name="accessibility_gesture_3finger_prompt_text" msgid="1041435574275047665">"Wähle den Dienst aus, der mit der Touch-Geste für die Bedienungshilfen verwendet werden soll (mit drei Fingern vom unteren Bildschirmrand nach oben wischen):"</string> <string name="accessibility_button_instructional_text" msgid="7003212763213614833">"Wenn du zwischen den Diensten wechseln möchtest, halte die Schaltfläche für die Bedienungshilfen gedrückt."</string> <string name="accessibility_gesture_instructional_text" msgid="5261788874937410950">"Wenn du zwischen den Diensten wechseln möchtest, wische mit zwei Fingern nach oben und halte sie gedrückt."</string> <string name="accessibility_gesture_3finger_instructional_text" msgid="4969448938984394550">"Wenn du zwischen den Diensten wechseln möchtest, wische mit drei Fingern nach oben und halte sie gedrückt."</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 87d08444db0a..44357ff161b5 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Μετακινήστε το τηλέφωνο στα αριστερά."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Μετακινήστε το τηλέφωνο στα δεξιά."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Κοιτάξτε απευθείας τη συσκευή σας."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Δεν εντοπίστηκε το πρόσωπό σας. Δείτε το τηλέφωνο."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Στρέψτε το πρόσωπό σάς απευθείας στο τηλέφωνο."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Πάρα πολλή κίνηση. Κρατήστε σταθερό το τηλέφωνο."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Καταχωρίστε ξανά το πρόσωπό σας."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Αδύνατη η αναγνώριση του προσώπου. Επανάληψη."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Άνοιγμα με"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Άνοιγμα με %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Άνοιγμα"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Άνοιγμα συνδέσμων <xliff:g id="HOST">%1$s</xliff:g> με"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Άνοιγμα συνδέσμων με"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Άνοιγμα συνδέσμων με την εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Άνοιγμα συνδέσμων <xliff:g id="HOST">%1$s</xliff:g> με την εφαρμογή <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Παροχή πρόσβασης"</string> <string name="whichEditApplication" msgid="144727838241402655">"Επεξεργασία με"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Επεξεργασία με %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Εκκίνηση προγράμματος περιήγησης;"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Αποδοχή κλήσης;"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Πάντα"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Ορισμός ως πάντα ανοικτής"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Μόνο μία φορά"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Ρυθμίσεις"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"Το προφίλ εργασίας δεν υποστηρίζεται από %1$s"</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 51b031bc535c..cc389f3189f1 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Move phone to the left."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Move phone to the right."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Please look more directly at your device."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Can’t see your face. Look at the phone."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Position your face directly in front of the phone."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Too much motion. Hold phone steady."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Please re-enroll your face."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"No longer able to recognise face. Try again."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Open with"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Open with %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Open"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Open <xliff:g id="HOST">%1$s</xliff:g> links with"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Open links with"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Open links with <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Open <xliff:g id="HOST">%1$s</xliff:g> links with <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Give access"</string> <string name="whichEditApplication" msgid="144727838241402655">"Edit with"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Edit with %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Launch Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Accept call?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Always"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Set to always open"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Just once"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Settings"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s doesn\'t support work profile"</string> diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index fd14d4dc7e31..0e6d49cef10f 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Move phone to the left."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Move phone to the right."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Please look more directly at your device."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Can’t see your face. Look at the phone."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Position your face directly in front of the phone."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Too much motion. Hold phone steady."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Please re-enroll your face."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"No longer able to recognise face. Try again."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Open with"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Open with %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Open"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Open <xliff:g id="HOST">%1$s</xliff:g> links with"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Open links with"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Open links with <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Open <xliff:g id="HOST">%1$s</xliff:g> links with <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Give access"</string> <string name="whichEditApplication" msgid="144727838241402655">"Edit with"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Edit with %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Launch Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Accept call?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Always"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Set to always open"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Just once"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Settings"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s doesn\'t support work profile"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 51b031bc535c..cc389f3189f1 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Move phone to the left."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Move phone to the right."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Please look more directly at your device."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Can’t see your face. Look at the phone."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Position your face directly in front of the phone."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Too much motion. Hold phone steady."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Please re-enroll your face."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"No longer able to recognise face. Try again."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Open with"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Open with %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Open"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Open <xliff:g id="HOST">%1$s</xliff:g> links with"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Open links with"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Open links with <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Open <xliff:g id="HOST">%1$s</xliff:g> links with <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Give access"</string> <string name="whichEditApplication" msgid="144727838241402655">"Edit with"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Edit with %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Launch Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Accept call?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Always"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Set to always open"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Just once"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Settings"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s doesn\'t support work profile"</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index 51b031bc535c..cc389f3189f1 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Move phone to the left."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Move phone to the right."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Please look more directly at your device."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Can’t see your face. Look at the phone."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Position your face directly in front of the phone."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Too much motion. Hold phone steady."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Please re-enroll your face."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"No longer able to recognise face. Try again."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Open with"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Open with %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Open"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Open <xliff:g id="HOST">%1$s</xliff:g> links with"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Open links with"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Open links with <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Open <xliff:g id="HOST">%1$s</xliff:g> links with <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Give access"</string> <string name="whichEditApplication" msgid="144727838241402655">"Edit with"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Edit with %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Launch Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Accept call?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Always"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Set to always open"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Just once"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Settings"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s doesn\'t support work profile"</string> diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml index 638d29d2aa8f..dade85ebf851 100644 --- a/core/res/res/values-en-rXC/strings.xml +++ b/core/res/res/values-en-rXC/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Move phone to the left."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Move phone to the right."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Please look more directly at your device."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Can’t see your face. Look at the phone."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Position your face directly in front of the phone."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Too much motion. Hold phone steady."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Please re-enroll your face."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"No longer able to recognize face. Try again."</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 43e0823a7c18..3a2ea3e101e7 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -292,7 +292,7 @@ <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string> <string name="permgroupdesc_sms" msgid="4656988620100940350">"enviar y ver mensajes SMS"</string> <string name="permgrouprequest_sms" msgid="7168124215838204719">"¿Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> envíe y vea SMS?"</string> - <string name="permgrouplab_storage" msgid="1971118770546336966">"Espacio de almacenamiento"</string> + <string name="permgrouplab_storage" msgid="1971118770546336966">"Almacenamiento"</string> <string name="permgroupdesc_storage" msgid="637758554581589203">"acceder a las fotos, el contenido multimedia y los archivos"</string> <string name="permgrouprequest_storage" msgid="7885942926944299560">"¿Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda a las fotos, el contenido multimedia y los archivos de tu dispositivo?"</string> <string name="permgrouplab_microphone" msgid="171539900250043464">"Micrófono"</string> @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Mueve el teléfono hacia la izquierda."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Mueve el teléfono hacia la derecha."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Mira directamente al dispositivo."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"No se ve tu cara. Mira el teléfono."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Ubica el rostro directamente frente al teléfono."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Te estás moviendo demasiado. No muevas el teléfono"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Vuelve a registrar tu cara."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Ya no se reconoce la cara. Vuelve a intentarlo."</string> @@ -602,7 +602,7 @@ <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Permite que la aplicación consulte las estadísticas de sincronización de una cuenta, por ejemplo, el historial de eventos sincronizados y la cantidad de datos sincronizados."</string> <string name="permlab_sdcardRead" msgid="1438933556581438863">"ver almacenamiento compartido"</string> <string name="permdesc_sdcardRead" msgid="1804941689051236391">"Ver almacenamiento compartido"</string> - <string name="permlab_sdcardWrite" msgid="9220937740184960897">"Cambia/borra almac. compartido"</string> + <string name="permlab_sdcardWrite" msgid="9220937740184960897">"cambiar o borrar contenido de almacenamiento compartido"</string> <string name="permdesc_sdcardWrite" msgid="2834431057338203959">"Editar almacen. compartido"</string> <string name="permlab_use_sip" msgid="2052499390128979920">"realizar/recibir llamadas SIP"</string> <string name="permdesc_use_sip" msgid="2297804849860225257">"Permite que la aplicación realice y reciba llamadas SIP."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Abrir con"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Abrir con %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Abrir"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Abrir vínculos de <xliff:g id="HOST">%1$s</xliff:g> con"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Abrir vínculos con"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Abrir vínculos con <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Abrir vínculos de <xliff:g id="HOST">%1$s</xliff:g> con <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Otorgar acceso"</string> <string name="whichEditApplication" msgid="144727838241402655">"Editar con"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Editar con %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"¿Deseas iniciar el navegador?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"¿Aceptar la llamada?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Siempre"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Establecer en \"abrir siempre\""</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Solo una vez"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Configuración"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s no admite perfiles de trabajo."</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 90bf8b6dc51b..633759b68cb5 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Mueve el teléfono hacia la izquierda."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Mueve el teléfono hacia la derecha."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Mira de forma más directa al dispositivo."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"No se detecta tu cara. Mira al teléfono."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Coloca la cara directamente frente al teléfono."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"El teléfono se mueve demasiado. Mantenlo quieto."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Vuelve a registrar tu cara."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"No puede reconocer tu cara. Vuelve a intentarlo."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Abrir con"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Abrir con %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Abrir"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Abrir enlaces de <xliff:g id="HOST">%1$s</xliff:g> con"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Abrir enlaces con"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Abrir enlaces con <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Abrir enlaces de <xliff:g id="HOST">%1$s</xliff:g> con <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Permitir acceso"</string> <string name="whichEditApplication" msgid="144727838241402655">"Editar con"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Editar con %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"¿Iniciar el navegador?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"¿Aceptar la llamada?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Siempre"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Configurar para que se abra siempre"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Solo una vez"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Ajustes"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s no admite perfiles de trabajo"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index cf84482078de..86843c7a3dfd 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Liigutage telefoni vasakule."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Liigutage telefoni paremale."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Vaadake otse oma seadmesse."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Teie nägu ei ole näha. Vaadake telefoni poole."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Hoidke oma nägu otse telefoni ees."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Liiga palju liikumist. Hoidke telefoni paigal."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Registreerige oma nägu uuesti."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Nägu ei õnnestu enam tuvastada. Proovige uuesti."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Avamine:"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Avamine rakendusega %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Ava"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Ava teenuse <xliff:g id="HOST">%1$s</xliff:g> lingid rakendusega"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Ava lingid rakendusega"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Linkide avamine rakendusega <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Ava teenuse <xliff:g id="HOST">%1$s</xliff:g> lingid rakendusega <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Juudep. andmine"</string> <string name="whichEditApplication" msgid="144727838241402655">"Muutmine:"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Muutmine rakendusega %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Kas käivitada brauser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Kas vastata kõnele?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Alati"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Määra alati avama"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Ainult üks kord"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Seaded"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ei toeta tööprofiili"</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index ba1e0b2b8fdd..d25fe8c24401 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -375,7 +375,7 @@ <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"Beren zati batzuk memoria modu iraunkorrean ezartzeko baimena ematen die aplikazioei. Horrela, beste aplikazioek erabilgarri duten memoria murritz daiteke eta tableta motel daiteke."</string> <string name="permdesc_persistentActivity" product="tv" msgid="5086862529499103587">"Beren zati batzuk memorian modu iraunkorrean aktibo uztea baimentzen die aplikazioei. Horrela, beste aplikazioek memoria gutxiago izan lezakete erabilgarri eta telebistak motelago funtziona lezake."</string> <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"Beren zati batzuk memoria modu iraunkorrean ezartzeko baimena ematen die aplikazioei. Horrela, beste aplikazioek erabilgarri duten memoria murritz daiteke eta telefonoa motel daiteke."</string> - <string name="permlab_foregroundService" msgid="3310786367649133115">"Exekutatu zerbitzuak aurreko planoan"</string> + <string name="permlab_foregroundService" msgid="3310786367649133115">"Abiarazi zerbitzuak aurreko planoan"</string> <string name="permdesc_foregroundService" msgid="6471634326171344622">"Aurreko planoko zerbitzuak erabiltzea baimentzen dio aplikazioari."</string> <string name="permlab_getPackageSize" msgid="7472921768357981986">"neurtu aplikazioen biltegiratzeko tokia"</string> <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Bere kodea, datuak eta cache-tamainak eskuratzeko baimena ematen die aplikazioei."</string> @@ -422,7 +422,7 @@ <string name="permdesc_accessCoarseLocation" product="tv" msgid="3027871910200890806">"Aplikazioa aurreko planoan dagoenean, zure kokapenaren berri izan dezake sareen iturburuak erabilita; adibidez, telefonia mugikorreko dorreak eta Wi-Fi sareak. Kokapen-zerbitzu horiek aktibatuta eta erabilgarri izan behar dituzu telebistan, aplikazioak erabil ditzan."</string> <string name="permdesc_accessCoarseLocation" product="default" msgid="854896049371048754">"Aplikazioa aurreko planoan dagoenean, zure kokapenaren berri izan dezake sareen iturburuak erabilita; adibidez, telefonia mugikorreko dorreak eta Wi-Fi sareak. Kokapen-zerbitzu horiek aktibatuta eta erabilgarri izan behar dituzu telefonoan, aplikazioak erabil ditzan."</string> <string name="permlab_accessBackgroundLocation" msgid="3965397804300661062">"Atzitu kokapena atzeko planoan"</string> - <string name="permdesc_accessBackgroundLocation" msgid="1096394429579210251">"Baimen hau ematen bada kokapen zehatz edo gutxi gorabeherakorako sarbideaz gain, atzeko planoan exekutatu bitartean atzitu ahalko du aplikazioak kokapena."</string> + <string name="permdesc_accessBackgroundLocation" msgid="1096394429579210251">"Baimen hau ematen bada kokapen zehatz edo gutxi gorabeherakorako sarbideaz gain, atzeko planoan abian den bitartean atzitu ahalko du aplikazioak kokapena."</string> <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"aldatu audio-ezarpenak"</string> <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Audio-ezarpen orokorrak aldatzeko baimena ematen dio; besteak beste, bolumena eta irteerarako zer bozgorailu erabiltzen den."</string> <string name="permlab_recordAudio" msgid="3876049771427466323">"grabatu audioa"</string> @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Mugitu telefonoa ezkerretara."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Mugitu telefonoa eskuinetara."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Begiratu zuzenago gailuari."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Ez da hautematen aurpegia. Begiratu telefonoari."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Ipini aurrez aurre aurpegia eta telefonoa."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Mugimendu gehiegi dago. Eutsi tinko telefonoari."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Erregistratu berriro aurpegia."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Ez dugu ezagutzen aurpegi hori. Saiatu berriro."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Ireki honekin:"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Irekin %1$s aplikazioarekin"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Ireki"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Ireki <xliff:g id="HOST">%1$s</xliff:g> ostalariko estekak honekin:"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Ireki estekak honekin:"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Ireki estekak <xliff:g id="APPLICATION">%1$s</xliff:g> aplikazioarekin"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Ireki <xliff:g id="HOST">%1$s</xliff:g> ostalariko estekak <xliff:g id="APPLICATION">%2$s</xliff:g> aplikazioarekin"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Eman sarbidea"</string> <string name="whichEditApplication" msgid="144727838241402655">"Editatu honekin:"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Editatu %1$s aplikazioarekin"</string> @@ -1181,7 +1177,7 @@ <string name="wait" msgid="7147118217226317732">"Itxaron"</string> <string name="webpage_unresponsive" msgid="3272758351138122503">"Orriak ez du erantzuten.\n\nItxi egin nahi duzu?"</string> <string name="launch_warning_title" msgid="1547997780506713581">"Aplikazioa birbideratu da"</string> - <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioa exekutatzen ari da."</string> + <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioa abian da."</string> <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioa lehenago abiarazi da."</string> <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Eskala"</string> <string name="screen_compat_mode_show" msgid="4013878876486655892">"Erakutsi beti"</string> @@ -1207,7 +1203,7 @@ <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> prestatzen."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Aplikazioak abiarazten."</string> <string name="android_upgrading_complete" msgid="1405954754112999229">"Bertsio-berritzea amaitzen."</string> - <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> exekutatzen"</string> + <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> abian da"</string> <string name="heavy_weight_notification_detail" msgid="2304833848484424985">"Sakatu jokora itzultzeko"</string> <string name="heavy_weight_switcher_title" msgid="387882830435195342">"Aukeratu joko bat"</string> <string name="heavy_weight_switcher_text" msgid="4176781660362912010">"Funtzionamendu hobea izateko, joko hauetako bat baino ezin da egon irekita aldi berean."</string> @@ -1445,7 +1441,7 @@ <string name="ime_action_next" msgid="3138843904009813834">"Hurrengoa"</string> <string name="ime_action_done" msgid="8971516117910934605">"Eginda"</string> <string name="ime_action_previous" msgid="1443550039250105948">"Atzera"</string> - <string name="ime_action_default" msgid="2840921885558045721">"Exekutatu"</string> + <string name="ime_action_default" msgid="2840921885558045721">"Abiarazi"</string> <string name="dial_number_using" msgid="5789176425167573586">"Markatu zenbakia \n<xliff:g id="NUMBER">%s</xliff:g> erabilita"</string> <string name="create_contact_using" msgid="4947405226788104538">"Sortu kontaktua\n<xliff:g id="NUMBER">%s</xliff:g> erabilita"</string> <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"Aplikazio hauetako bat edo gehiago kontua orain eta etorkizunean atzitzeko baimena eskatzen ari dira."</string> @@ -1555,7 +1551,7 @@ <string name="storage_sd_card_label" msgid="6347111320774379257">"<xliff:g id="MANUFACTURER">%s</xliff:g> SD txartela"</string> <string name="storage_usb_drive" msgid="6261899683292244209">"USB bidezko unitatea"</string> <string name="storage_usb_drive_label" msgid="4501418548927759953">"<xliff:g id="MANUFACTURER">%s</xliff:g> enpresaren USB bidezko unitatea"</string> - <string name="storage_usb" msgid="3017954059538517278">"USB memoria"</string> + <string name="storage_usb" msgid="3017954059538517278">"USB bidezko memoria"</string> <string name="extract_edit_menu_button" msgid="8940478730496610137">"Editatu"</string> <string name="data_usage_warning_title" msgid="6499834033204801605">"Datuen erabileraren abisua"</string> <string name="data_usage_warning_body" msgid="7340198905103751676">"<xliff:g id="APP">%s</xliff:g> erabili dituzu"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Arakatzailea abiarazi nahi duzu?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Deia onartu nahi duzu?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Beti"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Ezarri beti irekitzeko"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Behin soilik"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Ezarpenak"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s abiarazleak ez du laneko profil hau onartzen"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 280a56ec5f14..48cdafcfed47 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"تلفن را بهسمت چپ حرکت دهید."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"تلفن را به سمت راست حرکت دهید."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"لطفاً مستقیم به دستگاه نگه کنید."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"چهرهتان دیده نمیشود. به تلفن نگاه کنید."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"صورتتان را مستقیماً روبروی تلفن قرار دهید."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"حرکت خیلی زیاد است. تلفن را ثابت نگهدارید."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"لطفاً چهرهتان را مجدداً ثبت کنید."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"دیگر چهره را تشخیص نمیدهد. دوباره امتحان کنید."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"باز کردن با"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"باز کردن با %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"باز کردن"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"باز کردن پیوندهای <xliff:g id="HOST">%1$s</xliff:g> با"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"باز کردن پیوندها با"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"باز کردن پیوندها با <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"باز کردن پیوندهای <xliff:g id="HOST">%1$s</xliff:g> با <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"ارائه دسترسی"</string> <string name="whichEditApplication" msgid="144727838241402655">"ویرایش با"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"ویرایش با %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"مرورگر راهاندازی شود؟"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"تماس را میپذیرید؟"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"همیشه"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"تنظیم روی همیشه باز شدن"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"فقط این بار"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"تنظیمات"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s از نمایه کاری پشتیبانی نمیکند"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 7a5003bacce3..cd9a71174649 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Siirrä puhelinta vasemmalle."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Siirrä puhelinta oikealle."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Katso suoremmin laitteeseen."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Kasvojasi ei näy. Katso puhelinta."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Aseta kasvosi suoraan puhelimen eteen."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Laite liikkui liikaa. Pidä puhelin vakaana."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Rekisteröi kasvot uudelleen."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Ei enää tunnista kasvoja. Yritä uudelleen."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Avaa sovelluksessa"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Avaa sovelluksessa %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Avaa"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g>-linkit avataan:"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Linkit avataan:"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g> avaa linkit"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="APPLICATION">%2$s</xliff:g> avaa linkit (<xliff:g id="HOST">%1$s</xliff:g>)"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Salli"</string> <string name="whichEditApplication" msgid="144727838241402655">"Muokkaa sovelluksessa"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Muokkaa sovelluksessa %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Käynnistetäänkö selain?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vastataanko puheluun?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Aina"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Avaa aina"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Vain kerran"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Asetukset"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ei tue työprofiilia"</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index 0ddb19abbdd6..2bfef39cf924 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Déplacez le téléphone vers la gauche."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Déplacez le téléphone vers la droite."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Veuillez regarder plus directement votre appareil."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Visage non détecté. Regardez le téléphone."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Placez votre visage directement devant le téléphone."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Trop de mouvement. Tenez le téléphone immobile."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Veuillez inscrire votre visage à nouveau."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Ce visage ne sera plus reconnu. Réessayez."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Ouvrir avec"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Ouvrir avec %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Ouvrir"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Ouvrir les liens <xliff:g id="HOST">%1$s</xliff:g> avec"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Ouvrir les liens avec"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Ouvrir les liens avec <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Ouvrir les liens <xliff:g id="HOST">%1$s</xliff:g> avec <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Accorder l\'accès"</string> <string name="whichEditApplication" msgid="144727838241402655">"Modifier avec"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Modifier avec %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Lancer le navigateur?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Prendre l\'appel?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Toujours"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Définir cette activité comme toujours ouverte"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Une seule fois"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Paramètres"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ne prend pas en charge le profil professionnel"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 5f98a8acd945..041668fdba58 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Déplacez le téléphone vers la gauche."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Déplacez le téléphone vers la droite."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Veuillez regarder plus directement l\'appareil."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Visage non détecté. Regardez le téléphone."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Placez votre visage en face du téléphone."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Trop de mouvement. Ne bougez pas le téléphone."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Veuillez enregistrer à nouveau votre visage."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Impossible de reconnaître le visage. Réessayez."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Ouvrir avec"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Ouvrir avec %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Ouvrir"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Ouvrir les liens <xliff:g id="HOST">%1$s</xliff:g> avec"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Ouvrir les liens avec"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Ouvrir les liens avec <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Ouvrir les liens <xliff:g id="HOST">%1$s</xliff:g> avec <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Accorder l\'accès"</string> <string name="whichEditApplication" msgid="144727838241402655">"Modifier avec"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Modifier avec %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Lancer le navigateur ?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Prendre l\'appel ?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Toujours"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Définir cette activité comme toujours ouverte"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Une seule fois"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Paramètres"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s n\'est pas compatible avec le profil professionnel."</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index 740f699ec9c4..18bba90202ca 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Move o teléfono cara á esquerda."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Move o teléfono cara á dereita."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Mira o dispositivo de forma máis directa."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Non se ve a túa cara. Mira para o teléfono"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Coloca a cara directamente diante do teléfono."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Demasiado movemento. Non movas o teléfono."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Volve rexistrar a túa cara."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Xa non se pode recoñecer a cara. Téntao de novo."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Abrir con"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Abrir con %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Abrir"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Abrir ligazóns de <xliff:g id="HOST">%1$s</xliff:g> con"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Abrir ligazóns con"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Abrir ligazóns con <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Abrir ligazóns de <xliff:g id="HOST">%1$s</xliff:g> con <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Conceder acceso"</string> <string name="whichEditApplication" msgid="144727838241402655">"Editar con"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Editar con %1$s"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Iniciar o navegador?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Aceptar chamada?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Definir como abrir sempre"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Só unha vez"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Configuración"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s non admite o perfil de traballo"</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index ddc4aaeec355..1b961727da84 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"ફોનને ડાબી બાજુ ખસેડો."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"ફોનને જમણી બાજુ ખસેડો."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"કૃપા કરીને તમારા ડિવાઇસ તરફ સીધું જુઓ."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"તમારો ચહેરો દેખાતો નથી. ફોનની સામે જુઓ."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"તમારો ચહેરો તમારા ફોનની બિલકુલ સામે રાખો."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"ડિવાઇસ અસ્થિર છે. ફોનને સ્થિર રાખો."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"કૃપા કરીને તમારા ચહેરાની ફરી નોંધણી કરાવો."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"ચહેરો ઓળખી શકાતો નથી. ફરી પ્રયાસ કરો."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"આની સાથે ખોલો"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s સાથે ખોલો"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"ખોલો"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"આના વડે <xliff:g id="HOST">%1$s</xliff:g> લિંક ખોલો"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"આના વડે લિંક ખોલો"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g> વડે લિંક ખોલો"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="APPLICATION">%2$s</xliff:g> વડે <xliff:g id="HOST">%1$s</xliff:g> લિંક ખોલો"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"ઍક્સેસ આપો"</string> <string name="whichEditApplication" msgid="144727838241402655">"આનાથી સંપાદિત કરો"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s સાથે સંપાદિત કરો"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"બ્રાઉઝર લોન્ચ કરીએ?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"કૉલ સ્વીકારીએ?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"હંમેશા"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"હંમેશાં ખુલ્લી તરીકે સેટ કરો"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"ફક્ત એક વાર"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"સેટિંગ"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s કાર્ય પ્રોફાઇલનું સમર્થન કરતું નથી"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 0a1051bb6fc9..9f0df13d8ef0 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"फ़ोन को बाईं ओर घुमाएं."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"फ़ोन को दाईं ओर घुमाएं."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"कृपया अपने डिवाइस की तरफ़ सीधे देखें."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"आपका चेहरा नहीं दिखाई दे रहा. फ़ोन की तरफ़ देखें."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"अपने चेहरे को फोन के ठीक सामने लाएं."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"डिवाइस बहुत ज़्यादा हिल रहा है. फ़ोन को बिना हिलाएं पकड़ें."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"कृपया फिर से अपने चेहरे की पहचान कराएं."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"अब चेहरे की पहचान नहीं कर पा रहा. फिर से कोशिश करें."</string> @@ -784,7 +784,7 @@ <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"हमसफ़र"</string> <string name="relationTypeFather" msgid="5228034687082050725">"पिता"</string> <string name="relationTypeFriend" msgid="7313106762483391262">"दोस्त"</string> - <string name="relationTypeManager" msgid="6365677861610137895">"प्रबंधक"</string> + <string name="relationTypeManager" msgid="6365677861610137895">"मैनेजर"</string> <string name="relationTypeMother" msgid="4578571352962758304">"मां"</string> <string name="relationTypeParent" msgid="4755635567562925226">"अभिभावक"</string> <string name="relationTypePartner" msgid="7266490285120262781">"सहयोगी"</string> @@ -904,7 +904,7 @@ <string name="granularity_label_line" msgid="5764267235026120888">"पंक्ति"</string> <string name="factorytest_failed" msgid="5410270329114212041">"फ़ैक्ट्री परीक्षण विफल"</string> <string name="factorytest_not_system" msgid="4435201656767276723">"FACTORY_TEST का काम केवल /system/app में इंस्टॉल किए गए पैकेज के लिए ही हो सकता है."</string> - <string name="factorytest_no_action" msgid="872991874799998561">"ऐसा कोई पैकेज नहीं मिला था जो FACTORY_TEST कार्रवाई प्रदान करता हो."</string> + <string name="factorytest_no_action" msgid="872991874799998561">"ऐसा कोई पैकेज नहीं मिला था जो FACTORY_TEST कार्रवाई मुहैया करवाता हो."</string> <string name="factorytest_reboot" msgid="6320168203050791643">"रीबूट करें"</string> <string name="js_dialog_title" msgid="1987483977834603872">"\'<xliff:g id="TITLE">%s</xliff:g>\' पर यह पेज दर्शाता है:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> @@ -1085,7 +1085,7 @@ <string name="undo" msgid="7905788502491742328">"वापस लाएं"</string> <string name="redo" msgid="7759464876566803888">"फिर से करें"</string> <string name="autofill" msgid="3035779615680565188">"ऑटोमैटिक भरना"</string> - <string name="textSelectionCABTitle" msgid="5236850394370820357">"लेख चयन"</string> + <string name="textSelectionCABTitle" msgid="5236850394370820357">"टेक्स्ट चुनें"</string> <string name="addToDictionary" msgid="4352161534510057874">"शब्दकोश में जोड़ें"</string> <string name="deleteText" msgid="6979668428458199034">"मिटाएं"</string> <string name="inputMethod" msgid="1653630062304567879">"इनपुट विधि"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"इसमें खोलें"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s में खोलें"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"खोलें"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"इसे इस्तेमाल करके <xliff:g id="HOST">%1$s</xliff:g> लिंक खोलें"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"इसे इस्तेमाल करके लिंक खोलें"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g> इस्तेमाल करके लिंक खोलें"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="APPLICATION">%2$s</xliff:g> इस्तेमाल करके <xliff:g id="HOST">%1$s</xliff:g> लिंक खोलें"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"एक्सेस दें"</string> <string name="whichEditApplication" msgid="144727838241402655">"इसके ज़रिये बदलाव करें"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s की मदद से बदलाव करें"</string> @@ -1288,7 +1284,7 @@ <item msgid="75483255295529161">"वाई-फ़ाई"</item> <item msgid="6862614801537202646">"ब्लूटूथ"</item> <item msgid="5447331121797802871">"ईथरनेट"</item> - <item msgid="8257233890381651999">"VPN"</item> + <item msgid="8257233890381651999">"वीपीएन"</item> </string-array> <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"अज्ञात नेटवर्क प्रकार"</string> <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"वाई-फ़ाई से कनेक्ट नहीं हो सका"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ब्राउज़र लॉन्च करें?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"कॉल स्वीकार करें?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"हमेशा"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"\'हमेशा खुला रखें\' पर सेट करें"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"केवल एक बार"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"सेटिंग"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s वर्क प्रोफ़ाइल का समर्थन नहीं करता"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index cc8eb49e0dee..21fdc2ff1072 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -571,7 +571,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Pomaknite telefon ulijevo."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Pomaknite telefon udesno."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Gledajte izravnije prema uređaju."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Vaše se lice ne vidi. Pogledajte telefon."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Postavite lice izravno ispred telefona."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Previše kretanja. Držite telefon mirno."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Ponovo registrirajte svoje lice."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Lice nije prepoznato. Pokušajte ponovo."</string> @@ -1151,14 +1151,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Otvaranje pomoću aplikacije"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Otvaranje pomoću aplikacije %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Otvori"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Otvaranje veza s <xliff:g id="HOST">%1$s</xliff:g> u aplikaciji"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Otvaranje veza u aplikaciji"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Otvaranje veza u aplikaciji <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Otvaranje veza s <xliff:g id="HOST">%1$s</xliff:g> u aplikaciji <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Omogući pristup"</string> <string name="whichEditApplication" msgid="144727838241402655">"Uređivanje pomoću aplikacije"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Uređivanje pomoću aplikacije %1$s"</string> @@ -1613,8 +1609,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Pokrenuti preglednik?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Prihvatiti poziv?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Uvijek"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Postavi to otvaranje kao zadano"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Samo jednom"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Postavke"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ne podržava radni profil"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 4ce7d4282893..1198610fe605 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Mozgassa a telefont balra."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Mozgassa a telefont jobbra."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Szemből nézzen az eszközre."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Nem látszik az arca. Nézzen a telefonra."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"A telefont közvetlenül az arca elé tegye."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Túl sok a mozgás. Tartsa stabilan a telefont."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Rögzítsen újra képet az arcáról."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Már nem lehet felismerni az arcát. Próbálja újra."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Megnyitás a következővel:"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Megnyitás a következővel: %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Megnyitás"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g>-linkek megnyitása a következővel:"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Linkek megnyitása a következővel:"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Linkek megnyitása a következővel: <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g>-linkek megnyitása a következővel: <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Engedély adása"</string> <string name="whichEditApplication" msgid="144727838241402655">"Szerkesztés a következővel:"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Szerkesztés a következővel: %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Böngésző indítása?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Fogadja a hívást?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Mindig"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Megnyitás mindig ezzel"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Csak egyszer"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Beállítások"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"A(z) %1$s nem támogatja a munkaprofilokat."</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index 2be6d6f32370..cb4886a6a408 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -104,7 +104,7 @@ <string name="serviceClassFAX" msgid="5566624998840486475">"Ֆաքս"</string> <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string> <string name="serviceClassDataAsync" msgid="4523454783498551468">"Չհամաժամեցված"</string> - <string name="serviceClassDataSync" msgid="7530000519646054776">"Համաժամել"</string> + <string name="serviceClassDataSync" msgid="7530000519646054776">"Համաժամացնել"</string> <string name="serviceClassPacket" msgid="6991006557993423453">"Փաթեթ"</string> <string name="serviceClassPAD" msgid="3235259085648271037">"Հարթակ"</string> <string name="roamingText0" msgid="7170335472198694945">"Ռոումինգի ցուցիչը միացված է"</string> @@ -169,8 +169,8 @@ <string name="httpErrorFileNotFound" msgid="6203856612042655084">"Չհաջողվեց գտնել հարցվող ֆայլը:"</string> <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Չափից շատ հարցումներ են մշակվում: Փորձեք կրկին ավելի ուշ:"</string> <string name="notification_title" msgid="8967710025036163822">"Մուտք գործելու սխալ` <xliff:g id="ACCOUNT">%1$s</xliff:g>-ի համար"</string> - <string name="contentServiceSync" msgid="8353523060269335667">"Համաժամեցնել"</string> - <string name="contentServiceSyncNotificationTitle" msgid="7036196943673524858">"Չի հաջողվում համաժամեցնել"</string> + <string name="contentServiceSync" msgid="8353523060269335667">"Համաժամացնել"</string> + <string name="contentServiceSyncNotificationTitle" msgid="7036196943673524858">"Չի հաջողվում համաժամացնել"</string> <string name="contentServiceTooManyDeletesNotificationDesc" msgid="4884451152168188763">"Հետևյալ ծառայությունից չափազանց շատ տարրեր եք ջնջել՝ <xliff:g id="CONTENT_TYPE">%s</xliff:g>:"</string> <string name="low_memory" product="tablet" msgid="6494019234102154896">"Պլանշետի պահոցը լիքն է: Ջնջեք մի քանի ֆայլ` տարածք ազատելու համար:"</string> <string name="low_memory" product="watch" msgid="4415914910770005166">"Ժամացույցի ֆայլերի պահեստը լիքն է: Ջնջեք որոշ ֆայլեր՝ տարածք ազատելու համար:"</string> @@ -346,7 +346,7 @@ <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"կարդալ բջջային զեկուցվող հաղորդագրությունները"</string> <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Թույլ է տալիս հավելվածին կարդալ ձեր սարքի կողմից ստացված բջջային հեռարձակվող հաղորդագրությունները: Բջջային հեռարձակվող զգուշացումները ուղարկվում են որոշ վայրերում` արտակարգ իրավիճակների մասին ձեզ զգուշացնելու համար: Վնասարար հավելվածները կարող են խանգարել ձեր սարքի արդյունավետությանը կամ շահագործմանը, երբ ստացվում է արտակարգ իրավիճակի մասին բջջային հաղորդում:"</string> <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"կարդալ բաժանորդագրված հոսքերը"</string> - <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Թույլ է տալիս հավելվածին մանրամասներ ստանալ ընթացիկ համաժամեցված հոսքերի մասին:"</string> + <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Թույլ է տալիս հավելվածին մանրամասներ ստանալ ընթացիկ համաժամացված հոսքերի մասին:"</string> <string name="permlab_sendSms" msgid="7544599214260982981">"SMS հաղորդագրությունների ուղարկում և ընթերցում"</string> <string name="permdesc_sendSms" msgid="7094729298204937667">"Թույլ է տալիս հավելվածին ուղարկել SMS հաղորդագրություններ: Այն կարող է անսպասելի ծախսերի պատճառ դառնալ: Վնասարար հավելվածները կարող են ձեր հաշվից գումար ծախսել` ուղարկելով հաղորդագրություններ` առանց ձեր հաստատման:"</string> <string name="permlab_readSms" msgid="8745086572213270480">"կարդալ ձեր տեքստային հաղորդագրությունները (SMS կամ MMS)"</string> @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Տեղափոխեք հեռախոսը ձախ:"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Տեղափոխեք հեռախոսը աջ:"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Նայեք ուղիղ էկրանին։"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Ձեր դեմքը չի երևում։ Նայեք հեռախոսին։"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Պահեք ձեր դեմքն անմիջապես հեռախոսի էկրանի դիմաց:"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Շատ եք շարժում։ Հեռախոսն անշարժ պահեք։"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Նորից փորձեք։"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Չհաջողվեց ճանաչել դեմքը։ Նորից փորձեք:"</string> @@ -594,12 +594,12 @@ <string-array name="face_error_vendor"> </string-array> <string name="face_icon_content_description" msgid="4024817159806482191">"Դեմքի պատկերակ"</string> - <string name="permlab_readSyncSettings" msgid="6201810008230503052">"կարդալ համաժամեցման կարգավորումները"</string> - <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Թույլ է տալիս հավելվածին կարդալ համաժամեցման կարգավորումները հաշվի համար: Օրինակ` այն կարող է որոշել, արդյոք Մարդիկ հավելվածը համաժամեցված է հաշվի հետ:"</string> - <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"համաժամեցումը փոխարկել միացվածի և անջատվածի"</string> - <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Թույլ է տալիս հավելվածին փոփոխել համաժամեցման կարգավորումները հաշվի համար: Օրինակ, այն կարող է օգտագործվել` միացնելու Մարդիկ հավելվածի համաժամեցումը հաշվի հետ:"</string> - <string name="permlab_readSyncStats" msgid="7396577451360202448">"կարդալ համաժամեցման վիճակագրությունը"</string> - <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Թույլ է տալիս հավելվածին կարդալ հաշվի համաժամեցման վիճակագրությունը, այդ թվում` համաժամեցման իրադարձությունների պատմությունը և թե որքան տվյալ է համաժամեցված:"</string> + <string name="permlab_readSyncSettings" msgid="6201810008230503052">"կարդալ համաժամացման կարգավորումները"</string> + <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Թույլ է տալիս հավելվածին կարդալ համաժամացման կարգավորումները հաշվի համար: Օրինակ` այն կարող է որոշել, արդյոք Մարդիկ հավելվածը համաժամացված է հաշվի հետ:"</string> + <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"համաժամացումը փոխարկել միացվածի և անջատվածի"</string> + <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Թույլ է տալիս հավելվածին փոփոխել համաժամացման կարգավորումները հաշվի համար: Օրինակ, այն կարող է օգտագործվել` միացնելու Մարդիկ հավելվածի համաժամացումը հաշվի հետ:"</string> + <string name="permlab_readSyncStats" msgid="7396577451360202448">"կարդալ համաժամացման վիճակագրությունը"</string> + <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Թույլ է տալիս հավելվածին կարդալ հաշվի համաժամացման վիճակագրությունը, այդ թվում` համաժամացման իրադարձությունների պատմությունը և թե որքան տվյալ է համաժամացված:"</string> <string name="permlab_sdcardRead" msgid="1438933556581438863">"կարդալ ձեր ընդհանուր հիշողության պարունակությունը"</string> <string name="permdesc_sdcardRead" msgid="1804941689051236391">"Հավելվածին թույլ է տալիս կարդալ ձեր ընդհանուր հիշողության պարունակությունը:"</string> <string name="permlab_sdcardWrite" msgid="9220937740184960897">"փոփոխել կամ ջնջել ձեր ընդհանուր հիշողության բովանդակությունը"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Բացել հետևյալ ծրագրով՝"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Բացել հավելվածով՝ %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Բացել"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> տեսակի հղումները բացել…"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Հղումները բացել…"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Հղումները բացել <xliff:g id="APPLICATION">%1$s</xliff:g> դիտարկիչում"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> տեսակի հղումները բացել <xliff:g id="APPLICATION">%2$s</xliff:g> դիտարկիչում"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Թույլատրել"</string> <string name="whichEditApplication" msgid="144727838241402655">"Խմբագրել հետևյալ ծրագրով՝"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Խմբագրել հետևյալով՝ %1$s"</string> @@ -1156,7 +1152,7 @@ <string name="whichImageCaptureApplicationNamed" msgid="8619384150737825003">"Լուսանկարել %1$s հավելվածի օգնությամբ"</string> <string name="whichImageCaptureApplicationLabel" msgid="6390303445371527066">"Լուսանկարել"</string> <string name="alwaysUse" msgid="4583018368000610438">"Օգտագործել ըստ կանխադրման այս գործողության համար:"</string> - <string name="use_a_different_app" msgid="8134926230585710243">"Օգտագործել այլ հավելված"</string> + <string name="use_a_different_app" msgid="8134926230585710243">"Ուրիշ հավելված"</string> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Մաքրել լռելյայնը Համակարգի կարգավորումներ > Ծրագրեր >Ներբեռնված էջից:"</string> <string name="chooseActivity" msgid="7486876147751803333">"Ընտրել գործողություն"</string> <string name="chooseUsbActivity" msgid="6894748416073583509">"Ընտրեք հավելված USB սարքի համար"</string> @@ -1457,7 +1453,7 @@ <string name="forward_intent_to_owner" msgid="1207197447013960896">"Դուք օգտագործում եք այս հավելվածը ձեր աշխատանքային պրոֆիլից դուրս"</string> <string name="forward_intent_to_work" msgid="621480743856004612">"Դուք օգտագործում եք այս հավելվածը ձեր աշխատանքային պրոֆիլում"</string> <string name="input_method_binding_label" msgid="1283557179944992649">"Ներածման եղանակը"</string> - <string name="sync_binding_label" msgid="3687969138375092423">"Համաժամել"</string> + <string name="sync_binding_label" msgid="3687969138375092423">"Համաժամացնել"</string> <string name="accessibility_binding_label" msgid="4148120742096474641">"Մատչելիությունը"</string> <string name="wallpaper_binding_label" msgid="1240087844304687662">"Պաստառ"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Փոխել պաստառը"</string> @@ -1590,9 +1586,8 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Գործարկե՞լ զննարկիչը:"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Ընդունե՞լ զանգը:"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Միշտ"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> - <string name="activity_resolver_use_once" msgid="2404644797149173758">"Միայն մեկ անգամ"</string> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Միշտ բացել"</string> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Միայն այս անգամ"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Կարգավորումներ"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s-ը չի աջակցում աշխատանքային պրոֆիլներ"</string> <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"Գրասալիկ"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index e71ab41f378d..ca369ebf8b40 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Gerakkan ponsel ke kiri."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Gerakkan ponsel ke kanan."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Lihat langsung ke perangkat."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Tidak dapat melihat wajah Anda. Lihat ke ponsel."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Posisikan wajah Anda langsung di depan ponsel."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Terlalu banyak gerakan. Stabilkan ponsel."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Daftarkan ulang wajah Anda."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Tidak lagi dapat mengenali wajah. Coba lagi."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Buka dengan"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Buka dengan %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Buka"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Buka link <xliff:g id="HOST">%1$s</xliff:g> dengan"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Buka link dengan"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Buka link dengan <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Buka link <xliff:g id="HOST">%1$s</xliff:g> dengan <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Berikan akses"</string> <string name="whichEditApplication" msgid="144727838241402655">"Edit dengan"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Edit dengan %1$s"</string> @@ -1383,7 +1379,7 @@ <string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"Tampilkan di atas apl lain"</string> <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> ditampilkan di atas aplikasi lain"</string> <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> ditampilkan di atas aplikasi lain"</string> - <string name="alert_windows_notification_message" msgid="8917232109522912560">"Jika Anda tidak ingin <xliff:g id="NAME">%s</xliff:g> menggunakan fitur ini, tap untuk membuka setelan dan menonaktifkannya."</string> + <string name="alert_windows_notification_message" msgid="8917232109522912560">"Jika Anda tidak ingin <xliff:g id="NAME">%s</xliff:g> menggunakan fitur ini, ketuk untuk membuka setelan dan menonaktifkannya."</string> <string name="alert_windows_notification_turn_off_action" msgid="2902891971380544651">"Nonaktifkan"</string> <string name="ext_media_checking_notification_title" msgid="4411133692439308924">"Memeriksa <xliff:g id="NAME">%s</xliff:g>…"</string> <string name="ext_media_checking_notification_message" msgid="410185170877285434">"Meninjau konten saat ini"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Luncurkan Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Terima panggilan?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Selalu"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Setel untuk selalu membuka"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Hanya sekali"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Setelan"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s tidak mendukung profil kerja"</string> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index 3d2acd9c7d24..572313aa0ed6 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Færðu símann til vinstri."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Færðu símann til hægri."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Horfðu beint á tækið."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Sé ekki andlit þitt. Horfðu á símann."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Hafðu andlitið beint fyrir framan símann."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Of mikil hreyfing. Haltu símanum stöðugum."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Skráðu nafnið þitt aftur."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Andlit þekkist ekki lengur. Reyndu aftur."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Opna með"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Opna með %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Opna"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Opna <xliff:g id="HOST">%1$s</xliff:g> tengla með"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Opna tengla með"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Opna tengla með <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Opna <xliff:g id="HOST">%1$s</xliff:g> tengla með <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Veita aðgang"</string> <string name="whichEditApplication" msgid="144727838241402655">"Breyta með"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Breyta með %1$s"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Opna vafra?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Samþykkja símtal?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Alltaf"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Stilla á „Alltaf opið“"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Bara einu sinni"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Stillingar"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s styður ekki vinnusnið"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 6d1d132f2ea6..6c579b85600f 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -325,7 +325,7 @@ <string name="capability_desc_canPerformGestures" msgid="8296373021636981249">"Consente di toccare, far scorrere, pizzicare ed eseguire altri gesti."</string> <string name="capability_title_canCaptureFingerprintGestures" msgid="6309568287512278670">"Gesti con sensore di impronte digitali"</string> <string name="capability_desc_canCaptureFingerprintGestures" msgid="4386487962402228670">"È in grado di rilevare i gesti compiuti con il sensore di impronte digitali dei dispositivi."</string> - <string name="permlab_statusBar" msgid="7417192629601890791">"disattivare o modificare la barra di stato"</string> + <string name="permlab_statusBar" msgid="7417192629601890791">"disattivazione o modifica della barra di stato"</string> <string name="permdesc_statusBar" msgid="8434669549504290975">"Consente all\'applicazione di disattivare la barra di stato o di aggiungere e rimuovere icone di sistema."</string> <string name="permlab_statusBarService" msgid="4826835508226139688">"ruolo di barra di stato"</string> <string name="permdesc_statusBarService" msgid="716113660795976060">"Consente di visualizzare l\'applicazione nella barra di stato."</string> @@ -337,7 +337,7 @@ <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Consente all\'applicazione di rimuovere le scorciatoie della schermata Home automaticamente."</string> <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"reindirizzamento chiamate in uscita"</string> <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Consente all\'app di rilevare il numero digitato durante una chiamata in uscita, con la possibilità di reindirizzare la telefonata a un numero diverso o interromperla del tutto."</string> - <string name="permlab_answerPhoneCalls" msgid="4077162841226223337">"rispondi a telefonate in arrivo"</string> + <string name="permlab_answerPhoneCalls" msgid="4077162841226223337">"risposta a telefonate in arrivo"</string> <string name="permdesc_answerPhoneCalls" msgid="2901889867993572266">"Consente all\'app di rispondere a una telefonata in arrivo."</string> <string name="permlab_receiveSms" msgid="8673471768947895082">"ricezione messaggi di testo (SMS)"</string> <string name="permdesc_receiveSms" msgid="6424387754228766939">"Consente all\'applicazione di ricevere ed elaborare messaggi SMS. Significa che l\'applicazione potrebbe monitorare o eliminare i messaggi inviati al tuo dispositivo senza mostrarteli."</string> @@ -347,7 +347,7 @@ <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Consente all\'applicazione di leggere i messaggi cell broadcast ricevuti dal dispositivo. Gli avvisi cell broadcast vengono trasmessi in alcune località per avvertire di eventuali situazioni di emergenza. Le applicazioni dannose potrebbero interferire con il rendimento o con il funzionamento del dispositivo quando si riceve un messaggio cell broadcast di emergenza."</string> <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"lettura feed sottoscritti"</string> <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Consente all\'applicazione di ottenere dettagli sui feed attualmente sincronizzati."</string> - <string name="permlab_sendSms" msgid="7544599214260982981">"inviare e visualizzare SMS"</string> + <string name="permlab_sendSms" msgid="7544599214260982981">"invio e visualizzazione di SMS"</string> <string name="permdesc_sendSms" msgid="7094729298204937667">"Consente all\'applicazione di inviare messaggi SMS. Ciò potrebbe comportare costi imprevisti. Applicazioni dannose potrebbero generare dei costi inviando messaggi senza la tua conferma."</string> <string name="permlab_readSms" msgid="8745086572213270480">"lettura messaggi di testo personali (SMS o MMS)"</string> <string name="permdesc_readSms" product="tablet" msgid="4741697454888074891">"Questa app può leggere tutti i messaggi di testo (SMS) memorizzati sul tablet."</string> @@ -375,7 +375,7 @@ <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"Consente all\'applicazione di rendere persistenti in memoria alcune sue parti. Ciò può limitare la memoria disponibile per altre applicazioni, rallentando il tablet."</string> <string name="permdesc_persistentActivity" product="tv" msgid="5086862529499103587">"Consente all\'app di rendere alcune sue parti persistenti nella memoria. Potrebbe così essere limitata la memoria a disposizione di altre app ed essere rallentata la TV."</string> <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"Consente all\'applicazione di rendere persistenti in memoria alcune sue parti. Ciò può limitare la memoria disponibile per altre applicazioni, rallentando il telefono."</string> - <string name="permlab_foregroundService" msgid="3310786367649133115">"esegui servizio in primo piano"</string> + <string name="permlab_foregroundService" msgid="3310786367649133115">"esecuzione servizio in primo piano"</string> <string name="permdesc_foregroundService" msgid="6471634326171344622">"Consente all\'app di utilizzare i servizi in primo piano."</string> <string name="permlab_getPackageSize" msgid="7472921768357981986">"calcolo spazio di archiviazione applicazioni"</string> <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Consente all\'applicazione di recuperare il suo codice, i suoi dati e le dimensioni della cache"</string> @@ -405,7 +405,7 @@ <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Consente all\'applicazione di modificare il registro chiamate del telefono, inclusi i dati sulle chiamate in arrivo e in uscita. Le applicazioni dannose potrebbero farne uso per cancellare o modificare il registro chiamate."</string> <string name="permlab_bodySensors" msgid="4683341291818520277">"accesso ai sensori (come il cardiofrequenzimetro)"</string> <string name="permdesc_bodySensors" product="default" msgid="4380015021754180431">"Consente all\'app di accedere ai dati relativi ai sensori che monitorano le tue condizioni fisiche, ad esempio la frequenza cardiaca."</string> - <string name="permlab_readCalendar" msgid="6716116972752441641">"Leggi eventi di calendario e dettagli"</string> + <string name="permlab_readCalendar" msgid="6716116972752441641">"lettura di eventi di calendario e dettagli"</string> <string name="permdesc_readCalendar" product="tablet" msgid="4993979255403945892">"Questa app può leggere tutti gli eventi di calendario memorizzati sul tablet e condividere o salvare i dati di calendario."</string> <string name="permdesc_readCalendar" product="tv" msgid="8837931557573064315">"Questa app può leggere tutti gli eventi di calendario memorizzati sulla TV e condividere o salvare i dati di calendario."</string> <string name="permdesc_readCalendar" product="default" msgid="4373978642145196715">"Questa app può leggere tutti gli eventi di calendario memorizzati sul telefono e condividere o salvare i dati di calendario."</string> @@ -415,9 +415,9 @@ <string name="permdesc_writeCalendar" product="default" msgid="7592791790516943173">"Questa app può aggiungere, rimuovere o modificare eventi di calendario sul telefono. Può inviare messaggi che possono sembrare inviati dai proprietari del calendario o modificare eventi senza notificare i proprietari."</string> <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"accesso a comandi aggiuntivi provider di geolocalizz."</string> <string name="permdesc_accessLocationExtraCommands" msgid="6078307221056649927">"Consente all\'app di accedere a ulteriori comandi del fornitore di posizione. Ciò potrebbe consentire all\'app di interferire con il funzionamento del GPS o di altre fonti di geolocalizzazione."</string> - <string name="permlab_accessFineLocation" msgid="6265109654698562427">"Accesso alla posizione esatta solo in primo piano"</string> + <string name="permlab_accessFineLocation" msgid="6265109654698562427">"accesso alla posizione esatta solo in primo piano"</string> <string name="permdesc_accessFineLocation" msgid="3520508381065331098">"Questa app può recuperare la tua posizione esatta solo quando è in primo piano. Questi servizi di geolocalizzazione devono essere attivi e disponibili sul telefono affinché l\'app possa usarli. Potrebbe aumentare il consumo della batteria."</string> - <string name="permlab_accessCoarseLocation" msgid="3707180371693213469">"Accesso alla posizione approssimativa (in base alla rete) solo in primo piano"</string> + <string name="permlab_accessCoarseLocation" msgid="3707180371693213469">"accesso alla posizione approssimativa (in base alla rete) solo in primo piano"</string> <string name="permdesc_accessCoarseLocation" product="tablet" msgid="8594719010575779120">"Questa app può recuperare la tua posizione tramite fonti di rete quali ripetitori di telefonia mobile e reti Wi-Fi, ma soltanto quando l\'app è in primo piano. Questi servizi di geolocalizzazione devono essere attivi e disponibili sul tablet affinché l\'app possa usarli."</string> <string name="permdesc_accessCoarseLocation" product="tv" msgid="3027871910200890806">"Questa app può recuperare la tua posizione tramite fonti di rete quali ripetitori di telefonia mobile e reti Wi-Fi, ma soltanto quando l\'app è in primo piano. Questi servizi di geolocalizzazione devono essere attivi e disponibili sulla TV affinché l\'app possa usarli."</string> <string name="permdesc_accessCoarseLocation" product="default" msgid="854896049371048754">"Questa app può recuperare la tua posizione tramite fonti di rete quali ripetitori di telefonia mobile e reti Wi-Fi, ma soltanto quando l\'app è in primo piano. Questi servizi di geolocalizzazione devono essere attivi e disponibili sul telefono affinché l\'app possa usarli."</string> @@ -425,7 +425,7 @@ <string name="permdesc_accessBackgroundLocation" msgid="1096394429579210251">"Se concedi l\'autorizzazione insieme all\'accesso alla posizione precisa o approssimativa, l\'app potrà accedere alla posizione mentre viene eseguita in background."</string> <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"modifica impostazioni audio"</string> <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Consente all\'applicazione di modificare le impostazioni audio globali, come il volume e quale altoparlante viene utilizzato per l\'uscita."</string> - <string name="permlab_recordAudio" msgid="3876049771427466323">"registrare audio"</string> + <string name="permlab_recordAudio" msgid="3876049771427466323">"registrazione audio"</string> <string name="permdesc_recordAudio" msgid="4245930455135321433">"Questa app può registrare audio tramite il microfono in qualsiasi momento."</string> <string name="permlab_sim_communication" msgid="2935852302216852065">"invio di comandi alla SIM"</string> <string name="permdesc_sim_communication" msgid="5725159654279639498">"Consente all\'app di inviare comandi alla SIM. Questo è molto pericoloso."</string> @@ -437,7 +437,7 @@ <string name="permdesc_vibrate" msgid="6284989245902300945">"Consente all\'applicazione di controllare la vibrazione."</string> <string name="permlab_callPhone" msgid="3925836347681847954">"chiamata diretta n. telefono"</string> <string name="permdesc_callPhone" msgid="3740797576113760827">"Consente all\'applicazione di chiamare numeri di telefono senza il tuo intervento. Ciò può comportare chiamate o addebiti imprevisti. Tieni presente che ciò non consente all\'applicazione di chiamare numeri di emergenza. Applicazioni dannose potrebbero generare dei costi effettuando chiamate senza la tua conferma."</string> - <string name="permlab_accessImsCallService" msgid="3574943847181793918">"Accesso al servizio di chiamata IMS"</string> + <string name="permlab_accessImsCallService" msgid="3574943847181793918">"accesso al servizio di chiamata IMS"</string> <string name="permdesc_accessImsCallService" msgid="8992884015198298775">"Consente all\'app di utilizzare il servizio IMS per fare chiamate senza il tuo intervento."</string> <string name="permlab_readPhoneState" msgid="9178228524507610486">"lettura stato e identità telefono"</string> <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Consente all\'applicazione di accedere alle funzioni telefoniche del dispositivo. Questa autorizzazione consente all\'applicazione di determinare il numero di telefono e gli ID dei dispositivi, se una chiamata è attiva e il numero remoto connesso da una chiamata."</string> @@ -445,12 +445,12 @@ <string name="permdesc_manageOwnCalls" msgid="6552974537554717418">"Consente all\'app di indirizzare le proprie chiamate tramite il sistema al fine di migliorare l\'esperienza di chiamata."</string> <string name="permlab_callCompanionApp" msgid="3599252979411970473">"visualizzazione e controllo delle chiamate tramite il sistema."</string> <string name="permdesc_callCompanionApp" msgid="4567344683275099090">"Consente all\'app di visualizzare e controllare le chiamate in corso sul dispositivo. Sono incluse informazioni quali i numeri e lo stato relativi alle chiamate."</string> - <string name="permlab_acceptHandover" msgid="2661534649736022409">"Continuazione di una chiamata da un\'altra app"</string> + <string name="permlab_acceptHandover" msgid="2661534649736022409">"continuazione di una chiamata da un\'altra app"</string> <string name="permdesc_acceptHandovers" msgid="4570660484220539698">"Consente all\'app di continuare una chiamata che è stata iniziata in un\'altra app."</string> <string name="permlab_readPhoneNumbers" msgid="6108163940932852440">"lettura dei numeri di telefono"</string> <string name="permdesc_readPhoneNumbers" msgid="8559488833662272354">"Consente all\'app di accedere ai numeri di telefono del dispositivo."</string> <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"disattivazione stand-by del tablet"</string> - <string name="permlab_wakeLock" product="tv" msgid="2601193288949154131">"divieto di attivazione della modalità di sospensione della TV"</string> + <string name="permlab_wakeLock" product="tv" msgid="2601193288949154131">"disattivazione della modalità di sospensione della TV"</string> <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"disattivazione stand-by del telefono"</string> <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Consente all\'applicazione di impedire lo stand-by del tablet."</string> <string name="permdesc_wakeLock" product="tv" msgid="3208534859208996974">"Consente all\'app di impedire l\'attivazione della modalità di sospensione della TV."</string> @@ -483,7 +483,7 @@ <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Consente all\'applicazione di visualizzare informazioni sulle reti Wi-Fi, ad esempio di rilevare se il Wi-Fi è abilitato e il nome dei dispositivi Wi-Fi connessi."</string> <string name="permlab_changeWifiState" msgid="6550641188749128035">"connessione e disconnessione dal Wi-Fi"</string> <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Consente all\'applicazione di connettersi/disconnettersi da punti di accesso Wi-Fi e di apportare modifiche alla configurazione del dispositivo per le reti Wi-Fi."</string> - <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"consenti ricezione multicast Wi-Fi"</string> + <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"ricezione multicast Wi-Fi"</string> <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Consente all\'applicazione di ricevere pacchetti inviati a tutti i dispositivi su una rete Wi-Fi utilizzando indirizzi multicast, non solo il tuo tablet. Viene consumata più batteria rispetto alla modalità non multicast."</string> <string name="permdesc_changeWifiMulticastState" product="tv" msgid="9031975661145014160">"Consente all\'app di ricevere pacchetti inviati a tutti i dispositivi tramite una rete Wi-Fi utilizzando indirizzi multicast, non soltanto la TV. Questa modalità consuma più energia della modalità non multicast."</string> <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"Consente all\'applicazione di ricevere pacchetti inviati a tutti i dispositivi su una rete Wi-Fi utilizzando indirizzi multicast, non solo il tuo telefono. Viene consumata più batteria rispetto alla modalità non multicast."</string> @@ -505,21 +505,21 @@ <string name="permdesc_nfc" msgid="7120611819401789907">"Consente all\'applicazione di comunicare con tag, schede e lettori NFC (Near Field Communication)."</string> <string name="permlab_disableKeyguard" msgid="3598496301486439258">"disattivazione blocco schermo"</string> <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Consente all\'applicazione di disattivare il blocco tastiera ed eventuali protezioni tramite password associate. Ad esempio, il telefono disattiva il blocco tastiera quando riceve una telefonata in arrivo e lo riattiva al termine della chiamata."</string> - <string name="permlab_requestPasswordComplexity" msgid="202650535669249674">"richiedi complessità del blocco schermo"</string> + <string name="permlab_requestPasswordComplexity" msgid="202650535669249674">"richiesta di complessità del blocco schermo"</string> <string name="permdesc_requestPasswordComplexity" msgid="4730994229754212347">"Consente all\'app di conoscere il livello di complessità del blocco schermo (alto, medio, basso o nessuno), che indica l\'intervallo di caratteri possibile e il tipo di blocco schermo. L\'app può inoltre suggerire agli utenti di aggiornare il blocco schermo a un livello specifico di complessità, ma gli utenti possono ignorare liberamente il suggerimento e uscire. Tieni presente che il blocco schermo non viene memorizzato come testo non crittografato, quindi l\'app non conosce la password esatta."</string> - <string name="permlab_useBiometric" msgid="8837753668509919318">"Utilizzo di hardware biometrico"</string> + <string name="permlab_useBiometric" msgid="8837753668509919318">"utilizzo di hardware biometrico"</string> <string name="permdesc_useBiometric" msgid="8389855232721612926">"Consente all\'app di utilizzare hardware biometrico per eseguire l\'autenticazione"</string> - <string name="permlab_manageFingerprint" msgid="5640858826254575638">"gestisci hardware per il riconoscimento delle impronte digitali"</string> + <string name="permlab_manageFingerprint" msgid="5640858826254575638">"gestione di hardware per il riconoscimento delle impronte digitali"</string> <string name="permdesc_manageFingerprint" msgid="178208705828055464">"Consente all\'app di richiamare metodi per aggiungere e rimuovere modelli di impronte digitali da utilizzare."</string> <string name="permlab_useFingerprint" msgid="3150478619915124905">"utilizzo di hardware per il riconoscimento delle impronte digitali"</string> <string name="permdesc_useFingerprint" msgid="9165097460730684114">"Consente all\'app di utilizzare l\'hardware per il riconoscimento delle impronte digitali per eseguire l\'autenticazione"</string> - <string name="permlab_audioWrite" msgid="2661772059799779292">"Modifica della tua raccolta musicale"</string> + <string name="permlab_audioWrite" msgid="2661772059799779292">"modifica della tua raccolta musicale"</string> <string name="permdesc_audioWrite" msgid="8888544708166230494">"Consente all\'app di modificare la tua raccolta musicale."</string> - <string name="permlab_videoWrite" msgid="128769316366746446">"Modifica della tua raccolta di video"</string> + <string name="permlab_videoWrite" msgid="128769316366746446">"modifica della tua raccolta di video"</string> <string name="permdesc_videoWrite" msgid="5448565757490640841">"Consente all\'app di modificare la tua raccolta di video."</string> - <string name="permlab_imagesWrite" msgid="3391306186247235510">"Modifica della tua raccolta di foto"</string> + <string name="permlab_imagesWrite" msgid="3391306186247235510">"modifica della tua raccolta di foto"</string> <string name="permdesc_imagesWrite" msgid="7073662756617474375">"Consente all\'app di modificare la tua raccolta di foto."</string> - <string name="permlab_mediaLocation" msgid="8675148183726247864">"Lettura delle posizioni dalla tua raccolta multimediale"</string> + <string name="permlab_mediaLocation" msgid="8675148183726247864">"lettura delle posizioni dalla tua raccolta multimediale"</string> <string name="permdesc_mediaLocation" msgid="2237023389178865130">"Consente all\'app di leggere le posizioni dalla tua raccolta multimediale."</string> <string name="biometric_dialog_default_title" msgid="881952973720613213">"Verifica la tua identità"</string> <string name="biometric_error_hw_unavailable" msgid="645781226537551036">"Hardware biometrico non disponibile"</string> @@ -551,9 +551,9 @@ <string-array name="fingerprint_error_vendor"> </string-array> <string name="fingerprint_icon_content_description" msgid="2340202869968465936">"Icona dell\'impronta digitale"</string> - <string name="permlab_manageFace" msgid="7262837876352591553">"gestisci l\'hardware per Sblocco col sorriso"</string> + <string name="permlab_manageFace" msgid="7262837876352591553">"gestione dell\'hardware per Sblocco col sorriso"</string> <string name="permdesc_manageFace" msgid="8919637120670185330">"Consente all\'app di richiamare i metodi per aggiungere e rimuovere i modelli di volti."</string> - <string name="permlab_useFaceAuthentication" msgid="2565716575739037572">"utilizza l\'hardware per Sblocco col sorriso"</string> + <string name="permlab_useFaceAuthentication" msgid="2565716575739037572">"utilizzo dell\'hardware per Sblocco col sorriso"</string> <string name="permdesc_useFaceAuthentication" msgid="4712947955047607722">"Consente all\'app di utilizzare hardware per l\'autenticazione con Sblocco col sorriso"</string> <string name="face_recalibrate_notification_name" msgid="1913676850645544352">"Sblocco col sorriso"</string> <string name="face_recalibrate_notification_title" msgid="4087620069451499365">"Registra di nuovo il volto"</string> @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Sposta il telefono verso sinistra."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Sposta il telefono verso destra."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Guarda più direttamente verso il dispositivo."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Impossibile vedere il volto. Guarda il telefono."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Posiziona il viso davanti al telefono."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Troppo movimento. Tieni fermo il telefono."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Ripeti l\'acquisizione del volto."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Non è più possibile riconoscere il volto. Riprova."</string> @@ -600,21 +600,21 @@ <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Consente a un\'applicazione di modificare le impostazioni di sincronizzazione per un account. Ad esempio, può servire per attivare la sincronizzazione dell\'applicazione Persone con un account."</string> <string name="permlab_readSyncStats" msgid="7396577451360202448">"lettura statistiche di sincronizz."</string> <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Consente a un\'applicazione di leggere le statistiche di sincronizzazione per un account, incluse la cronologia degli eventi di sincronizzazione e la quantità di dati sincronizzati."</string> - <string name="permlab_sdcardRead" msgid="1438933556581438863">"leggere i contenuti dell\'archivio condiviso"</string> + <string name="permlab_sdcardRead" msgid="1438933556581438863">"lettura dei contenuti dell\'archivio condiviso"</string> <string name="permdesc_sdcardRead" msgid="1804941689051236391">"Consente all\'app di leggere i contenuti del tuo archivio condiviso."</string> - <string name="permlab_sdcardWrite" msgid="9220937740184960897">"modificare/eliminare i contenuti dell\'archivio condiviso"</string> + <string name="permlab_sdcardWrite" msgid="9220937740184960897">"modifica/eliminazione dei contenuti dell\'archivio condiviso"</string> <string name="permdesc_sdcardWrite" msgid="2834431057338203959">"Consente all\'app di modificare i contenuti del tuo archivio condiviso."</string> - <string name="permlab_use_sip" msgid="2052499390128979920">"fare/ricevere chiamate SIP"</string> + <string name="permlab_use_sip" msgid="2052499390128979920">"invio/ricezione di chiamate SIP"</string> <string name="permdesc_use_sip" msgid="2297804849860225257">"Consente all\'app di effettuare e ricevere chiamate SIP."</string> <string name="permlab_register_sim_subscription" msgid="3166535485877549177">"registrazione di nuove connessioni SIM di telecomunicazione"</string> <string name="permdesc_register_sim_subscription" msgid="2138909035926222911">"Consente all\'app di registrare nuove connessioni SIM di telecomunicazione."</string> <string name="permlab_register_call_provider" msgid="108102120289029841">"registrazione di nuove connessioni di telecomunicazione"</string> <string name="permdesc_register_call_provider" msgid="7034310263521081388">"Consente all\'app di registrare nuove connessioni di telecomunicazione."</string> - <string name="permlab_connection_manager" msgid="1116193254522105375">"gestisci connessioni di telecomunicazione"</string> + <string name="permlab_connection_manager" msgid="1116193254522105375">"gestione di connessioni di telecomunicazione"</string> <string name="permdesc_connection_manager" msgid="5925480810356483565">"Consente all\'app di gestire connessioni di telecomunicazione."</string> <string name="permlab_bind_incall_service" msgid="6773648341975287125">"interazione con lo schermo durante una chiamata"</string> <string name="permdesc_bind_incall_service" msgid="8343471381323215005">"Consente all\'app di stabilire quando e come l\'utente vede lo schermo durante una chiamata."</string> - <string name="permlab_bind_connection_service" msgid="3557341439297014940">"interagire con i servizi di telefonia"</string> + <string name="permlab_bind_connection_service" msgid="3557341439297014940">"interazione con i servizi di telefonia"</string> <string name="permdesc_bind_connection_service" msgid="4008754499822478114">"Consente all\'app di interagire con i servizi di telefonia per effettuare/ricevere chiamate."</string> <string name="permlab_control_incall_experience" msgid="9061024437607777619">"offerta di un\'esperienza utente durante le chiamate"</string> <string name="permdesc_control_incall_experience" msgid="915159066039828124">"Consente all\'app di offrire un\'esperienza utente durante le chiamate."</string> @@ -630,7 +630,7 @@ <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Consente al titolare di vincolarsi all\'interfaccia di primo livello di un servizio listener di notifica. Non dovrebbe mai essere necessaria per le normali applicazioni."</string> <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"collegamento a un servizio provider di condizioni"</string> <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Consente al titolare di collegarsi all\'interfaccia di primo livello di un servizio provider di condizioni. Non dovrebbe essere mai necessaria per le normali app."</string> - <string name="permlab_bindDreamService" msgid="4153646965978563462">"associa a servizio dream"</string> + <string name="permlab_bindDreamService" msgid="4153646965978563462">"associazione a servizio dream"</string> <string name="permdesc_bindDreamService" msgid="7325825272223347863">"Consente all\'utente di associare l\'interfaccia di primo livello di un servizio dream. Questa impostazione non è mai necessaria per le app normali."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"richiamo dell\'app di configurazione operatore-provider"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Consente al titolare di richiamare l\'app di configurazione dell\'operatore-provider. Non dovrebbe essere mai necessaria per le normali applicazioni."</string> @@ -646,7 +646,7 @@ <string name="permdesc_removeDrmCertificates" msgid="7272999075113400993">"Consente a un\'applicazione di rimuovere certificati DRM. Non dovrebbe mai essere necessaria per le normali applicazioni."</string> <string name="permlab_bindCarrierMessagingService" msgid="1490229371796969158">"associazione a un servizio di messaggi dell\'operatore"</string> <string name="permdesc_bindCarrierMessagingService" msgid="2762882888502113944">"Consente l\'associazione di un servizio di messaggi dell\'operatore all\'interfaccia principale. Non dovrebbe mai essere necessaria per le normali applicazioni."</string> - <string name="permlab_bindCarrierServices" msgid="3233108656245526783">"Collegamento a servizi dell\'operatore"</string> + <string name="permlab_bindCarrierServices" msgid="3233108656245526783">"associazione a servizi dell\'operatore"</string> <string name="permdesc_bindCarrierServices" msgid="1391552602551084192">"Consente al titolare di collegarsi a servizi dell\'operatore. Non dovrebbe mai essere necessaria per le normali app."</string> <string name="permlab_access_notification_policy" msgid="4247510821662059671">"accesso alla funzione Non disturbare"</string> <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Consente all\'app di leggere e modificare la configurazione della funzione Non disturbare."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Apri con"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Apri con %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Apri"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Apri i link <xliff:g id="HOST">%1$s</xliff:g> con"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Apri i link con"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Apri i link con <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Apri i link <xliff:g id="HOST">%1$s</xliff:g> con <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Fornisci accesso"</string> <string name="whichEditApplication" msgid="144727838241402655">"Modifica con"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Modifica con %1$s"</string> @@ -1434,7 +1430,7 @@ <string name="permdesc_requestInstallPackages" msgid="5740101072486783082">"Consente a un\'applicazione di richiedere l\'installazione di pacchetti."</string> <string name="permlab_requestDeletePackages" msgid="1703686454657781242">"richiesta di eliminazione dei pacchetti"</string> <string name="permdesc_requestDeletePackages" msgid="3406172963097595270">"Consente a un\'applicazione di richiedere l\'eliminazione di pacchetti."</string> - <string name="permlab_requestIgnoreBatteryOptimizations" msgid="8021256345643918264">"chiedi di ignorare le ottimizzazioni della batteria"</string> + <string name="permlab_requestIgnoreBatteryOptimizations" msgid="8021256345643918264">"richiesta di ignorare le ottimizzazioni della batteria"</string> <string name="permdesc_requestIgnoreBatteryOptimizations" msgid="8359147856007447638">"Consente a un\'app di chiedere l\'autorizzazione a ignorare le ottimizzazioni della batteria per quell\'app."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"Tocca due volte per il comando dello zoom"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Aggiunta del widget non riuscita."</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Avviare l\'applicazione Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Accettare la chiamata?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Imposta per aprire sempre"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Solo una volta"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Impostazioni"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s non supporta il profilo di lavoro"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 8add3d75c638..437b31b652bb 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -574,7 +574,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"צריך להזיז את הטלפון שמאלה."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"צריך להזיז את הטלפון ימינה."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"יש להביט ישירות אל המכשיר."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"אי אפשר לראות את הפנים שלך. צריך להביט אל הטלפון."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"עליך למקם את הפנים ישירות מול הטלפון."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"יותר מדי תנועה. יש להחזיק את הטלפון בצורה יציבה."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"יש לרשום מחדש את הפנים."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"כבר לא ניתן לזהות פנים. יש לנסות שוב."</string> @@ -1171,14 +1171,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"פתח באמצעות"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"פתח באמצעות %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"פתח"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"פתיחת קישורים של <xliff:g id="HOST">%1$s</xliff:g> באמצעות"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"פתיחת קישורים באמצעות"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"פתיחת קישורים באמצעות <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"פתיחת קישורים של <xliff:g id="HOST">%1$s</xliff:g> באמצעות <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"הענקת גישה"</string> <string name="whichEditApplication" msgid="144727838241402655">"ערוך באמצעות"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"ערוך באמצעות %1$s"</string> @@ -1636,8 +1632,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"להפעיל את הדפדפן?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"האם לקבל את השיחה?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"תמיד"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"הגדרה כברירת מחדל לפתיחה"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"רק פעם אחת"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"הגדרות"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s אינו תומך בפרופיל עבודה"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 2d09d67df392..b558a318aa1e 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"スマートフォンを左に動かしてください。"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"スマートフォンを右に動かしてください。"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"もっとまっすぐデバイスに顔を向けてください。"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"顔を確認できません。スマートフォンを見てください。"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"顔をスマートフォンの真正面に向けてください。"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"あまり動かさないでください。安定させてください。"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"顔を登録し直してください。"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"顔を認識できなくなりました。もう一度お試しください。"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"アプリで開く"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$sで開く"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"開く"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> のリンクを開くブラウザ / アプリの選択"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"リンクを開くブラウザの選択"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g> でリンクを開く"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="APPLICATION">%2$s</xliff:g> で <xliff:g id="HOST">%1$s</xliff:g> のリンクを開く"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"アクセス権を付与"</string> <string name="whichEditApplication" msgid="144727838241402655">"編集に使用"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$sで編集"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ブラウザを起動しますか?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"通話を受けますか?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"常時"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"[常に開く] に設定"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"1回のみ"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"設定"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$sは仕事用プロファイルをサポートしていません"</string> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index f81067837733..3570d4ccecfd 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"გადაანაცვლეთ ტელეფონი მარცხნივ."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"გადაანაცვლეთ ტელეფონი მარჯვნივ."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"გთხოვთ, უფრო პირდაპირ შეხედოთ თქვენს მოწყობილობას."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"თქვენი სახე არ ჩანს. შეხედეთ ტელეფონს."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"დაიჭირეთ სახე უშუალოდ ტელეფონის წინ."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"მეტისმეტად მოძრაობთ. მყარად დაიჭირეთ ტელეფონი."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"გთხოვთ, ხელახლა დაარეგისტრიროთ თქვენი სახე."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"სახის ამოცნობა ვეღარ ხერხდება. ცადეთ ხელახლა."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"გახსნა აპით"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s-ით გახსნა"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"გახსნა"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> ბმულების გახსნა შემდეგით:"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"ბმულების გახსნა შემდეგით:"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"ბმულების გახსნა <xliff:g id="APPLICATION">%1$s</xliff:g>-ით"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> ბმულების <xliff:g id="APPLICATION">%2$s</xliff:g>-ით გახსნა"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"წვდომის მინიჭება"</string> <string name="whichEditApplication" msgid="144727838241402655">"რედაქტირება აპით:"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"რედაქტირება %1$s-ით"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"გსურთ ბრაუზერის გაშვება?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"უპასუხებთ ზარს?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"ყოველთვის"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"ყოველთვის გახსნის დაყენება"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"მხოლოდ ერთხელ"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"პარამეტრები"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s მხარს არ უჭერს სამუშაო პროფილს"</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index 3c429865e063..2ed1e5bf5541 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Телефонды солға жылжытыңыз."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Телефонды оңға жылжытыңыз."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Құрылғының камерасына тура қараңыз."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Бетіңіз көрінбейді. Телефонға қараңыз."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Бетіңізді телефонға тура қаратыңыз."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Қозғалыс тым көп. Телефонды қозғалтпаңыз."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Қайта тіркеліңіз."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Енді бет анықтау мүмкін емес. Әрекетті қайталаңыз."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Басқаша ашу"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s қолданбасымен ашу"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Ашу"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> сілтемелерін келесімен ашу:"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Сілтемелерді келесімен ашу:"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Сілтемелерді <xliff:g id="APPLICATION">%1$s</xliff:g> браузерімен ашу"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> сілтемелерін <xliff:g id="APPLICATION">%2$s</xliff:g> браузерімен ашу"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Рұқсат беру"</string> <string name="whichEditApplication" msgid="144727838241402655">"Келесімен өңдеу"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s көмегімен өңдеу"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Браузер қосылсын ба?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Қоңырауды қабылдау?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Үнемі"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Әрдайым ашық күйге орнату"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Бір рет қана"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Параметрлер"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s жұмыс профилін қолдамайды"</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index b088f4e811d6..02c6ba8cc233 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"ផ្លាស់ទីទូរសព្ទទៅខាងឆ្វេង។"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"ផ្លាស់ទីទូរសព្ទទៅខាងស្ដាំ។"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"សូមមើលឱ្យចំឧបករណ៍របស់អ្នកជាងមុន។"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"មើលមិនឃើញមុខរបស់អ្នកទេ។ សូមសម្លឹងមើលទូរសព្ទ។"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"បែរមុខរបស់អ្នកឱ្យចំពីមុខទូរសព្ទផ្ទាល់។"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"មានចលនាខ្លាំងពេក។ សូមកាន់ទូរសព្ទឱ្យនឹង។"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"សូមស្កេនបញ្ចូលមុខរបស់អ្នកម្ដងទៀត។"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"មិនអាចសម្គាល់មុខបានទៀតទេ។ សូមព្យាយាមម្ដងទៀត។"</string> @@ -1133,14 +1133,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"បើកជាមួយ"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"បើកជាមួយ %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"បើក"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"បើកតំណ <xliff:g id="HOST">%1$s</xliff:g> ជាមួយ"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"បើកតំណជាមួយ"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"បើកតំណជាមួយ <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"បើកតំណ <xliff:g id="HOST">%1$s</xliff:g> ជាមួយ <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"ផ្តល់សិទ្ធិចូលប្រើ"</string> <string name="whichEditApplication" msgid="144727838241402655">"កែសម្រួលជាមួយ"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"កែសម្រួលជាមួយ %1$s"</string> @@ -1592,8 +1588,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ចាប់ផ្ដើមកម្មវិធីអ៊ីនធឺណិត?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"ទទួលការហៅ?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"ជានិច្ច"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"កំណត់ឱ្យបើកជានិច្ច"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"តែម្ដង"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"ការកំណត់"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s មិនគាំទ្រប្រវត្តិរូបការងារ"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index 6da7eec48161..875ecd41eb4a 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"ಫೋನ್ ಅನ್ನು ಎಡಕ್ಕೆ ಸರಿಸಿ."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"ಫೋನ್ ಅನ್ನು ಬಲಕ್ಕೆ ಸರಿಸಿ."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಹೆಚ್ಚಿನದ್ದನ್ನು ನೇರವಾಗಿ ನೋಡಿ."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"ನಿಮ್ಮ ಮುಖ ಕಾಣಿಸುತ್ತಿಲ್ಲ. ಫೋನ್ ಕಡೆಗೆ ನೋಡಿ."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"ನಿಮ್ಮ ಮುಖವನ್ನು ಫೋನ್ಗೆ ನೇರವಾಗಿ ಇರಿಸಿ."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"ತುಂಬಾ ಅಲುಗಾಡುತ್ತಿದೆ ಫೋನ್ ಅನ್ನು ಸ್ಥಿರವಾಗಿ ಹಿಡಿಯಿರಿ."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"ನಿಮ್ಮ ಮುಖವನ್ನು ಮರುನೋಂದಣಿ ಮಾಡಿ."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"ಮುಖ ಗುರುತಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"ಇದರ ಮೂಲಕ ತೆರೆಯಿರಿ"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s ಜೊತೆಗೆ ತೆರೆಯಿರಿ"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"ತೆರೆ"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"ಇವುಗಳ ಮೂಲಕ <xliff:g id="HOST">%1$s</xliff:g> ಲಿಂಕ್ಗಳನ್ನು ತೆರೆಯಿರಿ"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"ಇವುಗಳ ಮೂಲಕ ಲಿಂಕ್ಗಳನ್ನು ತೆರೆಯಿರಿ"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g> ಮೂಲಕ ಲಿಂಕ್ಗಳನ್ನು ತೆರೆಯಿರಿ"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="APPLICATION">%2$s</xliff:g> ಮೂಲಕ <xliff:g id="HOST">%1$s</xliff:g> ಲಿಂಕ್ಗಳನ್ನು ತೆರೆಯಿರಿ"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"ಪ್ರವೇಶ ಅನುಮತಿಸಿ"</string> <string name="whichEditApplication" msgid="144727838241402655">"ಇವರ ಜೊತೆಗೆ ಎಡಿಟ್ ಮಾಡಿ"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s ಜೊತೆಗೆ ಎಡಿಟ್ ಮಾಡಿ"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ಬ್ರೌಸರ್ ಪ್ರಾರಂಭಿಸುವುದೇ?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"ಕರೆ ಸ್ವೀಕರಿಸುವುದೇ?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"ಯಾವಾಗಲೂ"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"ಯಾವಾಗಲೂ ತೆರೆಯುವುದಕ್ಕೆ ಹೊಂದಿಸಿ"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"ಒಮ್ಮೆ ಮಾತ್ರ"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 853ccff84648..90771451866a 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"휴대전화를 왼쪽으로 이동하세요."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"휴대전화를 오른쪽으로 이동하세요."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"기기에서 더 똑바로 바라보세요."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"얼굴이 보이지 않습니다. 휴대전화를 바라보세요."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"휴대전화가 얼굴 정면을 향하도록 두세요."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"너무 많이 움직였습니다. 휴대전화를 흔들리지 않게 잡으세요."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"얼굴을 다시 등록해 주세요."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"더 이상 얼굴을 인식할 수 없습니다. 다시 시도하세요."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"연결 프로그램"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s(으)로 열기"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"열기"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> 링크를 열 때 사용할 앱"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"링크를 열 때 사용할 앱"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g> 앱으로 링크 열기"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="APPLICATION">%2$s</xliff:g> 앱으로 <xliff:g id="HOST">%1$s</xliff:g> 링크 열기"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"권한 부여"</string> <string name="whichEditApplication" msgid="144727838241402655">"편집 프로그램:"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s(으)로 수정"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"브라우저를 실행하시겠습니까?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"통화를 수락하시겠습니까?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"항상"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"항상 열도록 설정"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"한 번만"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"설정"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s에서 직장 프로필을 지원하지 않습니다."</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index e5b11ba96753..8cac3638ae28 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Телефонду солго жылдырыңыз."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Телефонду оңго жылдырыңыз."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Түзмөгүңүзгө түз караңыз."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Жүзүңүз көрүнбөй жатат. Телефонду караңыз."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Телефонду жүзүңүздүн маңдайында кармаңыз."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Кыймылдап жибердиңиз. Телефонду түз кармаңыз."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Жүзүңүздү кайра таанытыңыз."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Жүз таанылган жок. Кайра аракет кылыңыз."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Төмөнкү менен ачуу"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s менен ачуу"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Ачуу"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> шилтемелерин төмөнкү колдонмодо ачуу:"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Шилтемелерди төмөнкү колдонмодо ачуу:"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Шилтемелерди <xliff:g id="APPLICATION">%1$s</xliff:g> колдонмосунда ачуу"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> шилтемелерин <xliff:g id="APPLICATION">%2$s</xliff:g> колдонмосунда ачуу"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Мүмкүнчүлүк берүү"</string> <string name="whichEditApplication" msgid="144727838241402655">"Төмөнкү менен түзөтүү"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s менен түзөтүү"</string> @@ -1592,8 +1588,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Серепчи иштетилсинби?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Чалуу кабыл алынсынбы?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Дайыма"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Ар дайым ачылсын деп жөндөө"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Бир жолу гана"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Жөндөөлөр"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s жумуш профилин колдоого албайт"</string> diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index 74b311a09432..47b0fe49796e 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"ຍ້າຍໂທລະສັບໄປທາງຊ້າຍ."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"ຍ້າຍໂທລະສັບໄປທາງຂວາ."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"ກະລຸນາເບິ່ງອຸປະກອນຂອງທ່ານໃຫ້ຊື່ໆ."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"ບໍ່ສາມາດເບິ່ງເຫັນໜ້າຂອງທ່ານໄດ້. ກະລຸນາເບິ່ງໂທລະສັບ."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"ຫັນໜ້າຂອງທ່ານໄປໃສ່ໜ້າໂທລະສັບໂດຍກົງ."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"ເຄື່ອນໄຫວຫຼາຍເກີນໄປ. ກະລຸນາຖືໂທລະສັບໄວ້ຊື່ໆ."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"ກະລຸນາລົງທະບຽນອຸປະກອນຂອງທ່ານອີກເທື່ອໜຶ່ງ."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"ບໍ່ສາມາດຈຳແນກໃບໜ້າໄດ້ອີກຕໍ່ໄປ. ກະລຸນາລອງໃໝ່."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"ເປີດໂດຍໃຊ້"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"ເປີດໂດຍໃຊ້ %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"ເປີດ"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"ເປີດລິ້ງ <xliff:g id="HOST">%1$s</xliff:g> ໂດຍໃຊ້"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"ເປີດລິ້ງໂດຍໃຊ້"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"ເປີດລິ້ງໂດຍໃຊ້ <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"ເປີດລິ້ງ <xliff:g id="HOST">%1$s</xliff:g> ໂດຍໃຊ້ <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"ໃຫ້ສິດອະນຸຍາດ"</string> <string name="whichEditApplication" msgid="144727838241402655">"ແກ້ໄຂໃນ"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"ແກ້ໄຂໃນ %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ເປີດໂປຣແກຣມທ່ອງເວັບ?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"ຮັບການໂທບໍ່?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"ທຸກຄັ້ງ"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"ຕັ້ງໃຫ້ເປັນເປີດທຸກເທື່ອ"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"ຄັ້ງດຽວ"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"ການຕັ້ງຄ່າ"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ບໍ່ຮອງຮັບໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານ"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index 191108a0b73b..6f8e2df08241 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -574,7 +574,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Pasukite telefoną kairėn."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Pasukite telefoną dešinėn."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Žiūrėkite tiesiai į įrenginį."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Nematau jūsų veido. Žiūrėkite į telefoną."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Veidas turi būti prieš telefoną."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Įrenginys per daug judinamas. Nejudink. telefono."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Užregistruokite veidą iš naujo."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Nebegalima atpažinti veido. Bandykite dar kartą."</string> @@ -1171,14 +1171,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Atidaryti naudojant"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Atidaryti naudojant %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Atidaryti"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Atidaryti <xliff:g id="HOST">%1$s</xliff:g> nuorodas naudojant"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Atidaryti nuorodas naudojant"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Atidaryti nuorodas naudojant „<xliff:g id="APPLICATION">%1$s</xliff:g>“"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Atidaryti <xliff:g id="HOST">%1$s</xliff:g> nuorodas naudojant „<xliff:g id="APPLICATION">%2$s</xliff:g>“"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Suteikti prieigą"</string> <string name="whichEditApplication" msgid="144727838241402655">"Redaguoti naudojant"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Redaguoti naudojant %1$s"</string> @@ -1636,8 +1632,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Paleisti naršyklę?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Priimti skambutį?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Visada"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Nustatyti parinktį „Visada atidaryti“"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Tik kartą"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Nustatymai"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s nepalaiko darbo profilio"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 94f14891eec7..253ff722ffda 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -571,7 +571,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Pārvietojiet tālruni pa kreisi."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Pārvietojiet tālruni pa labi."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Lūdzu, tiešāk skatieties uz savu ierīci."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Jūsu seja nav redzama. Paskatieties uz tālruni."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Novietojiet savu seju tieši pretī tālrunim."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Pārāk daudz kustību. Nekustīgi turiet tālruni."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Lūdzu, atkārtoti reģistrējiet savu seju."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Seju vairs nevar atpazīt. Mēģiniet vēlreiz."</string> @@ -1151,14 +1151,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Atvērt, izmantojot"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Atvērt, izmantojot %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Atvērt"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> saišu atvēršana, izmantojot:"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Saišu atvēršana, izmantojot:"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Saišu atvēršana, izmantojot pārlūku <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> saišu atvēršana, izmantojot pārlūku <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Atļaut piekļuvi"</string> <string name="whichEditApplication" msgid="144727838241402655">"Rediģēt, izmantojot"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Rediģēt, izmantojot %1$s"</string> @@ -1613,8 +1609,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Vai palaist pārlūkprogrammu?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vai atbildēt uz zvanu?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Vienmēr"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Iestatīt uz “Vienmēr atvērt”"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Tikai vienreiz"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Iestatījumi"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"Programma %1$s neatbalsta darba profilus"</string> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index 71d695ab7f02..19c1c85c28d7 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Поместете го телефонот налево."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Поместете го телефонот надесно."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Погледнете подиректно во уредот."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Не ви се гледа ликот. Гледајте во телефонот."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Наместете го лицето директно пред телефонот."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Премногу движење. Држете го телефонот стабилно."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Повторно регистрирајте го лицето."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Ликот не се препознава. Обидете се повторно."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Отвори со"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Отвори со %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Отвори"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Отворајте врски на <xliff:g id="HOST">%1$s</xliff:g> со"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Отворајте врски со"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Отворајте врски со <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Отворајте врски на <xliff:g id="HOST">%1$s</xliff:g> со <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Дозволи пристап"</string> <string name="whichEditApplication" msgid="144727838241402655">"Измени со"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Измени со %1$s"</string> @@ -1593,8 +1589,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Стартувај прелистувач?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Прифати повик?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Секогаш"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Поставете на секогаш отворај"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Само еднаш"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Поставки"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s не поддржува работен профил"</string> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index b58f19502c91..b2e9b643366c 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"ഫോൺ ഇടത്തോട്ട് നീക്കുക."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"ഫോൺ വലത്തോട്ട് നീക്കുക."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"നിങ്ങളുടെ ഉപകരണത്തിന് നേരെ കൂടുതൽ നന്നായി നോക്കുക."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"നിങ്ങളുടെ മുഖം കാണാനാവുന്നില്ല. ഫോണിലേക്ക് നോക്കൂ."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"നിങ്ങളുടെ മുഖം ക്യാമറയ്ക്ക് നേരെയാക്കുക."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"വളരെയധികം ചലനം. ഫോൺ അനക്കാതെ നേരെ പിടിക്കുക."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"നിങ്ങളുടെ മുഖം വീണ്ടും എൻറോൾ ചെയ്യുക."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"ഇനി മുഖം തിരിച്ചറിയാനാവില്ല. വീണ്ടും ശ്രമിക്കൂ."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"ഇത് ഉപയോഗിച്ച് തുറക്കുക"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s ഉപയോഗിച്ച് തുറക്കുക"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"തുറക്കുക"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"ഇനിപ്പറയുന്നത് ഉപയോഗിച്ച് <xliff:g id="HOST">%1$s</xliff:g> ലിങ്കുകൾ തുറക്കുക"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"ഇനിപ്പറയുന്നത് ഉപയോഗിച്ച് ലിങ്കുകൾ തുറക്കുക"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g> ഉപയോഗിച്ച് ലിങ്കുകൾ തുറക്കുക"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> ലിങ്കുകൾ <xliff:g id="APPLICATION">%2$s</xliff:g> ഉപയോഗിച്ച് തുറക്കുക"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"ആക്സസ് നൽകുക"</string> <string name="whichEditApplication" msgid="144727838241402655">"ഇത് ഉപയോഗിച്ച് എഡിറ്റുചെയ്യുക"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s ഉപയോഗിച്ച് എഡിറ്റുചെയ്യുക"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ബ്രൗസർ സമാരംഭിക്കണോ?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"കോൾ സ്വീകരിക്കണോ?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"എല്ലായ്പ്പോഴും"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"\'എല്ലായ്പ്പോഴും തുറക്കുക\' എന്നതിലേക്കാക്കുക"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"ഒരിക്കൽ മാത്രം"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"ക്രമീകരണം"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s, ഔദ്യോഗിക പ്രൊഫൈലിനെ പിന്തുണയ്ക്കുന്നില്ല"</string> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index 9f1de468a100..a229713fd61e 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Утсаа зүүн тийш болгоно уу."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Утсаа баруун тийш болгоно уу."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Төхөөрөмж рүүгээ аль болох эгц харна уу."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Таны царайг харахгүй байна. Утас руу харна уу."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Царайгаа утасны урд эгц байрлуулна уу"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Хэт их хөдөлгөөнтэй байна. Утсаа хөдөлгөөнгүй барина уу."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Нүүрээ дахин бүртгүүлнэ үү."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Царайг таних боломжгүй боллоо. Дахин оролдоно уу."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Нээх"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s ашиглан нээх"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Нээх"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g>-н холбоосуудыг дараахаар нээх"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Холбоосуудыг дараахаар нээх"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Холбоосуудыг <xliff:g id="APPLICATION">%1$s</xliff:g>-р нээх"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g>-н холбоосуудыг <xliff:g id="APPLICATION">%2$s</xliff:g>-р нээх"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Хандалт өгөх"</string> <string name="whichEditApplication" msgid="144727838241402655">"Засварлах"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s ашиглан засварлах"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Хөтөч ажиллуулах уу?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Дуудлагыг зөвшөөрөх үү?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Байнга"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Тогтмол нээлттэй гэж тохируулах"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Нэг удаа"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Тохиргоо"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ажлын профайлыг дэмждэггүй"</string> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index f2111e7ebcda..a86caa5c0fc8 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"फोन डावीकडे हलवा."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"फोन उजवीकडे हलवा."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"कृपया तुमच्या डिव्हाइसकडे थेट पाहा"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"तुमचा चेहरा दिसत नाही. फोनकडे पहा."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"तुमचा चेहरा थेट फोन समोर आणा."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"खूप हलत आहे. फोन स्थिर धरून ठेवा."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"कृपया तुमच्या चेहऱ्याची पुन्हा नोंदणी करा."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"चेहरा ओळखू शकत नाही. पुन्हा प्रयत्न करा."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"यासह उघडा"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s सह उघडा"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"उघडा"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"वापरून <xliff:g id="HOST">%1$s</xliff:g> लिंक उघडा"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"वापरून लिंक उघडा"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g> वापरून लिंक उघडा"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="APPLICATION">%2$s</xliff:g> वापरून <xliff:g id="HOST">%1$s</xliff:g> लिंक उघडा"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"अॅक्सेस द्या"</string> <string name="whichEditApplication" msgid="144727838241402655">"सह संपादित करा"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s सह संपादित करा"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ब्राउझर लाँच करायचा?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"कॉल स्वीकारायचा?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"नेहमी"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"नेहमी उघडावर सेट करा"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"फक्त एकदाच"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"सेटिंग्ज"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s कार्य प्रोफाईलचे समर्थन करीत नाही"</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index 49a55782a3dd..c18e07879512 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Alihkan telefon ke kiri."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Alihkan telefon ke kanan."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Sila lihat terus pada peranti anda."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Gagal mengesan wajah anda. Lihat telefon."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Letakkan wajah anda betul-betul di depan telefon."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Terlalu bnyk gerakan. Pegang telefon dgn stabil."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Sila daftarkan semula wajah anda."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Tidak lagi dapat mengecam wajah. Cuba lagi."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Buka dengan"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Buka dengan %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Buka"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Buka pautan <xliff:g id="HOST">%1$s</xliff:g> dengan"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Buka pautan dengan"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Buka pautan dengan <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Buka pautan <xliff:g id="HOST">%1$s</xliff:g> dengan <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Berikan akses"</string> <string name="whichEditApplication" msgid="144727838241402655">"Edit dengan"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Edit dengan %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Lancarkan Penyemak Imbas?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Terima panggilan?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sentiasa"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Tetapkan agar sentiasa dibuka"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Hanya sekali"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Tetapan"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s tidak menyokong profil kerja"</string> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index bbe115feb5f9..55e7b015fe00 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"ဖုန်းကို ဘယ်ဘက်သို့ရွှေ့ပါ။"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"ဖုန်းကို ညာဘက်သို့ ရွှေ့ပါ။"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"သင့်စက်ပစ္စည်းကို တည့်တည့်ကြည့်ပါ။"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"သင့်မျက်နှာကို မမြင်ရပါ။ ဖုန်းကိုကြည့်ပါ။"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"မျက်နှာကို ဖုန်းရှေ့တွင် တည့်အောင်ထားပါ။"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"လှုပ်လွန်းသည်။ ဖုန်းကို ငြိမ်ငြိမ်ကိုင်ပါ။"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"သင့်မျက်နှာကို ပြန်စာရင်းသွင်းပါ။"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"မျက်နှာ မမှတ်သားနိုင်တော့ပါ။ ထပ်စမ်းကြည့်ပါ။"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"...ဖြင့် ဖွင့်မည်"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s ဖြင့် ဖွင့်မည်"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"ဖွင့်ပါ"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> လင့်ခ်များကို အောက်ပါဖြင့် ဖွင့်ရန်−"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"လင့်ခ်များကို အောက်ပါဖြင့် ဖွင့်ရန်−"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"လင့်ခ်ကို <xliff:g id="APPLICATION">%1$s</xliff:g> ဖြင့် ဖွင့်ရန်"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> လင့်ခ်များကို <xliff:g id="APPLICATION">%2$s</xliff:g> ဖြင့် ဖွင့်ရန်"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"ဖွင့်ခွင့်ပေးရန်"</string> <string name="whichEditApplication" msgid="144727838241402655">"...နှင့် တည်းဖြတ်ရန်"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s နှင့် တည်းဖြတ်ရန်"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ဘရောက်ဇာ ဖွင့်မည်လား။"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"ဖုန်းခေါ်ဆိုမှုကို လက်ခံမလား?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"အမြဲတမ်း"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"အမြဲဖွင့်မည်အဖြစ် သတ်မှတ်ရန်"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"တစ်ခါတည်း"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"ဆက်တင်များ"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s က အလုပ်ပရိုဖိုင်ကို မပံ့ပိုးပါ။"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 34275dff32e7..a5893892bc70 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Flytt telefonen til venstre."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Flytt telefonen til høyre."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Se mer direkte på enheten din."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Kan ikke se ansiktet ditt. Se på telefonen."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Hold ansiktet ditt rett foran telefonen."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"For mye bevegelse. Hold telefonen stødig."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Registrer ansiktet ditt på nytt."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Kan ikke gjenkjenne ansiktet lenger. Prøv igjen."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Åpne med"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Åpne med %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Åpne"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Åpne <xliff:g id="HOST">%1$s</xliff:g>-linker med"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Åpne linker med"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Åpne linker med <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Åpne <xliff:g id="HOST">%1$s</xliff:g>-linker med <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Gi tilgang"</string> <string name="whichEditApplication" msgid="144727838241402655">"Rediger med"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Rediger med %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Vil du starte nettleseren?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vil du besvare anropet?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Alltid"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Angi som alltid åpen"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Bare én gang"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Innstillinger"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s støtter ikke arbeidsprofiler"</string> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index 80bd83a6016b..89e75b4257ac 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"फोन बायाँतिर सार्नुहोस्।"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"फोन दायाँतिर सार्नुहोस्।"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"कृपया अझ सीधा गरी आफ्नो स्क्रिनमा हेर्नुहोस्।"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"तपाईंको अनुहार देखिएन। फोनमा हेर्नुहोस्।"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"आफ्नो अनुहार फोनको सीधा अगाडि पार्नुहोस्।"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"अत्यधिक हल्लियो। फोन स्थिर राख्नुहोस्।"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"कृपया आफ्नो अनुहार पुनः दर्ता गर्नुहोस्।"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"अब उप्रान्त अनुहार पहिचान गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string> @@ -1135,14 +1135,10 @@ <!-- no translation found for whichViewApplicationNamed (2286418824011249620) --> <skip /> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"खोल्नुहोस्"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"निम्नमार्फत <xliff:g id="HOST">%1$s</xliff:g> का लिंकहरू खोल्नुहोस्"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"निम्नमार्फत लिंकहरू खोल्नुहोस्"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g> मार्फत लिंकहरू खोल्नुहोस्"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="APPLICATION">%2$s</xliff:g> मार्फत <xliff:g id="HOST">%1$s</xliff:g> का लिंकहरू खोल्नुहोस्"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"पहुँच दिनुहोस्"</string> <string name="whichEditApplication" msgid="144727838241402655">"सँग सम्पादन गर्नुहोस्"</string> <!-- String.format failed for translation --> @@ -1596,8 +1592,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ब्राउजर सुरु गर्ने हो?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"कल स्वीकार गर्नुहुन्छ?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"सधैँ"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"सधैँ खुला राख्ने गरी सेट गर्नुहोस्"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"एक पटक मात्र"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"सेटिङहरू"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s कार्य प्रोफाइल समर्थन गर्दैन"</string> @@ -1975,7 +1970,7 @@ <string name="etws_primary_default_message_tsunami" msgid="1887685943498368548">"तटीय क्षेत्र र नदीछेउका ठाउँहरू छाडी उच्च सतहमा अवस्थित कुनै अझ सुरक्षित ठाउँमा जानुहोस्।"</string> <string name="etws_primary_default_message_earthquake_and_tsunami" msgid="998797956848445862">"शान्त रहनुहोस् र नजिकै आश्रयस्थल खोज्नुहोस्।"</string> <string name="etws_primary_default_message_test" msgid="2709597093560037455">"आपतकालीन सन्देशहरूको परीक्षण"</string> - <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"जवाफ दिनुहोस्"</string> + <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"जवाफ दिनु…"</string> <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string> <string name="mmcc_authentication_reject" msgid="5767701075994754356">"SIM मार्फत भ्वाइस कल गर्न मिल्दैन"</string> <string name="mmcc_imsi_unknown_in_hlr" msgid="5316658473301462825">"SIM मार्फत भ्वाइस कल गर्ने प्रावधान छैन"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 7c23e2c1131b..4194eb15b6af 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Beweeg je telefoon meer naar links."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Beweeg je telefoon meer naar rechts."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Kijk rechter naar je apparaat."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Je gezicht is niet te zien. Kijk naar de telefoon."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Houd je gezicht recht voor de telefoon."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Te veel beweging. Houd je telefoon stil."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Registreer je gezicht opnieuw."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Herkent gezicht niet meer. Probeer het nog eens."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Openen met"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Openen met %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Openen"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Links van <xliff:g id="HOST">%1$s</xliff:g> openen met"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Links openen met"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Links openen met <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Links van <xliff:g id="HOST">%1$s</xliff:g> openen met <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Toegang geven"</string> <string name="whichEditApplication" msgid="144727838241402655">"Bewerken met"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Bewerken met %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Browser starten?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Gesprek accepteren?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Altijd"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Instellen op altijd openen"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Één keer"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Instellingen"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ondersteunt werkprofielen niet"</string> diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index 257dd065fe3e..0f3472c10fb5 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"ବାମ ପଟକୁ ଫୋନ୍ ଘୁଞ୍ଚାନ୍ତୁ।"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"ଡାହାଣ ପଟକୁ ଫୋନ୍ ଘୁଞ୍ଚାନ୍ତୁ।"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"ଦୟାକରି ଆପଣଙ୍କ ଡିଭାଇସ୍କୁ ସିଧାସଳଖ ଦେଖନ୍ତୁ।"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"ଆପଣଙ୍କର ମୁହଁ ଦେଖି ପାରୁନାହିଁ। ଫୋନ୍କୁ ଦେଖନ୍ତୁ।"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"ଆପଣଙ୍କ ମୁହଁକୁ ଫୋନ୍ ସାମ୍ନାରେ ସିଧାସଳଖ ରଖନ୍ତୁ।"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"ଅତ୍ୟଧିକ ଅସ୍ଥିର। ଫୋନ୍କୁ ସ୍ଥିର ଭାବେ ଧରନ୍ତୁ।"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"ଦୟାକରି ଆପଣଙ୍କର ମୁହଁ ପୁଣି-ଏନ୍ରୋଲ୍ କରନ୍ତୁ।"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"ଆଉ ମୁହଁ ଚିହ୍ନଟ କରିହେଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"ସହିତ ଖୋଲନ୍ତୁ"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s ସହିତ ଖୋଲନ୍ତୁ"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"ଖୋଲନ୍ତୁ"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"ଏଥିରେ <xliff:g id="HOST">%1$s</xliff:g> ଲିଙ୍କ୍ଗୁଡ଼ିକ ଖୋଲନ୍ତୁ"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"ଏଥିରେ ଲିଙ୍କ୍ଗୁଡ଼ିକ ଖୋଲନ୍ତୁ"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g> ମାଧ୍ୟମରେ ଲିଙ୍କ୍ଗୁଡ଼ିକ ଖୋଲନ୍ତୁ"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="APPLICATION">%2$s</xliff:g> ମାଧ୍ୟମରେ <xliff:g id="HOST">%1$s</xliff:g> ଲିଙ୍କ୍ଗୁଡ଼ିକ ଖୋଲନ୍ତୁ"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"ଆକ୍ସେସ୍ ଦିଅନ୍ତୁ"</string> <string name="whichEditApplication" msgid="144727838241402655">"ସହିତ ଏଡିଟ୍ କରନ୍ତୁ"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$sରେ ସଂଶୋଧନ କରନ୍ତୁ"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ବ୍ରାଉଜର୍ ଲଞ୍ଚ କରିବେ?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"କଲ୍ ସ୍ୱୀକାର କରିବେ?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"ସର୍ବଦା"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"\'ସର୍ବଦା ଖୋଲା\' ଭାବରେ ସେଟ୍ କରନ୍ତୁ"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"ଥରେ ମାତ୍ର"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"ସେଟିଂସ୍"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ୱର୍କ ପ୍ରୋଫାଇଲ୍କୁ ସପୋର୍ଟ କରୁନାହିଁ"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 104fb40115f3..8245546a4436 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"ਫ਼ੋਨ ਨੂੰ ਖੱਬੇ ਪਾਸੇ ਲਿਜਾਓ।"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"ਫ਼ੋਨ ਨੂੰ ਸੱਜੇ ਪਾਸੇ ਲਿਜਾਓ।"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"ਕਿਰਪਾ ਕਰਕੇ ਸਿੱਧਾ ਆਪਣੇ ਡੀਵਾਈਸ ਵੱਲ ਦੇਖੋ।"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"ਤੁਹਾਡਾ ਚਿਹਰਾ ਨਹੀਂ ਦਿਸ ਰਿਹਾ। ਫ਼ੋਨ ਵੱਲ ਦੇਖੋ।"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"ਆਪਣਾ ਚਿਹਰਾ ਫ਼ੋਨ ਦੇ ਬਿਲਕੁਲ ਸਾਹਮਣੇ ਰੱਖੋ।"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"ਬਹੁਤ ਜ਼ਿਆਦਾ ਹਿਲਜੁਲ। ਫ਼ੋਨ ਨੂੰ ਸਥਿਰ ਰੱਖੋ।"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"ਕਿਰਪਾ ਕਰਕੇ ਆਪਣਾ ਚਿਹਰਾ ਦੁਬਾਰਾ ਦਰਜ ਕਰੋ।"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"ਹੁਣ ਚਿਹਰਾ ਪਛਾਣਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"ਨਾਲ ਖੋਲ੍ਹੋ"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s ਨਾਲ ਖੋਲ੍ਹੋ"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"ਖੋਲ੍ਹੋ"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> ਲਿੰਕਾਂ ਨੂੰ ਇਸ ਨਾਲ ਖੋਲ੍ਹੋ"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"ਲਿੰਕਾਂ ਨੂੰ ਇਸ ਨਾਲ ਖੋਲ੍ਹੋ"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"ਲਿੰਕਾਂ ਨੂੰ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਖੋਲ੍ਹੋ"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> ਲਿੰਕਾਂ ਨੂੰ <xliff:g id="APPLICATION">%2$s</xliff:g> ਨਾਲ ਖੋਲ੍ਹੋ"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"ਪਹੁੰਚ ਦਿਓ"</string> <string name="whichEditApplication" msgid="144727838241402655">"ਇਸ ਨਾਲ ਸੰਪਾਦਨ ਕਰੋ"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s ਨਾਲ ਸੰਪਾਦਨ ਕਰੋ"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ਕੀ ਬ੍ਰਾਊਜ਼ਰ ਲਾਂਚ ਕਰਨਾ ਹੈ?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"ਕੀ ਕਾਲ ਸਵੀਕਾਰ ਕਰਨੀ ਹੈ?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"ਹਮੇਸ਼ਾਂ"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"ਹਮੇਸ਼ਾਂ ਖੁੱਲ੍ਹਾ \'ਤੇ ਸੈੱਟ ਕਰੋ"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"ਕੇਵਲ ਇੱਕ ਵਾਰ"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"ਸੈਟਿੰਗਾਂ"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੀ"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index a61555b3f652..a90acface07c 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -574,7 +574,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Przesuń telefon w lewo."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Przesuń telefon w prawo."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Patrz prosto na urządzenie."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Nie widzę Twojej twarzy. Spójrz na telefon."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Ustaw twarz dokładnie na wprost telefonu."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Telefon się porusza. Trzymaj go nieruchomo."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Zarejestruj swoją twarz ponownie."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Nie można już rozpoznać twarzy. Spróbuj ponownie."</string> @@ -1171,14 +1171,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Otwórz w aplikacji"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Otwórz w aplikacji %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Otwórz"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Otwieraj linki z: <xliff:g id="HOST">%1$s</xliff:g> w"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Otwieraj linki w"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Otwieraj linki w aplikacji <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Otwieraj linki z: <xliff:g id="HOST">%1$s</xliff:g> w aplikacji <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Udziel uprawnień"</string> <string name="whichEditApplication" msgid="144727838241402655">"Edytuj w aplikacji"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Edytuj w aplikacji %1$s"</string> @@ -1636,8 +1632,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Uruchomić przeglądarkę?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Odebrać połączenie?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Zawsze"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Zawsze otwieraj"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Tylko raz"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Ustawienia"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s nie obsługuje profilu do pracy"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 11c6a2880d1e..742fa81d0e25 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Mova o smartphone para a esquerda."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Mova o smartphone para a direita."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Olhe mais diretamente para o dispositivo."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Não é possível ver o rosto. Olhe para o telefone."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Deixe o rosto diretamente na frente do smartphone."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Muito movimento. Não mova o smartphone."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Registre seu rosto novamente."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"O rosto não é mais reconhecido. Tente novamente."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Abrir com"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Abrir com %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Abrir"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Abrir links do domínio <xliff:g id="HOST">%1$s</xliff:g> com"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Abrir links com"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Abrir links com <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Abrir links do domínio <xliff:g id="HOST">%1$s</xliff:g> com <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Conceder acesso"</string> <string name="whichEditApplication" msgid="144727838241402655">"Editar com"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Editar com %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Abrir Navegador?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Aceitar chamada?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Definir como \"Sempre abrir\""</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Só uma vez"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Configurações"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s não aceita perfis de trabalho"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index ed26c2d7c927..85fb7fddc5d8 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Mova o telemóvel para a esquerda."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Mova o telemóvel para a direita."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Olhe mais diretamente para o dispositivo."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Não consigo ver o rosto. Olhe para o telemóvel."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Posicione o rosto em frente ao telemóvel."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Demasiado movimento. Mantenha o telemóvel firme."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Volte a inscrever o rosto."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Impossível reconhecer o rosto. Tente novamente."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Abrir com"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Abrir com %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Abrir"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Abra os links de <xliff:g id="HOST">%1$s</xliff:g> com:"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Abra os links com:"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Abra os links com a aplicação <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Abra os links de <xliff:g id="HOST">%1$s</xliff:g> com a aplicação <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Conceder acesso"</string> <string name="whichEditApplication" msgid="144727838241402655">"Editar com"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Editar com %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Iniciar Navegador?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Aceitar chamada?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Definir como abrir sempre"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Apenas uma vez"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Definições"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s não suporta o perfil de trabalho"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 11c6a2880d1e..742fa81d0e25 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Mova o smartphone para a esquerda."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Mova o smartphone para a direita."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Olhe mais diretamente para o dispositivo."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Não é possível ver o rosto. Olhe para o telefone."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Deixe o rosto diretamente na frente do smartphone."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Muito movimento. Não mova o smartphone."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Registre seu rosto novamente."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"O rosto não é mais reconhecido. Tente novamente."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Abrir com"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Abrir com %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Abrir"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Abrir links do domínio <xliff:g id="HOST">%1$s</xliff:g> com"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Abrir links com"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Abrir links com <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Abrir links do domínio <xliff:g id="HOST">%1$s</xliff:g> com <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Conceder acesso"</string> <string name="whichEditApplication" msgid="144727838241402655">"Editar com"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Editar com %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Abrir Navegador?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Aceitar chamada?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Definir como \"Sempre abrir\""</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Só uma vez"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Configurações"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s não aceita perfis de trabalho"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index edbc2a4a427a..2f464e93920a 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -571,7 +571,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Mutați telefonul spre stânga."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Mutați telefonul spre dreapta."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Priviți mai direct spre dispozitiv."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Nu vi se vede fața. Uitați-vă la telefon."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Stați cu capul direct în fața telefonului."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Prea multă mișcare. Țineți telefonul nemișcat."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Reînregistrați-vă chipul."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Nu se mai poate recunoaște fața. Încercați din nou."</string> @@ -1151,14 +1151,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Deschideți cu"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Deschideți cu %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Deschideți"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Deschideți linkurile <xliff:g id="HOST">%1$s</xliff:g> cu"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Deschideți linkurile cu"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Deschideți linkurile cu <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Deschideți linkurile <xliff:g id="HOST">%1$s</xliff:g> cu <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Permiteți accesul"</string> <string name="whichEditApplication" msgid="144727838241402655">"Editați cu"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Editați cu %1$s"</string> @@ -1613,8 +1609,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Lansați browserul?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Acceptați apelul?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Întotdeauna"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Schimbați la „Deschideți întotdeauna”"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Numai o dată"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Setări"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s nu acceptă profilul de serviciu"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index a7c5c7a68e62..c4b61b2f9216 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -574,7 +574,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Переместите телефон влево."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Переместите телефон вправо."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Смотрите прямо на устройство."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Вашего лица не видно. Смотрите на телефон."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Держите телефон прямо перед лицом."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Не перемещайте устройство. Держите его неподвижно."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Повторите попытку."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Не удалось распознать лицо. Повторите попытку."</string> @@ -1171,14 +1171,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Открыть с помощью приложения:"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Открыть с помощью приложения \"%1$s\""</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Открыть"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Открывать ссылки вида <xliff:g id="HOST">%1$s</xliff:g> с помощью:"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Открывать ссылки с помощью:"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Открывать ссылки в браузере <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Открывать ссылки вида <xliff:g id="HOST">%1$s</xliff:g> в браузере <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Открыть доступ"</string> <string name="whichEditApplication" msgid="144727838241402655">"Редактировать с помощью приложения:"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Редактировать с помощью приложения \"%1$s\""</string> @@ -1636,8 +1632,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Запустить браузер?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Ответить?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Всегда"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Всегда открывать"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Только сейчас"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Настройки"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s не поддерживает рабочие профили"</string> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index c23728e66a5c..ddeb94ba9ec0 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"දුරකථනය වමට ගෙන යන්න."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"දුරකථනය දකුණට ගෙන යන්න."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"ඔබේ උපාංගය වෙත තවත් ඍජුව බලන්න."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"ඔබේ මුහුණ දැකිය නොහැක. දුරකථනය වෙත බලන්න."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"ඔබේ මුහුණ දුරකථනයට සෘජුවම ඉදිරියෙන් ස්ථානගත කරන්න."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"චලනය ඉතා වැඩියි. දුරකථනය ස්ථිරව අල්ලා සිටින්න."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"ඔබේ මුහුණ යළි ලියාපදිංචි කරන්න."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"තවදුරටත් මුහුණ හඳුනාගත නොහැක. නැවත උත්සාහ කරන්න."</string> @@ -1133,14 +1133,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"සමඟ විවෘත කරන්න"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s සමඟ විවෘත කරන්න"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"විවෘත කරන්න"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"සමග <xliff:g id="HOST">%1$s</xliff:g> සබැඳි විවෘත කරන්න"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"සමඟ සබැඳි විවෘත කරන්න"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g> සමඟ සබැඳි විවෘත කරන්න"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="APPLICATION">%2$s</xliff:g> සමග <xliff:g id="HOST">%1$s</xliff:g> සබැඳි විවෘත කරන්න"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"ප්රවේශය දෙන්න"</string> <string name="whichEditApplication" msgid="144727838241402655">"සමඟ සංස්කරණය කරන්න"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s සමඟ සංස්කරණය කරන්න"</string> @@ -1592,8 +1588,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"බ්රවුසරය දියත් කරන්නද?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"ඇමතුම පිළිගන්නවාද?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"සැම විටම"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"සැම විට විවෘත ලෙස සකසන්න"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"එක් වාරයයි"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"සැකසීම්"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s කාර්යාල පැතිකඩ සඳහා සහාය ලබනොදේ."</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 76b211aac953..4d19308c15e1 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -574,7 +574,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Posuňte telefón doľava."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Posuňte telefón doprava."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Pozrite sa priamejšie na zariadenie."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Nie je vidieť vašu tvár. Pozrite sa na telefón."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Umiestnite svoju tvár priamo pred telefón."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Priveľa pohybu. Nehýbte telefónom."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Znova zaregistrujte svoju tvár."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Tvár už nie je možné rozpoznať. Skúste to znova."</string> @@ -1171,14 +1171,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Otvoriť v aplikácii"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Otvoriť v aplikácii %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Otvoriť"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Otvárajte odkazy z webu <xliff:g id="HOST">%1$s</xliff:g> v prehliadači alebo aplikácii"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Otvárajte odkazy v prehliadači"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Otvárajte odkazy v prehliadači <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Otvárajte odkazy z webu <xliff:g id="HOST">%1$s</xliff:g> v prehliadači <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Udeliť prístup"</string> <string name="whichEditApplication" msgid="144727838241402655">"Upraviť pomocou"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Upraviť v aplikácii %1$s"</string> @@ -1636,8 +1632,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Spustiť prehliadač?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Prijať hovor?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Vždy"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Nastaviť na Vždy otvárať"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Len raz"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Nastavenia"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"Spúšťač %1$s nepodporuje pracovné profily"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 943e9e260a89..b2b3109b2b60 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -574,7 +574,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Telefon premaknite v levo."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Telefon premaknite v desno."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Glejte bolj naravnost v napravo."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Obraz ni viden. Poglejte v telefon."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Obraz nastavite naravnost pred telefon."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Preveč se premikate. Držite telefon pri miru."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Znova prijavite svoj obraz."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Obraza ni več mogoče prepoznati. Poskusite znova."</string> @@ -1171,14 +1171,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Odpiranje z aplikacijo"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Odpiranje z aplikacijo %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Odpiranje"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Odpiranje povezav <xliff:g id="HOST">%1$s</xliff:g> z"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Odpiranje povezav z"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Odpiranje povezav z aplikacijo <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Odpiranje povezav <xliff:g id="HOST">%1$s</xliff:g> z aplikacijo <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Omogoči dostop"</string> <string name="whichEditApplication" msgid="144727838241402655">"Urejanje z aplikacijo"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Urejanje z aplikacijo %1$s"</string> @@ -1636,8 +1632,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Ali želite odpreti brskalnik?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Ali želite sprejeti klic?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Vedno"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Nastavi na »vedno odpri«"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Samo tokrat"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Nastavitve"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ne podpira delovnega profila"</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index 28f6062b16fb..afed336078a2 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Lëvize telefonin majtas."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Lëvize telefonin djathtas"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Shiko më drejt në pajisjen tënde."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Fytyra jote nuk shfaqet. Shiko te telefoni."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Pozicionoje fytyrën tënde direkt përpara telefonit."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Ka shumë lëvizje. Mbaje telefonin të palëvizur."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Regjistroje përsëri fytyrën tënde."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Fytyra nuk mund të njihet më. Provo përsëri."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Hap me"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Hap me %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Hap"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Hapi lidhjet e <xliff:g id="HOST">%1$s</xliff:g> me"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Hapi lidhjet me"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Hapi lidhjet me <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Hapi lidhjet e <xliff:g id="HOST">%1$s</xliff:g> me <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Jep qasje"</string> <string name="whichEditApplication" msgid="144727838241402655">"Redakto me"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Redakto me %1$s"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Të hapet shfletuesi?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Dëshiron ta pranosh telefonatën?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Gjithmonë"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Caktoje si gjithmonë të hapur"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Vetëm një herë"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Cilësimet"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s nuk e mbështet profilin e punës"</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 4fdf30145741..110b31d68b97 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -571,7 +571,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Померите телефон улево."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Померите телефон удесно."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Гледајте право у уређај."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Не види се лице. Гледајте у телефон."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Поставите лице директно испред телефона"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Много се померате. Држите телефон мирно."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Поново региструјте лице."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Више не може да се препозна лице. Пробајте поново."</string> @@ -1151,14 +1151,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Отворите помоћу"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Отворите помоћу апликације %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Отвори"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Отварајте <xliff:g id="HOST">%1$s</xliff:g> линкове помоћу"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Отваратеј линкове помоћу"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Отварајте линкове помоћу апликације <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Отварајте <xliff:g id="HOST">%1$s</xliff:g> линкове помоћу апликације <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Дозволи приступ"</string> <string name="whichEditApplication" msgid="144727838241402655">"Измените помоћу"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Измените помоћу апликације %1$s"</string> @@ -1613,8 +1609,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Желите ли да покренете прегледач?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Желите ли да прихватите позив?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Увек"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Подеси на „увек отварај“"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Само једном"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Подешавања"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s не подржава пословни профил"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index ff82a14db19c..bc1752e7135d 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Flytta mobilen åt vänster."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Flytta mobilen åt höger."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Titta rakt på enheten."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Ansiktet syns inte. Titta på mobilen."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Ha ansiktet direkt framför telefonen."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"För mycket rörelse. Håll mobilen stilla."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Registrera ansiktet på nytt."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Ansiktet kan inte längre kännas igen. Försök igen."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Öppna med"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Öppna med %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Öppna"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Öppna länkar på <xliff:g id="HOST">%1$s</xliff:g> med"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Öppna länkar med"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Öppna länkar med <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Öppna länkar på <xliff:g id="HOST">%1$s</xliff:g> med <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Ge åtkomst"</string> <string name="whichEditApplication" msgid="144727838241402655">"Redigera med"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Redigera med %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Vill du öppna webbläsaren?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vill du ta emot samtal?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Alltid"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Ställ in på att alltid öppnas"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Bara en gång"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Inställningar"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s har inte stöd för arbetsprofil"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 528d5d7a159c..92510ea79f7f 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Sogeza simu upande wa kushoto."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Sogeza simu upande wa kulia."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Tafadhali angalia kifaa chako moja kwa moja."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Uso wako hauonekani. Angalia simu."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Weka uso wako moja kwa moja mbele ya simu."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Inatikisika sana. Ishike simu iwe thabiti."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Tafadhali sajili uso wako tena."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Haiwezi tena kutambua uso. Jaribu tena."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Fungua ukitumia"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Fungua ukitumia %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Fungua"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Fungua viungo vya <xliff:g id="HOST">%1$s</xliff:g> ukitumia"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Fungua viungo ukitumia"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Fungua viungo ukitumia <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Fungua viungo vya <xliff:g id="HOST">%1$s</xliff:g> ukitumia <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Idhinisha ufikiaji"</string> <string name="whichEditApplication" msgid="144727838241402655">"Badilisha kwa"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Badilisha kwa %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Zindua Kivinjari?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Kubali simu?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Kila mara"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Weka ifunguke kila wakati"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Mara moja tu"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Mipangilio"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s haitumii wasifu wa kazini"</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 39cd685c4aee..8ddcfe6f5048 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"மொபைலை இடப்புறம் நகர்த்தவும்."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"மொபைலை வலப்புறம் நகர்த்தவும்."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"முழுமுகம் தெரியுமாறு நேராகப் பார்க்கவும்."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"முகம் சரியாகத் தெரியவில்லை. மொபைலைப் பார்க்கவும்."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"முகத்தை மொபைலுக்கு நேராக வைக்கவும்."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"அதிகமாக அசைகிறது. மொபைலை அசைக்காமல் பிடிக்கவும்."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"உங்கள் முகத்தை மீண்டும் பதிவுசெய்யுங்கள்."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"முகத்தைக் கண்டறிய இயலவில்லை. மீண்டும் முயலவும்."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"இதன்மூலம் திற"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s மூலம் திற"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"திற"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> இணைப்புகளை இதன் மூலம் திற:"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"இணைப்புகளை இதன் மூலம் திற:"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"இணைப்புகளை <xliff:g id="APPLICATION">%1$s</xliff:g> ஆப்ஸில் திறத்தல்"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> இணைப்புகளை <xliff:g id="APPLICATION">%2$s</xliff:g> ஆப்ஸில் திறத்தல்"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"அணுகலை வழங்கு"</string> <string name="whichEditApplication" msgid="144727838241402655">"இதன் மூலம் திருத்து"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s மூலம் திருத்து"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"உலாவியைத் துவக்கவா?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"அழைப்பை ஏற்கவா?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"எப்போதும்"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"எப்போதும் திறக்குமாறு அமைத்தல்"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"இப்போது மட்டும்"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"அமைப்புகள்"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s பணிக் கணக்கை ஆதரிக்காது"</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 3ba794a60017..649e17c4229d 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"ఫోన్ను ఎడమవైపునకు జరపండి."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"ఫోన్ను కుడివైపునకు జరపండి."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"దయచేసి మీ పరికరం వైపు మరింత నేరుగా చూడండి."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"మీ ముఖం కనిపించడం లేదు. ఫోన్ వైపు చూడండి."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"మీ ముఖాన్ని ఫోన్కు ఎదురుగా ఉంచండి."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"బాగా కదుపుతున్నారు. ఫోన్ను స్థిరంగా పట్టుకోండి"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"దయచేసి మీ ముఖాన్ని మళ్లీ నమోదు చేయండి."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"ఇక ముఖం గుర్తించలేదు. మళ్లీ ప్రయత్నించండి."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"దీనితో తెరువు"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$sతో తెరువు"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"తెరువు"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"దీనితో <xliff:g id="HOST">%1$s</xliff:g> లింక్లను తెరవండి"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"దీనితో లింక్లను తెరవండి"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g>తో లింక్లను తెరవండి"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> లింక్లను <xliff:g id="APPLICATION">%2$s</xliff:g>తో తెరవండి"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"యాక్సెస్ ఇవ్వండి"</string> <string name="whichEditApplication" msgid="144727838241402655">"దీనితో సవరించు"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$sతో సవరించు"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"బ్రౌజర్ను ప్రారంభించాలా?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"కాల్ను ఆమోదించాలా?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"ఎల్లప్పుడూ"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"ఎల్లప్పుడూ తెరవడానికి సెట్ చేయి"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"ఒకసారి మాత్రమే"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"సెట్టింగ్లు"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s కార్యాలయ ప్రొఫైల్కు మద్దతు ఇవ్వదు"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 437d89eaaa05..4e6943011d33 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"เลื่อนโทรศัพท์ไปทางซ้าย"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"เลื่อนโทรศัพท์ไปทางขวา"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"โปรดมองตรงมาที่อุปกรณ์"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"ไม่เห็นหน้าเลย ลองมองที่โทรศัพท์"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"หันหน้าให้ตรงกับโทรศัพท์"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"มีการเคลื่อนไหวมากเกินไป ถือโทรศัพท์นิ่งๆ"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"โปรดลงทะเบียนใบหน้าอีกครั้ง"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"จำใบหน้าไม่ได้แล้ว ลองอีกครั้ง"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"เปิดด้วย"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"เปิดด้วย %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"เปิด"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"เปิดลิงก์ <xliff:g id="HOST">%1$s</xliff:g> ด้วย"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"เปิดลิงก์ด้วย"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"เปิดลิงก์ด้วย <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"เปิดลิงก์ <xliff:g id="HOST">%1$s</xliff:g> ด้วย <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"ให้สิทธิ์"</string> <string name="whichEditApplication" msgid="144727838241402655">"แก้ไขด้วย"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"แก้ไขด้วย %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"เปิดเบราว์เซอร์หรือไม่"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"รับสายหรือไม่"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"ทุกครั้ง"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"ตั้งค่าให้เปิดทุกครั้ง"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"เฉพาะครั้งนี้"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"การตั้งค่า"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ไม่สนับสนุนโปรไฟล์งาน"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 8469e7ba1d6e..68435284b9a5 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Igalaw ang telepono pakaliwa."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Igalaw ang telepono pakanan."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Tumingin nang mas direkta sa iyong device."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Hindi makita ang mukha mo. Tumingin sa telepono."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Itapat ang mukha mo sa mismong harap ng telepono."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Masyadong magalaw. Hawakang mabuti ang telepono."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Paki-enroll muli ang iyong mukha."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Hindi na makilala ang mukha. Subukang muli."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Buksan gamit ang"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Buksan gamit ang %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Buksan"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Buksan ang mga link ng <xliff:g id="HOST">%1$s</xliff:g> gamit ang"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Buksan ang mga link gamit ang"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Buksan ang mga link gamit ang <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Buksan ang mga link ng <xliff:g id="HOST">%1$s</xliff:g> gamit ang <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Bigyan ng access"</string> <string name="whichEditApplication" msgid="144727838241402655">"I-edit gamit ang"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"I-edit gamit ang %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Ilunsad ang Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Tanggapin ang tawag?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Palagi"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Itakda sa palaging buksan"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Isang beses lang"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Mga Setting"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"Hindi sinusuportahan ng %1$s ang profile sa trabaho"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 8a28a0d2b415..3592df9abe34 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Telefonu sola hareket ettirin."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Telefonu sağa hareket ettirin."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Lütfen cihazınıza daha doğrudan bakın."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Yüzünüz görülmüyor. Telefona bakın."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Yüzünüz telefonun tam karşısına gelmelidir."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Çok fazla hareket ediyorsunuz. Telefonu sabit tutun."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Lütfen yüzünüzü yeniden kaydedin."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Yüz artık tanınamıyor. Tekrar deneyin."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Şununla aç:"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s ile aç"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Aç"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> bağlantılarını şununla aç:"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Bağlantıları şununla aç:"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Bağlantıları <xliff:g id="APPLICATION">%1$s</xliff:g> ile aç"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> bağlantılarını <xliff:g id="APPLICATION">%2$s</xliff:g> ile aç"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Erişim ver"</string> <string name="whichEditApplication" msgid="144727838241402655">"Şununla düzenle:"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s ile düzenle"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Tarayıcı Başlatılsın mı?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Çağrı kabul edilsin mi?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Her zaman"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Her zaman açılmak üzere ayarla"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Yalnızca bir defa"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Ayarlar"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s, iş profilini desteklemiyor"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index b02208fc47e0..347c81f3af42 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -574,7 +574,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Тримайте телефон лівіше."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Тримайте телефон правіше."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Дивіться просто на пристрій."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Обличчя не видно. Дивіться на телефон."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Тримайте телефон просто перед обличчям."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Забагато рухів. Тримайте телефон нерухомо."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Повторно проскануйте обличчя."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Розпізнати обличчя вже не вдається. Повторіть спробу."</string> @@ -1171,14 +1171,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Відкрити за допомогою"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Відкрити за допомогою %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Відкрити"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Відкривати посилання <xliff:g id="HOST">%1$s</xliff:g> за допомогою"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Відкривати посилання за допомогою"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Відкривати посилання за допомогою додатка <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Відкривати посилання <xliff:g id="HOST">%1$s</xliff:g> за допомогою додатка <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Дозволити"</string> <string name="whichEditApplication" msgid="144727838241402655">"Редагувати за допомогою"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Редагувати за допомогою %1$s"</string> @@ -1636,8 +1632,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Запустити веб-переглядач?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Прийняти виклик?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Завжди"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Вибрати додаток для відкривання посилань"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Лише цього разу"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Налаштування"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s не підтримує робочий профіль"</string> @@ -2076,7 +2071,7 @@ <string name="notification_appops_overlay_active" msgid="633813008357934729">"показ поверх інших додатків на екрані"</string> <string name="dynamic_mode_notification_channel_name" msgid="2348803891571320452">"Сповіщення про послідовнсть дій"</string> <string name="dynamic_mode_notification_title" msgid="508815255807182035">"Акумулятор може розрядитися раніше ніж зазвичай"</string> - <string name="dynamic_mode_notification_summary" msgid="2541166298550402690">"Режим економії заряду акумулятора активовано для збільшення часу його роботи"</string> + <string name="dynamic_mode_notification_summary" msgid="2541166298550402690">"Режим енергозбереження активовано для збільшення часу роботи акумулятора"</string> <string name="battery_saver_notification_channel_name" msgid="2083316159716201806">"Режим енергозбереження"</string> <string name="battery_saver_sticky_disabled_notification_title" msgid="6376147579378764641">"Режим енергозбереження не ввімкнеться, доки рівень заряду знову не знизиться"</string> <string name="battery_saver_sticky_disabled_notification_summary" msgid="8090192609249817945">"Акумулятор заряджено достатньо. Режим енергозбереження буде знову ввімкнено, коли рівень заряду знизиться."</string> diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index 5adf84e0f2d9..3fd6fe757bbf 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"فون کو بائیں جانب لے جائيں۔"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"فون کو دائیں جانب لے جائیں۔"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"براہ کرم اپنے آلہ کی طرف چہرے کو سیدھا رکھیں۔"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"آپ کا چہرہ دکھائی نہیں دے رہا۔ فون کی طرف دیکھیں۔"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"اپنے چہرے کو براہ راست فون کے سامنے رکھیں۔"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"کافی حرکت ہو رہی ہے۔ فون کو مضبوطی سے پکڑیں۔"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"براہ کرم اپنے چہرے کو دوبارہ مندرج کریں۔"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"اب چہرے کی شناخت نہیں کر سکتے۔ پھر آزمائيں۔"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"اس کے ساتھ کھولیں"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s کے ساتھ کھولیں"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"کھولیں"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> لنکس کے ساتھ کھولیں"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"لنکس کے ساتھ کھولیں"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"<xliff:g id="APPLICATION">%1$s</xliff:g> کے ذریعے لنکس کھولیں"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> لنکس کو <xliff:g id="APPLICATION">%2$s</xliff:g> کے ذریعے کھولیں"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"رسائی دیں"</string> <string name="whichEditApplication" msgid="144727838241402655">"اس کے ساتھ ترمیم کریں"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"%1$s کے ساتھ ترمیم کریں"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"براؤزر شروع کریں؟"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"کال قبول کریں؟"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"ہمیشہ"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"ہمیشہ کھلا ہوا ہونے پر سیٹ کریں"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"بس ایک مرتبہ"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"ترتیبات"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s دفتری پروفائل کا تعاون نہیں کرتا ہے"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index 1452573b12e0..85ebe0035a49 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Telefonni chapga suring."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Telefonni oʻngga suring."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Qurilmaga tik qarang."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Yuzingiz koʻrinmayapti. Telefonga qarang."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Telefoningizga yuzingizni tik tuting."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Ortiqcha harakatlanmoqda. Qimirlatmasdan ushlang."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Yuzingizni qaytadan qayd qildiring."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Yuz tanilmadi. Qaytadan urining."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Ochish…"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"%1$s bilan ochish"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Ochish"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> havolalarini quyidagi orqali ochish"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Havolalarni quyidagi orqali ochish"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Havolalarni <xliff:g id="APPLICATION">%1$s</xliff:g> orqali ochish"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"<xliff:g id="HOST">%1$s</xliff:g> havolalarini <xliff:g id="APPLICATION">%2$s</xliff:g> orqali ochish"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Ruxsat berish"</string> <string name="whichEditApplication" msgid="144727838241402655">"Tahrirlash…"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"“%1$s” yordamida tahrirlash"</string> @@ -1591,8 +1587,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Brauzer ishga tushirilsinmi?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Qo‘ng‘iroqni qabul qilasizmi?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Har doim"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Doim ochish"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Faqat hozir"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Sozlamalar"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"“%1$s” ishchi profilni qo‘llab-quvvatlamaydi"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index b27e38963589..f2eb9d4ecb51 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Đưa điện thoại sang bên trái."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Đưa điện thoại sang bên phải."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Vui lòng nhìn thẳng vào thiết bị."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Hệ thống không phát hiện được khuôn mặt bạn. Hãy nhìn vào điện thoại."</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Hướng thẳng khuôn mặt về phía trước điện thoại."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Thiết bị di chuyển quá nhiều. Giữ yên thiết bị."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Vui lòng đăng ký lại khuôn mặt của bạn."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Không nhận ra khuôn mặt. Hãy thử lại."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Mở bằng"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Mở bằng %1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Mở"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Mở đường dẫn liên kết <xliff:g id="HOST">%1$s</xliff:g> bằng"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Mở đường dẫn liên kết bằng"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Mở đường dẫn liên kết bằng <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Mở đường dẫn liên kết <xliff:g id="HOST">%1$s</xliff:g> bằng <xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Cấp quyền truy cập"</string> <string name="whichEditApplication" msgid="144727838241402655">"Chỉnh sửa bằng"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Chỉnh sửa bằng %1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Chạy trình duyệt?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Chấp nhận cuộc gọi?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Luôn chọn"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Đặt thành luôn mở"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Chỉ một lần"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Cài đặt"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s không hỗ trợ hồ sơ công việc"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 162b8807bc41..1012337bc466 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"请将手机向左移动。"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"请将手机向右移动。"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"请直视您的设备。"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"看不到您的脸部,请直视手机。"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"请将你的面部正对手机。"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"摄像头过于晃动。请将手机拿稳。"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"请重新注册您的面孔。"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"已无法识别人脸,请重试。"</string> @@ -661,8 +661,8 @@ <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"监控在解锁屏幕时输错密码的次数,并在输错次数过多时锁定平板电脑或清空此用户的所有数据。"</string> <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"监控在解锁屏幕时输错密码的次数,并在输错次数过多时锁定电视或清空此用户的所有数据。"</string> <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"监控在解锁屏幕时输错密码的次数,并在输错次数过多时锁定手机或清空此用户的所有数据。"</string> - <string name="policylab_resetPassword" msgid="4934707632423915395">"更改锁屏密码"</string> - <string name="policydesc_resetPassword" msgid="1278323891710619128">"更改锁屏密码。"</string> + <string name="policylab_resetPassword" msgid="4934707632423915395">"更改锁屏方式"</string> + <string name="policydesc_resetPassword" msgid="1278323891710619128">"更改锁屏方式。"</string> <string name="policylab_forceLock" msgid="2274085384704248431">"锁定屏幕"</string> <string name="policydesc_forceLock" msgid="1141797588403827138">"控制屏幕锁定的方式和时间。"</string> <string name="policylab_wipeData" msgid="3910545446758639713">"清除所有数据"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"打开方式"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"使用%1$s打开"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"打开"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"<xliff:g id="HOST">%1$s</xliff:g> 链接打开方式"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"链接打开方式"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"使用<xliff:g id="APPLICATION">%1$s</xliff:g>打开链接"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"使用<xliff:g id="APPLICATION">%2$s</xliff:g>打开 <xliff:g id="HOST">%1$s</xliff:g> 链接"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"授予访问权限"</string> <string name="whichEditApplication" msgid="144727838241402655">"编辑方式"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"使用%1$s编辑"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"要启动浏览器吗?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"要接听电话吗?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"始终"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"设置为始终打开"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"仅此一次"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"设置"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s不支持工作资料"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index f4ec4d050f6b..9ac4582fca26 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"請將手機向左移。"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"請將手機向右移。"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"請以更直視的角度看著裝置。"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"看不到您的臉。請看著手機。"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"將手機對準您的臉孔正面。"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"裝置不夠穩定。請拿穩手機。"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"請重新註冊臉孔。"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"無法再識別臉孔。請再試一次。"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"選擇開啟方式"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"使用 %1$s 開啟"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"開啟"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"開啟 <xliff:g id="HOST">%1$s</xliff:g> 連結的方式"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"開啟連結的方式"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"使用 <xliff:g id="APPLICATION">%1$s</xliff:g> 開啟連結"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"使用 <xliff:g id="APPLICATION">%2$s</xliff:g> 開啟 <xliff:g id="HOST">%1$s</xliff:g> 連結"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"授予存取權"</string> <string name="whichEditApplication" msgid="144727838241402655">"使用以下選擇器編輯:"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"使用 %1$s 編輯"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"要啟動「瀏覽器」嗎?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"接聽電話嗎?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"一律採用"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"設為一律開啟"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"只此一次"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"設定"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s 不支援公司檔案"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 547736a0d26c..580a1dc6b2b1 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"請將手機向左移動。"</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"請將手機向右移動。"</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"請儘可能直視裝置正面。"</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"無法偵測你的臉孔,請直視手機。"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"將你的臉孔正對手機。"</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"鏡頭過度晃動,請拿穩手機。"</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"請重新註冊你的臉孔。"</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"已無法辨識臉孔,請再試一次。"</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"選擇開啟工具"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"透過 %1$s 開啟"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"開啟"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"開啟 <xliff:g id="HOST">%1$s</xliff:g> 連結時使用的瀏覽器/應用程式"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"開啟連結時使用的瀏覽器"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"使用「<xliff:g id="APPLICATION">%1$s</xliff:g>」開啟連結"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"使用「<xliff:g id="APPLICATION">%2$s</xliff:g>」開啟 <xliff:g id="HOST">%1$s</xliff:g> 連結"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"授予存取權"</string> <string name="whichEditApplication" msgid="144727838241402655">"選擇編輯工具"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"使用 %1$s 編輯"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"啟動「瀏覽器」嗎?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"接聽電話嗎?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"一律採用"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"設為一律開啟"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"僅限一次"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"設定"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s 不支援工作設定檔"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index fa8eff327280..c4f8823b1714 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -568,7 +568,7 @@ <string name="face_acquired_too_right" msgid="3667075962661863218">"Hambisa ifoni ngakwesokunxele."</string> <string name="face_acquired_too_left" msgid="3148242963894703424">"Hambisa ifoni ngakwesokudla."</string> <string name="face_acquired_poor_gaze" msgid="5606479370806754905">"Sicela ubheke ngokuqondile kakhulu kudivayisi yakho."</string> - <string name="face_acquired_not_detected" msgid="4885504661626728809">"Ayikwazi ukubona ubuso bakho. Bheka ifoni"</string> + <string name="face_acquired_not_detected" msgid="1879714205006680222">"Beka ubuso bakho ngqo phambi kwefoni."</string> <string name="face_acquired_too_much_motion" msgid="3149332171102108851">"Ukunyakaza okuningi kakhulu. Bamba ifoni iqine."</string> <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Sicela uphinde ubhalise ubuso bakho."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Ayisakwazi ukubona ubuso. Zama futhi."</string> @@ -1131,14 +1131,10 @@ <string name="whichViewApplication" msgid="3272778576700572102">"Vula nge-"</string> <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Vula nge-%1$s"</string> <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Kuvuliwe"</string> - <!-- no translation found for whichOpenHostLinksWith (3788174881117226583) --> - <skip /> - <!-- no translation found for whichOpenLinksWith (6392123355599572804) --> - <skip /> - <!-- no translation found for whichOpenLinksWithApp (8225991685366651614) --> - <skip /> - <!-- no translation found for whichOpenHostLinksWithApp (3464470639011045589) --> - <skip /> + <string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Vula izixhumanisi ze-<xliff:g id="HOST">%1$s</xliff:g> nge"</string> + <string name="whichOpenLinksWith" msgid="6392123355599572804">"Vula izixhumanisi nge"</string> + <string name="whichOpenLinksWithApp" msgid="8225991685366651614">"Vula izixhumanisi nge-<xliff:g id="APPLICATION">%1$s</xliff:g>"</string> + <string name="whichOpenHostLinksWithApp" msgid="3464470639011045589">"Vula izixhumanisi ze-<xliff:g id="HOST">%1$s</xliff:g> nge-<xliff:g id="APPLICATION">%2$s</xliff:g>"</string> <string name="whichGiveAccessToApplicationLabel" msgid="6142688895536868827">"Nikeza ukufinyel"</string> <string name="whichEditApplication" msgid="144727838241402655">"Hlela nge-"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Hlela nge-%1$s"</string> @@ -1590,8 +1586,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Qala Isiphequluli?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Amukela ucingo?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Njalo"</string> - <!-- no translation found for activity_resolver_set_always (1422574191056490585) --> - <skip /> + <string name="activity_resolver_set_always" msgid="1422574191056490585">"Setha ukuthi kuhlale kuvuliwe"</string> <string name="activity_resolver_use_once" msgid="2404644797149173758">"Kanye nje"</string> <string name="activity_resolver_app_settings" msgid="8965806928986509855">"Izilungiselelo"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s ayisekeli iphrofayela yomsebenzi"</string> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 622e043eaa67..498e60e0405b 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3824,9 +3824,13 @@ <java-symbol type="string" name="config_defaultSupervisionProfileOwnerComponent" /> <java-symbol type="bool" name="config_inflateSignalStrength" /> + <java-symbol type="drawable" name="android_logotype" /> + <java-symbol type="layout" name="platlogo_layout" /> + <java-symbol type="integer" name="config_notificationWarnRemoteViewSizeBytes" /> <java-symbol type="integer" name="config_notificationStripRemoteViewSizeBytes" /> <java-symbol type="string" name="config_factoryResetPackage" /> <java-symbol type="array" name="config_highRefreshRateBlacklist" /> + </resources> diff --git a/core/tests/coretests/src/android/os/RedactingFileDescriptorTest.java b/core/tests/coretests/src/android/os/RedactingFileDescriptorTest.java index d5163e193510..eff4826040f4 100644 --- a/core/tests/coretests/src/android/os/RedactingFileDescriptorTest.java +++ b/core/tests/coretests/src/android/os/RedactingFileDescriptorTest.java @@ -64,7 +64,7 @@ public class RedactingFileDescriptorTest { @Test public void testSingleByte() throws Exception { final FileDescriptor fd = RedactingFileDescriptor.open(mContext, mFile, MODE_READ_ONLY, - new long[] { 10, 11 }).getFileDescriptor(); + new long[] { 10, 11 }, new long[] {}).getFileDescriptor(); final byte[] buf = new byte[1_000]; assertEquals(buf.length, Os.read(fd, buf, 0, buf.length)); @@ -80,7 +80,7 @@ public class RedactingFileDescriptorTest { @Test public void testRanges() throws Exception { final FileDescriptor fd = RedactingFileDescriptor.open(mContext, mFile, MODE_READ_ONLY, - new long[] { 100, 200, 300, 400 }).getFileDescriptor(); + new long[] { 100, 200, 300, 400 }, new long[] {}).getFileDescriptor(); final byte[] buf = new byte[10]; assertEquals(buf.length, Os.pread(fd, buf, 0, 10, 90)); @@ -102,7 +102,7 @@ public class RedactingFileDescriptorTest { @Test public void testEntireFile() throws Exception { final FileDescriptor fd = RedactingFileDescriptor.open(mContext, mFile, MODE_READ_ONLY, - new long[] { 0, 5_000_000 }).getFileDescriptor(); + new long[] { 0, 5_000_000 }, new long[] {}).getFileDescriptor(); try (FileInputStream in = new FileInputStream(fd)) { int val; @@ -115,7 +115,7 @@ public class RedactingFileDescriptorTest { @Test public void testReadWrite() throws Exception { final FileDescriptor fd = RedactingFileDescriptor.open(mContext, mFile, MODE_READ_WRITE, - new long[] { 100, 200, 300, 400 }).getFileDescriptor(); + new long[] { 100, 200, 300, 400 }, new long[] {}).getFileDescriptor(); // Redacted at first final byte[] buf = new byte[10]; @@ -168,4 +168,76 @@ public class RedactingFileDescriptorTest { assertArrayEquals(new long[] { 100, 200 }, removeRange(new long[] { 100, 200 }, 150, 150)); } + + @Test + public void testFreeAtStart() throws Exception { + final FileDescriptor fd = RedactingFileDescriptor.open(mContext, mFile, MODE_READ_WRITE, + new long[] { 1, 10 }, new long[] {1}).getFileDescriptor(); + + final byte[] buf = new byte[10]; + assertEquals(buf.length, Os.pread(fd, buf, 0, 10, 0)); + assertArrayEquals( + new byte[] { 64, (byte) 'f', (byte) 'r', (byte) 'e', (byte) 'e', 0, 0, 0, 0, 0 }, + buf); + } + + @Test + public void testFreeAtOffset() throws Exception { + final FileDescriptor fd = RedactingFileDescriptor.open(mContext, mFile, MODE_READ_WRITE, + new long[] { 1, 10 }, new long[] {3}).getFileDescriptor(); + + final byte[] buf = new byte[10]; + assertEquals(buf.length, Os.pread(fd, buf, 0, 10, 0)); + assertArrayEquals( + new byte[] { 64, 0, 0, (byte) 'f', (byte) 'r', (byte) 'e', (byte) 'e', 0, 0, 0 }, + buf); + } + + @Test + public void testFreeAcrossRedactionStart() throws Exception { + final FileDescriptor fd = RedactingFileDescriptor.open(mContext, mFile, MODE_READ_WRITE, + new long[] { 1, 10 }, new long[] {0}).getFileDescriptor(); + + final byte[] buf = new byte[10]; + assertEquals(buf.length, Os.pread(fd, buf, 0, 10, 0)); + assertArrayEquals( + new byte[] { 64, (byte) 'r', (byte) 'e', (byte) 'e', 0, 0, 0, 0, 0, 0 }, + buf); + } + + @Test + public void testFreeAcrossRedactionEnd() throws Exception { + final FileDescriptor fd = RedactingFileDescriptor.open(mContext, mFile, MODE_READ_WRITE, + new long[] { 1, 3 }, new long[] {2}).getFileDescriptor(); + + final byte[] buf = new byte[10]; + assertEquals(buf.length, Os.pread(fd, buf, 0, 10, 0)); + assertArrayEquals( + new byte[] { 64, 0, (byte) 'f', 64, 64, 64, 64, 64, 64, 64 }, + buf); + } + + @Test + public void testFreeOutsideRedaction() throws Exception { + final FileDescriptor fd = RedactingFileDescriptor.open(mContext, mFile, MODE_READ_WRITE, + new long[] { 1, 8 }, new long[] { 8 }).getFileDescriptor(); + + final byte[] buf = new byte[10]; + assertEquals(buf.length, Os.pread(fd, buf, 0, 10, 0)); + assertArrayEquals( + new byte[] { 64, 0, 0, 0, 0, 0, 0, 0, 64, 64 }, + buf); + } + + @Test + public void testFreeMultipleRedactions() throws Exception { + final FileDescriptor fd = RedactingFileDescriptor.open(mContext, mFile, MODE_READ_WRITE, + new long[] { 1, 2, 3, 4 }, new long[] { 0 }).getFileDescriptor(); + + final byte[] buf = new byte[10]; + assertEquals(buf.length, Os.pread(fd, buf, 0, 10, 0)); + assertArrayEquals( + new byte[] { 64, (byte) 'r', 64, (byte) 'e', 64, 64, 64, 64, 64, 64 }, + buf); + } } diff --git a/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java b/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java index 78239714ca3b..274e0e4c2b65 100644 --- a/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java +++ b/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java @@ -40,127 +40,116 @@ import java.util.Arrays; */ public class GnssMetrics { - private static final String TAG = GnssMetrics.class.getSimpleName(); + private static final String TAG = GnssMetrics.class.getSimpleName(); - /* Constant which indicates GPS signal quality is as yet unknown */ - public static final int GPS_SIGNAL_QUALITY_UNKNOWN = - ServerLocationProtoEnums.GPS_SIGNAL_QUALITY_UNKNOWN; // -1 + /* Constant which indicates GPS signal quality is as yet unknown */ + private static final int GPS_SIGNAL_QUALITY_UNKNOWN = + ServerLocationProtoEnums.GPS_SIGNAL_QUALITY_UNKNOWN; // -1 - /* Constant which indicates GPS signal quality is poor */ - public static final int GPS_SIGNAL_QUALITY_POOR = - ServerLocationProtoEnums.GPS_SIGNAL_QUALITY_POOR; // 0 + /* Constant which indicates GPS signal quality is poor */ + private static final int GPS_SIGNAL_QUALITY_POOR = + ServerLocationProtoEnums.GPS_SIGNAL_QUALITY_POOR; // 0 - /* Constant which indicates GPS signal quality is good */ - public static final int GPS_SIGNAL_QUALITY_GOOD = - ServerLocationProtoEnums.GPS_SIGNAL_QUALITY_GOOD; // 1 + /* Constant which indicates GPS signal quality is good */ + private static final int GPS_SIGNAL_QUALITY_GOOD = + ServerLocationProtoEnums.GPS_SIGNAL_QUALITY_GOOD; // 1 - /* Number of GPS signal quality levels */ - public static final int NUM_GPS_SIGNAL_QUALITY_LEVELS = GPS_SIGNAL_QUALITY_GOOD + 1; + /* Number of GPS signal quality levels */ + public static final int NUM_GPS_SIGNAL_QUALITY_LEVELS = GPS_SIGNAL_QUALITY_GOOD + 1; - /** Default time between location fixes (in millisecs) */ - private static final int DEFAULT_TIME_BETWEEN_FIXES_MILLISECS = 1000; + /** Default time between location fixes (in millisecs) */ + private static final int DEFAULT_TIME_BETWEEN_FIXES_MILLISECS = 1000; - /* The time since boot when logging started */ - private String logStartInElapsedRealTime; + /* The time since boot when logging started */ + private String mLogStartInElapsedRealTime; - /* GNSS power metrics */ - private GnssPowerMetrics mGnssPowerMetrics; + /* GNSS power metrics */ + private GnssPowerMetrics mGnssPowerMetrics; - /** - * A boolean array indicating whether the constellation types have been used in fix. - */ + /* A boolean array indicating whether the constellation types have been used in fix. */ private boolean[] mConstellationTypes; - - /** Constructor */ - public GnssMetrics(IBatteryStats stats) { - mGnssPowerMetrics = new GnssPowerMetrics(stats); - locationFailureStatistics = new Statistics(); - timeToFirstFixSecStatistics = new Statistics(); - positionAccuracyMeterStatistics = new Statistics(); - topFourAverageCn0Statistics = new Statistics(); - reset(); - } - - /** - * Logs the status of a location report received from the HAL - * - * @param isSuccessful - */ - public void logReceivedLocationStatus(boolean isSuccessful) { - if (!isSuccessful) { - locationFailureStatistics.addItem(1.0); - return; + /** Location failure statistics */ + private Statistics mLocationFailureStatistics; + /** Time to first fix statistics */ + private Statistics mTimeToFirstFixSecStatistics; + /** Position accuracy statistics */ + private Statistics mPositionAccuracyMeterStatistics; + /** Top 4 average CN0 statistics */ + private Statistics mTopFourAverageCn0Statistics; + + public GnssMetrics(IBatteryStats stats) { + mGnssPowerMetrics = new GnssPowerMetrics(stats); + mLocationFailureStatistics = new Statistics(); + mTimeToFirstFixSecStatistics = new Statistics(); + mPositionAccuracyMeterStatistics = new Statistics(); + mTopFourAverageCn0Statistics = new Statistics(); + reset(); } - locationFailureStatistics.addItem(0.0); - return; - } - - /** - * Logs missed reports - * - * @param desiredTimeBetweenFixesMilliSeconds - * @param actualTimeBetweenFixesMilliSeconds - */ - public void logMissedReports(int desiredTimeBetweenFixesMilliSeconds, - int actualTimeBetweenFixesMilliSeconds) { - int numReportMissed = (actualTimeBetweenFixesMilliSeconds / - Math.max(DEFAULT_TIME_BETWEEN_FIXES_MILLISECS, desiredTimeBetweenFixesMilliSeconds)) - 1; - if (numReportMissed > 0) { - for (int i = 0; i < numReportMissed; i++) { - locationFailureStatistics.addItem(1.0); - } + + /** + * Logs the status of a location report received from the HAL + */ + public void logReceivedLocationStatus(boolean isSuccessful) { + if (!isSuccessful) { + mLocationFailureStatistics.addItem(1.0); + return; + } + mLocationFailureStatistics.addItem(0.0); } - return; - } - - /** - * Logs time to first fix - * - * @param timeToFirstFixMilliSeconds - */ - public void logTimeToFirstFixMilliSecs(int timeToFirstFixMilliSeconds) { - timeToFirstFixSecStatistics.addItem((double) (timeToFirstFixMilliSeconds/1000)); - return; - } - - /** - * Logs position accuracy - * - * @param positionAccuracyMeters - */ - public void logPositionAccuracyMeters(float positionAccuracyMeters) { - positionAccuracyMeterStatistics.addItem((double) positionAccuracyMeters); - return; - } - - /* - * Logs CN0 when at least 4 SVs are available - * - */ - public void logCn0(float[] cn0s, int numSv) { - if (numSv == 0 || cn0s == null || cn0s.length == 0 || cn0s.length < numSv) { - if (numSv == 0) { - mGnssPowerMetrics.reportSignalQuality(null, 0); - } - return; + + /** + * Logs missed reports + */ + public void logMissedReports(int desiredTimeBetweenFixesMilliSeconds, + int actualTimeBetweenFixesMilliSeconds) { + int numReportMissed = (actualTimeBetweenFixesMilliSeconds / Math.max( + DEFAULT_TIME_BETWEEN_FIXES_MILLISECS, desiredTimeBetweenFixesMilliSeconds)) - 1; + if (numReportMissed > 0) { + for (int i = 0; i < numReportMissed; i++) { + mLocationFailureStatistics.addItem(1.0); + } + } } - float[] cn0Array = Arrays.copyOf(cn0s, numSv); - Arrays.sort(cn0Array); - mGnssPowerMetrics.reportSignalQuality(cn0Array, numSv); - if (numSv < 4) { - return; + + /** + * Logs time to first fix + */ + public void logTimeToFirstFixMilliSecs(int timeToFirstFixMilliSeconds) { + mTimeToFirstFixSecStatistics.addItem((double) (timeToFirstFixMilliSeconds / 1000)); } - if (cn0Array[numSv - 4] > 0.0) { - double top4AvgCn0 = 0.0; - for (int i = numSv - 4; i < numSv; i++) { - top4AvgCn0 += (double) cn0Array[i]; - } - top4AvgCn0 /= 4; - topFourAverageCn0Statistics.addItem(top4AvgCn0); + + /** + * Logs position accuracy + */ + public void logPositionAccuracyMeters(float positionAccuracyMeters) { + mPositionAccuracyMeterStatistics.addItem((double) positionAccuracyMeters); } - return; - } + /** + * Logs CN0 when at least 4 SVs are available + */ + public void logCn0(float[] cn0s, int numSv) { + if (numSv == 0 || cn0s == null || cn0s.length == 0 || cn0s.length < numSv) { + if (numSv == 0) { + mGnssPowerMetrics.reportSignalQuality(null, 0); + } + return; + } + float[] cn0Array = Arrays.copyOf(cn0s, numSv); + Arrays.sort(cn0Array); + mGnssPowerMetrics.reportSignalQuality(cn0Array, numSv); + if (numSv < 4) { + return; + } + if (cn0Array[numSv - 4] > 0.0) { + double top4AvgCn0 = 0.0; + for (int i = numSv - 4; i < numSv; i++) { + top4AvgCn0 += (double) cn0Array[i]; + } + top4AvgCn0 /= 4; + mTopFourAverageCn0Statistics.addItem(top4AvgCn0); + } + } /** * Logs that a constellation type has been observed. @@ -173,82 +162,82 @@ public class GnssMetrics { mConstellationTypes[constellationType] = true; } - /** - * Dumps GNSS metrics as a proto string - * @return - */ - public String dumpGnssMetricsAsProtoString() { - GnssLog msg = new GnssLog(); - if (locationFailureStatistics.getCount() > 0) { - msg.numLocationReportProcessed = locationFailureStatistics.getCount(); - msg.percentageLocationFailure = (int) (100.0 * locationFailureStatistics.getMean()); - } - if (timeToFirstFixSecStatistics.getCount() > 0) { - msg.numTimeToFirstFixProcessed = timeToFirstFixSecStatistics.getCount(); - msg.meanTimeToFirstFixSecs = (int) timeToFirstFixSecStatistics.getMean(); - msg.standardDeviationTimeToFirstFixSecs - = (int) timeToFirstFixSecStatistics.getStandardDeviation(); - } - if (positionAccuracyMeterStatistics.getCount() > 0) { - msg.numPositionAccuracyProcessed = positionAccuracyMeterStatistics.getCount(); - msg.meanPositionAccuracyMeters = (int) positionAccuracyMeterStatistics.getMean(); - msg.standardDeviationPositionAccuracyMeters - = (int) positionAccuracyMeterStatistics.getStandardDeviation(); - } - if (topFourAverageCn0Statistics.getCount() > 0) { - msg.numTopFourAverageCn0Processed = topFourAverageCn0Statistics.getCount(); - msg.meanTopFourAverageCn0DbHz = topFourAverageCn0Statistics.getMean(); - msg.standardDeviationTopFourAverageCn0DbHz - = topFourAverageCn0Statistics.getStandardDeviation(); - } - msg.powerMetrics = mGnssPowerMetrics.buildProto(); - msg.hardwareRevision = SystemProperties.get("ro.boot.revision", ""); - String s = Base64.encodeToString(GnssLog.toByteArray(msg), Base64.DEFAULT); - reset(); - return s; - } - - /** - * Dumps GNSS Metrics as text - * - * @return GNSS Metrics - */ - public String dumpGnssMetricsAsText() { - StringBuilder s = new StringBuilder(); - s.append("GNSS_KPI_START").append('\n'); - s.append(" KPI logging start time: ").append(logStartInElapsedRealTime).append("\n"); - s.append(" KPI logging end time: "); - TimeUtils.formatDuration(SystemClock.elapsedRealtimeNanos() / 1000000L, s); - s.append("\n"); - s.append(" Number of location reports: ").append( - locationFailureStatistics.getCount()).append("\n"); - if (locationFailureStatistics.getCount() > 0) { - s.append(" Percentage location failure: ").append( - 100.0 * locationFailureStatistics.getMean()).append("\n"); - } - s.append(" Number of TTFF reports: ").append( - timeToFirstFixSecStatistics.getCount()).append("\n"); - if (timeToFirstFixSecStatistics.getCount() > 0) { - s.append(" TTFF mean (sec): ").append(timeToFirstFixSecStatistics.getMean()).append("\n"); - s.append(" TTFF standard deviation (sec): ").append( - timeToFirstFixSecStatistics.getStandardDeviation()).append("\n"); - } - s.append(" Number of position accuracy reports: ").append( - positionAccuracyMeterStatistics.getCount()).append("\n"); - if (positionAccuracyMeterStatistics.getCount() > 0) { - s.append(" Position accuracy mean (m): ").append( - positionAccuracyMeterStatistics.getMean()).append("\n"); - s.append(" Position accuracy standard deviation (m): ").append( - positionAccuracyMeterStatistics.getStandardDeviation()).append("\n"); - } - s.append(" Number of CN0 reports: ").append( - topFourAverageCn0Statistics.getCount()).append("\n"); - if (topFourAverageCn0Statistics.getCount() > 0) { - s.append(" Top 4 Avg CN0 mean (dB-Hz): ").append( - topFourAverageCn0Statistics.getMean()).append("\n"); - s.append(" Top 4 Avg CN0 standard deviation (dB-Hz): ").append( - topFourAverageCn0Statistics.getStandardDeviation()).append("\n"); + /** + * Dumps GNSS metrics as a proto string + */ + public String dumpGnssMetricsAsProtoString() { + GnssLog msg = new GnssLog(); + if (mLocationFailureStatistics.getCount() > 0) { + msg.numLocationReportProcessed = mLocationFailureStatistics.getCount(); + msg.percentageLocationFailure = (int) (100.0 * mLocationFailureStatistics.getMean()); + } + if (mTimeToFirstFixSecStatistics.getCount() > 0) { + msg.numTimeToFirstFixProcessed = mTimeToFirstFixSecStatistics.getCount(); + msg.meanTimeToFirstFixSecs = (int) mTimeToFirstFixSecStatistics.getMean(); + msg.standardDeviationTimeToFirstFixSecs = + (int) mTimeToFirstFixSecStatistics.getStandardDeviation(); + } + if (mPositionAccuracyMeterStatistics.getCount() > 0) { + msg.numPositionAccuracyProcessed = mPositionAccuracyMeterStatistics.getCount(); + msg.meanPositionAccuracyMeters = (int) mPositionAccuracyMeterStatistics.getMean(); + msg.standardDeviationPositionAccuracyMeters = + (int) mPositionAccuracyMeterStatistics.getStandardDeviation(); + } + if (mTopFourAverageCn0Statistics.getCount() > 0) { + msg.numTopFourAverageCn0Processed = mTopFourAverageCn0Statistics.getCount(); + msg.meanTopFourAverageCn0DbHz = mTopFourAverageCn0Statistics.getMean(); + msg.standardDeviationTopFourAverageCn0DbHz = + mTopFourAverageCn0Statistics.getStandardDeviation(); + } + msg.powerMetrics = mGnssPowerMetrics.buildProto(); + msg.hardwareRevision = SystemProperties.get("ro.boot.revision", ""); + String s = Base64.encodeToString(GnssLog.toByteArray(msg), Base64.DEFAULT); + reset(); + return s; } + + /** + * Dumps GNSS Metrics as text + * + * @return GNSS Metrics + */ + public String dumpGnssMetricsAsText() { + StringBuilder s = new StringBuilder(); + s.append("GNSS_KPI_START").append('\n'); + s.append(" KPI logging start time: ").append(mLogStartInElapsedRealTime).append("\n"); + s.append(" KPI logging end time: "); + TimeUtils.formatDuration(SystemClock.elapsedRealtimeNanos() / 1000000L, s); + s.append("\n"); + s.append(" Number of location reports: ").append( + mLocationFailureStatistics.getCount()).append("\n"); + if (mLocationFailureStatistics.getCount() > 0) { + s.append(" Percentage location failure: ").append( + 100.0 * mLocationFailureStatistics.getMean()).append("\n"); + } + s.append(" Number of TTFF reports: ").append( + mTimeToFirstFixSecStatistics.getCount()).append("\n"); + if (mTimeToFirstFixSecStatistics.getCount() > 0) { + s.append(" TTFF mean (sec): ").append(mTimeToFirstFixSecStatistics.getMean()).append( + "\n"); + s.append(" TTFF standard deviation (sec): ").append( + mTimeToFirstFixSecStatistics.getStandardDeviation()).append("\n"); + } + s.append(" Number of position accuracy reports: ").append( + mPositionAccuracyMeterStatistics.getCount()).append("\n"); + if (mPositionAccuracyMeterStatistics.getCount() > 0) { + s.append(" Position accuracy mean (m): ").append( + mPositionAccuracyMeterStatistics.getMean()).append("\n"); + s.append(" Position accuracy standard deviation (m): ").append( + mPositionAccuracyMeterStatistics.getStandardDeviation()).append("\n"); + } + s.append(" Number of CN0 reports: ").append( + mTopFourAverageCn0Statistics.getCount()).append("\n"); + if (mTopFourAverageCn0Statistics.getCount() > 0) { + s.append(" Top 4 Avg CN0 mean (dB-Hz): ").append( + mTopFourAverageCn0Statistics.getMean()).append("\n"); + s.append(" Top 4 Avg CN0 standard deviation (dB-Hz): ").append( + mTopFourAverageCn0Statistics.getStandardDeviation()).append("\n"); + } s.append(" Used-in-fix constellation types: "); for (int i = 0; i < mConstellationTypes.length; i++) { if (mConstellationTypes[i]) { @@ -256,199 +245,193 @@ public class GnssMetrics { } } s.append("\n"); - s.append("GNSS_KPI_END").append("\n"); - GpsBatteryStats stats = mGnssPowerMetrics.getGpsBatteryStats(); - if (stats != null) { - s.append("Power Metrics").append("\n"); - s.append(" Time on battery (min): " - + stats.getLoggingDurationMs() / ((double) DateUtils.MINUTE_IN_MILLIS)).append("\n"); - long[] t = stats.getTimeInGpsSignalQualityLevel(); - if (t != null && t.length == NUM_GPS_SIGNAL_QUALITY_LEVELS) { - s.append(" Amount of time (while on battery) Top 4 Avg CN0 > " + - Double.toString(GnssPowerMetrics.POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ) + - " dB-Hz (min): ").append(t[1] / ((double) DateUtils.MINUTE_IN_MILLIS)).append("\n"); - s.append(" Amount of time (while on battery) Top 4 Avg CN0 <= " + - Double.toString(GnssPowerMetrics.POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ) + - " dB-Hz (min): ").append(t[0] / ((double) DateUtils.MINUTE_IN_MILLIS)).append("\n"); - } - s.append(" Energy consumed while on battery (mAh): ").append( - stats.getEnergyConsumedMaMs() / ((double) DateUtils.HOUR_IN_MILLIS)).append("\n"); - } - s.append("Hardware Version: " + SystemProperties.get("ro.boot.revision", "")).append("\n"); - return s.toString(); - } - - /** Class for storing statistics */ - private class Statistics { - - /** Resets statistics */ - public void reset() { - count = 0; - sum = 0.0; - sumSquare = 0.0; + s.append("GNSS_KPI_END").append("\n"); + GpsBatteryStats stats = mGnssPowerMetrics.getGpsBatteryStats(); + if (stats != null) { + s.append("Power Metrics").append("\n"); + s.append(" Time on battery (min): ").append( + stats.getLoggingDurationMs() / ((double) DateUtils.MINUTE_IN_MILLIS)).append( + "\n"); + long[] t = stats.getTimeInGpsSignalQualityLevel(); + if (t != null && t.length == NUM_GPS_SIGNAL_QUALITY_LEVELS) { + s.append(" Amount of time (while on battery) Top 4 Avg CN0 > " + + GnssPowerMetrics.POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ + + " dB-Hz (min): ").append( + t[1] / ((double) DateUtils.MINUTE_IN_MILLIS)).append("\n"); + s.append(" Amount of time (while on battery) Top 4 Avg CN0 <= " + + GnssPowerMetrics.POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ + + " dB-Hz (min): ").append( + t[0] / ((double) DateUtils.MINUTE_IN_MILLIS)).append("\n"); + } + s.append(" Energy consumed while on battery (mAh): ").append( + stats.getEnergyConsumedMaMs() / ((double) DateUtils.HOUR_IN_MILLIS)).append( + "\n"); + } + s.append("Hardware Version: ").append(SystemProperties.get("ro.boot.revision", "")).append( + "\n"); + return s.toString(); } - /** Adds an item */ - public void addItem(double item) { - count++; - sum += item; - sumSquare += item * item; + private void reset() { + StringBuilder s = new StringBuilder(); + TimeUtils.formatDuration(SystemClock.elapsedRealtimeNanos() / 1000000L, s); + mLogStartInElapsedRealTime = s.toString(); + mLocationFailureStatistics.reset(); + mTimeToFirstFixSecStatistics.reset(); + mPositionAccuracyMeterStatistics.reset(); + mTopFourAverageCn0Statistics.reset(); + resetConstellationTypes(); } - /** Returns number of items added */ - public int getCount() { - return count; + /** Resets {@link #mConstellationTypes} as an all-false boolean array. */ + public void resetConstellationTypes() { + mConstellationTypes = new boolean[GnssStatus.CONSTELLATION_COUNT]; } - /** Returns mean */ - public double getMean() { - return sum/count; - } + /** Class for storing statistics */ + private class Statistics { - /** Returns standard deviation */ - public double getStandardDeviation() { - double m = sum/count; - m = m * m; - double v = sumSquare/count; - if (v > m) { - return Math.sqrt(v - m); - } - return 0; - } + private int mCount; + private double mSum; + private double mSumSquare; - private int count; - private double sum; - private double sumSquare; - } - - /** Location failure statistics */ - private Statistics locationFailureStatistics; - - /** Time to first fix statistics */ - private Statistics timeToFirstFixSecStatistics; - - /** Position accuracy statistics */ - private Statistics positionAccuracyMeterStatistics; - - /** Top 4 average CN0 statistics */ - private Statistics topFourAverageCn0Statistics; - - /** - * Resets GNSS metrics - */ - private void reset() { - StringBuilder s = new StringBuilder(); - TimeUtils.formatDuration(SystemClock.elapsedRealtimeNanos() / 1000000L, s); - logStartInElapsedRealTime = s.toString(); - locationFailureStatistics.reset(); - timeToFirstFixSecStatistics.reset(); - positionAccuracyMeterStatistics.reset(); - topFourAverageCn0Statistics.reset(); - resetConstellationTypes(); - return; - } + /** Resets statistics */ + public void reset() { + mCount = 0; + mSum = 0.0; + mSumSquare = 0.0; + } - /** Resets {@link #mConstellationTypes} as an all-false boolean array. */ - public void resetConstellationTypes() { - mConstellationTypes = new boolean[GnssStatus.CONSTELLATION_COUNT]; + /** Adds an item */ + public void addItem(double item) { + mCount++; + mSum += item; + mSumSquare += item * item; + } + + /** Returns number of items added */ + public int getCount() { + return mCount; + } + + /** Returns mean */ + public double getMean() { + return mSum / mCount; + } + + /** Returns standard deviation */ + public double getStandardDeviation() { + double m = mSum / mCount; + m = m * m; + double v = mSumSquare / mCount; + if (v > m) { + return Math.sqrt(v - m); + } + return 0; + } } - /* Class for handling GNSS power related metrics */ - private class GnssPowerMetrics { + /* Class for handling GNSS power related metrics */ + private class GnssPowerMetrics { - /* Threshold for Top Four Average CN0 below which GNSS signal quality is declared poor */ - public static final double POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ = 20.0; + /* Threshold for Top Four Average CN0 below which GNSS signal quality is declared poor */ + public static final double POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ = 20.0; - /* Minimum change in Top Four Average CN0 needed to trigger a report */ - private static final double REPORTING_THRESHOLD_DB_HZ = 1.0; + /* Minimum change in Top Four Average CN0 needed to trigger a report */ + private static final double REPORTING_THRESHOLD_DB_HZ = 1.0; - /* BatteryStats API */ - private final IBatteryStats mBatteryStats; + /* BatteryStats API */ + private final IBatteryStats mBatteryStats; - /* Last reported Top Four Average CN0 */ - private double mLastAverageCn0; + /* Last reported Top Four Average CN0 */ + private double mLastAverageCn0; - /* Last reported signal quality bin (based on Top Four Average CN0) */ - private int mLastSignalLevel; + /* Last reported signal quality bin (based on Top Four Average CN0) */ + private int mLastSignalLevel; - public GnssPowerMetrics(IBatteryStats stats) { - mBatteryStats = stats; - // Used to initialize the variable to a very small value (unachievable in practice) so that - // the first CNO report will trigger an update to BatteryStats - mLastAverageCn0 = -100.0; - mLastSignalLevel = GPS_SIGNAL_QUALITY_UNKNOWN; - } + private GnssPowerMetrics(IBatteryStats stats) { + mBatteryStats = stats; + // Used to initialize the variable to a very small value (unachievable in practice) + // so that + // the first CNO report will trigger an update to BatteryStats + mLastAverageCn0 = -100.0; + mLastSignalLevel = GPS_SIGNAL_QUALITY_UNKNOWN; + } - /** - * Builds power metrics proto buf. This is included in the gnss proto buf. - * @return PowerMetrics - */ - public PowerMetrics buildProto() { - PowerMetrics p = new PowerMetrics(); - GpsBatteryStats stats = mGnssPowerMetrics.getGpsBatteryStats(); - if (stats != null) { - p.loggingDurationMs = stats.getLoggingDurationMs(); - p.energyConsumedMah = stats.getEnergyConsumedMaMs() / ((double) DateUtils.HOUR_IN_MILLIS); - long[] t = stats.getTimeInGpsSignalQualityLevel(); - p.timeInSignalQualityLevelMs = new long[t.length]; - for (int i = 0; i < t.length; i++) { - p.timeInSignalQualityLevelMs[i] = t[i]; + /** + * Builds power metrics proto buf. This is included in the gnss proto buf. + * + * @return PowerMetrics + */ + public PowerMetrics buildProto() { + PowerMetrics p = new PowerMetrics(); + GpsBatteryStats stats = mGnssPowerMetrics.getGpsBatteryStats(); + if (stats != null) { + p.loggingDurationMs = stats.getLoggingDurationMs(); + p.energyConsumedMah = + stats.getEnergyConsumedMaMs() / ((double) DateUtils.HOUR_IN_MILLIS); + long[] t = stats.getTimeInGpsSignalQualityLevel(); + p.timeInSignalQualityLevelMs = new long[t.length]; + for (int i = 0; i < t.length; i++) { + p.timeInSignalQualityLevelMs[i] = t[i]; + } + } + return p; } - } - return p; - } - /** - * Returns the GPS power stats - * @return GpsBatteryStats - */ - public GpsBatteryStats getGpsBatteryStats() { - try { - return mBatteryStats.getGpsBatteryStats(); - } catch (Exception e) { - Log.w(TAG, "Exception", e); - return null; - } - } + /** + * Returns the GPS power stats + * + * @return GpsBatteryStats + */ + public GpsBatteryStats getGpsBatteryStats() { + try { + return mBatteryStats.getGpsBatteryStats(); + } catch (Exception e) { + Log.w(TAG, "Exception", e); + return null; + } + } - /** - * Reports signal quality to BatteryStats. Signal quality is based on Top four average CN0. If - * the number of SVs seen is less than 4, then signal quality is the average CN0. - * Changes are reported only if the average CN0 changes by more than REPORTING_THRESHOLD_DB_HZ. - */ - public void reportSignalQuality(float[] ascendingCN0Array, int numSv) { - double avgCn0 = 0.0; - if (numSv > 0) { - for (int i = Math.max(0, numSv - 4); i < numSv; i++) { - avgCn0 += (double) ascendingCN0Array[i]; + /** + * Reports signal quality to BatteryStats. Signal quality is based on Top four average CN0. + * If + * the number of SVs seen is less than 4, then signal quality is the average CN0. + * Changes are reported only if the average CN0 changes by more than + * REPORTING_THRESHOLD_DB_HZ. + */ + public void reportSignalQuality(float[] ascendingCN0Array, int numSv) { + double avgCn0 = 0.0; + if (numSv > 0) { + for (int i = Math.max(0, numSv - 4); i < numSv; i++) { + avgCn0 += (double) ascendingCN0Array[i]; + } + avgCn0 /= Math.min(numSv, 4); + } + if (Math.abs(avgCn0 - mLastAverageCn0) < REPORTING_THRESHOLD_DB_HZ) { + return; + } + int signalLevel = getSignalLevel(avgCn0); + if (signalLevel != mLastSignalLevel) { + StatsLog.write(StatsLog.GPS_SIGNAL_QUALITY_CHANGED, signalLevel); + mLastSignalLevel = signalLevel; + } + try { + mBatteryStats.noteGpsSignalQuality(signalLevel); + mLastAverageCn0 = avgCn0; + } catch (Exception e) { + Log.w(TAG, "Exception", e); + } } - avgCn0 /= Math.min(numSv, 4); - } - if (Math.abs(avgCn0 - mLastAverageCn0) < REPORTING_THRESHOLD_DB_HZ) { - return; - } - int signalLevel = getSignalLevel(avgCn0); - if (signalLevel != mLastSignalLevel) { - StatsLog.write(StatsLog.GPS_SIGNAL_QUALITY_CHANGED, signalLevel); - mLastSignalLevel = signalLevel; - } - try { - mBatteryStats.noteGpsSignalQuality(signalLevel); - mLastAverageCn0 = avgCn0; - } catch (Exception e) { - Log.w(TAG, "Exception", e); - } - return; - } - /** - * Obtains signal level based on CN0 - */ - private int getSignalLevel(double cn0) { - if (cn0 > POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ) { - return GnssMetrics.GPS_SIGNAL_QUALITY_GOOD; - } - return GnssMetrics.GPS_SIGNAL_QUALITY_POOR; + /** + * Obtains signal level based on CN0 + */ + private int getSignalLevel(double cn0) { + if (cn0 > POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ) { + return GnssMetrics.GPS_SIGNAL_QUALITY_GOOD; + } + return GnssMetrics.GPS_SIGNAL_QUALITY_POOR; + } } - } } diff --git a/media/java/android/media/IMediaRoute2Provider.aidl b/media/java/android/media/IMediaRoute2Provider.aidl index 4bd57106febe..f132cefbfdc7 100644 --- a/media/java/android/media/IMediaRoute2Provider.aidl +++ b/media/java/android/media/IMediaRoute2Provider.aidl @@ -23,7 +23,8 @@ import android.media.IMediaRoute2ProviderClient; * {@hide} */ oneway interface IMediaRoute2Provider { - void registerClient(IMediaRoute2ProviderClient client); - void selectRoute(IMediaRoute2ProviderClient client, int uid, String id); - void notifyControlRequestSent(IMediaRoute2ProviderClient client, String id, in Intent request); + void setClient(IMediaRoute2ProviderClient client); + void selectRoute(String packageName, String id); + void unselectRoute(String packageName, String id); + void notifyControlRequestSent(String id, in Intent request); } diff --git a/media/java/android/media/IMediaRoute2ProviderClient.aidl b/media/java/android/media/IMediaRoute2ProviderClient.aidl index e849e190e8b8..8d08beb4a72c 100644 --- a/media/java/android/media/IMediaRoute2ProviderClient.aidl +++ b/media/java/android/media/IMediaRoute2ProviderClient.aidl @@ -22,6 +22,5 @@ import android.media.MediaRoute2ProviderInfo; * @hide */ oneway interface IMediaRoute2ProviderClient { - void notifyRouteSelected(int uid, String routeId); void notifyProviderInfoUpdated(in MediaRoute2ProviderInfo info); } diff --git a/media/java/android/media/IMediaRouter2Manager.aidl b/media/java/android/media/IMediaRouter2Manager.aidl index b8c00a335d13..b059bd3cec91 100644 --- a/media/java/android/media/IMediaRouter2Manager.aidl +++ b/media/java/android/media/IMediaRouter2Manager.aidl @@ -23,7 +23,7 @@ import android.media.MediaRoute2Info; * {@hide} */ oneway interface IMediaRouter2Manager { - void notifyRouteSelected(int uid, in MediaRoute2Info route); - void notifyControlCategoriesChanged(int uid, in List<String> categories); + void notifyRouteSelected(String packageName, in MediaRoute2Info route); + void notifyControlCategoriesChanged(String packageName, in List<String> categories); void notifyProviderInfosUpdated(in List<MediaRoute2ProviderInfo> providers); } diff --git a/media/java/android/media/IMediaRouterService.aidl b/media/java/android/media/IMediaRouterService.aidl index fb108b4a85ec..08266a5a2051 100644 --- a/media/java/android/media/IMediaRouterService.aidl +++ b/media/java/android/media/IMediaRouterService.aidl @@ -48,8 +48,8 @@ interface IMediaRouterService { /** * Changes the selected route of the client. * - * @param client Client to change it's selected route. - * @param route Route to be selected. + * @param client the client that changes it's selected route + * @param route the route to be selected */ void selectRoute2(IMediaRouter2Client client, in @nullable MediaRoute2Info route); void setControlCategories(IMediaRouter2Client client, in List<String> categories); @@ -60,10 +60,10 @@ interface IMediaRouterService { /** * Changes the selected route of an application. * - * @param manager Manager that calls the method - * @param uid UID of the client that will change the selected route. - * @param route Route to be selected. + * @param manager the manager that calls the method + * @param packageName the package name of the client that will change the selected route + * @param route the route to be selected */ - void selectClientRoute2(IMediaRouter2Manager manager, int clientUid, + void selectClientRoute2(IMediaRouter2Manager manager, String packageName, in @nullable MediaRoute2Info route); } diff --git a/media/java/android/media/MediaRoute2Info.java b/media/java/android/media/MediaRoute2Info.java index 855cd77f019e..f13a64c1520b 100644 --- a/media/java/android/media/MediaRoute2Info.java +++ b/media/java/android/media/MediaRoute2Info.java @@ -52,6 +52,8 @@ public final class MediaRoute2Info implements Parcelable { @Nullable final String mDescription; @Nullable + final String mClientPackageName; + @Nullable final Bundle mExtras; MediaRoute2Info(@NonNull Builder builder) { @@ -59,6 +61,7 @@ public final class MediaRoute2Info implements Parcelable { mProviderId = builder.mProviderId; mName = builder.mName; mDescription = builder.mDescription; + mClientPackageName = builder.mClientPackageName; mExtras = builder.mExtras; } @@ -67,6 +70,7 @@ public final class MediaRoute2Info implements Parcelable { mProviderId = in.readString(); mName = in.readString(); mDescription = in.readString(); + mClientPackageName = in.readString(); mExtras = in.readBundle(); } @@ -98,6 +102,7 @@ public final class MediaRoute2Info implements Parcelable { && Objects.equals(mProviderId, other.mProviderId) && Objects.equals(mName, other.mName) && Objects.equals(mDescription, other.mDescription) + && Objects.equals(mClientPackageName, other.mClientPackageName) //TODO: This will be evaluated as false in most cases. Try not to. && Objects.equals(mExtras, other.mExtras); } @@ -131,6 +136,16 @@ public final class MediaRoute2Info implements Parcelable { return mDescription; } + /** + * Gets the package name of the client that uses the route. + * Returns null if no clients use this. + * @hide + */ + @Nullable + public String getClientPackageName() { + return mClientPackageName; + } + @Nullable public Bundle getExtras() { return mExtras; @@ -147,6 +162,7 @@ public final class MediaRoute2Info implements Parcelable { dest.writeString(mProviderId); dest.writeString(mName); dest.writeString(mDescription); + dest.writeString(mClientPackageName); dest.writeBundle(mExtras); } @@ -170,6 +186,7 @@ public final class MediaRoute2Info implements Parcelable { String mProviderId; String mName; String mDescription; + String mClientPackageName; Bundle mExtras; public Builder(@NonNull String id, @NonNull String name) { @@ -194,6 +211,7 @@ public final class MediaRoute2Info implements Parcelable { } setName(routeInfo.mName); mDescription = routeInfo.mDescription; + setClientPackageName(routeInfo.mClientPackageName); if (routeInfo.mExtras != null) { mExtras = new Bundle(routeInfo.mExtras); } @@ -246,6 +264,15 @@ public final class MediaRoute2Info implements Parcelable { } /** + * Sets the package name of the app using the route. + */ + @NonNull + public Builder setClientPackageName(@Nullable String packageName) { + mClientPackageName = packageName; + return this; + } + + /** * Sets a bundle of extras for the route. */ @NonNull diff --git a/media/java/android/media/MediaRoute2ProviderService.java b/media/java/android/media/MediaRoute2ProviderService.java index 30e0ef1fc182..b89b0b1a5f02 100644 --- a/media/java/android/media/MediaRoute2ProviderService.java +++ b/media/java/android/media/MediaRoute2ProviderService.java @@ -36,7 +36,6 @@ public abstract class MediaRoute2ProviderService extends Service { private final Handler mHandler; private ProviderStub mStub; - //TODO: Should allow multiple clients private IMediaRoute2ProviderClient mClient; private MediaRoute2ProviderInfo mProviderInfo; @@ -46,6 +45,7 @@ public abstract class MediaRoute2ProviderService extends Service { @Override public IBinder onBind(Intent intent) { + //TODO: Allow binding from media router service only? if (SERVICE_INTERFACE.equals(intent.getAction())) { if (mStub == null) { mStub = new ProviderStub(); @@ -58,49 +58,37 @@ public abstract class MediaRoute2ProviderService extends Service { /** * Called when selectRoute is called on a route of the provider. * - * @param uid The target application uid - * @param routeId The id of the target route + * @param packageName the package name of the application that selected the route + * @param routeId the id of the route being selected */ - public abstract void onSelect(int uid, String routeId); + public abstract void onSelectRoute(String packageName, String routeId); /** - * Called when sendControlRequest is called on a route of the provider. + * Called when unselectRoute is called on a route of the provider. * - * @param routeId The id of the target route - * @param request The media control request intent + * @param packageName the package name of the application that has selected the route. + * @param routeId the id of the route being unselected */ - //TODO: Discuss what to use for request (e.g., Intent? Request class?) - public abstract void onControlRequest(String routeId, Intent request); + public abstract void onUnselectRoute(String packageName, String routeId); /** - * Updates provider info from selected route and application. - * - * TODO: When provider descriptor is defined, this should update the descriptor correctly. + * Called when sendControlRequest is called on a route of the provider * - * @param uid - * @param routeId + * @param routeId the id of the target route + * @param request the media control request intent */ - public void updateProvider(int uid, String routeId) { - if (mClient != null) { - try { - //TODO: After publishState() is fully implemented, delete this. - mClient.notifyRouteSelected(uid, routeId); - } catch (RemoteException ex) { - Log.d(TAG, "Failed to update provider"); - } - } - publishState(); - } + //TODO: Discuss what to use for request (e.g., Intent? Request class?) + public abstract void onControlRequest(String routeId, Intent request); /** - * Updates provider info and publish routes + * Updates provider info and publishes routes */ public final void setProviderInfo(MediaRoute2ProviderInfo info) { mProviderInfo = info; publishState(); } - void registerClient(IMediaRoute2ProviderClient client) { + void setClient(IMediaRoute2ProviderClient client) { mClient = client; publishState(); } @@ -120,20 +108,25 @@ public abstract class MediaRoute2ProviderService extends Service { ProviderStub() { } @Override - public void registerClient(IMediaRoute2ProviderClient client) { - mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::registerClient, + public void setClient(IMediaRoute2ProviderClient client) { + mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::setClient, MediaRoute2ProviderService.this, client)); } @Override - public void selectRoute(IMediaRoute2ProviderClient client, int uid, String id) { - mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onSelect, - MediaRoute2ProviderService.this, uid, id)); + public void selectRoute(String packageName, String id) { + mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onSelectRoute, + MediaRoute2ProviderService.this, packageName, id)); + } + + @Override + public void unselectRoute(String packageName, String id) { + mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onUnselectRoute, + MediaRoute2ProviderService.this, packageName, id)); } @Override - public void notifyControlRequestSent(IMediaRoute2ProviderClient client, String id, - Intent request) { + public void notifyControlRequestSent(String id, Intent request) { mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onControlRequest, MediaRoute2ProviderService.this, id, request)); } diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java index 2d7dc56339e1..5fc37a579d92 100644 --- a/media/java/android/media/MediaRouter2Manager.java +++ b/media/java/android/media/MediaRouter2Manager.java @@ -38,6 +38,7 @@ import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Executor; /** @@ -58,11 +59,13 @@ public class MediaRouter2Manager { final Handler mHandler; @GuardedBy("sLock") - final ArrayList<CallbackRecord> mCallbacks = new ArrayList<>(); + final List<CallbackRecord> mCallbacks = new CopyOnWriteArrayList<>(); @SuppressWarnings("WeakerAccess") /* synthetic access */ @NonNull List<MediaRoute2ProviderInfo> mProviders = Collections.emptyList(); + @NonNull + List<MediaRoute2Info> mRoutes = Collections.emptyList(); /** * Gets an instance of media router manager that controls media route of other applications. @@ -158,15 +161,26 @@ public class MediaRouter2Manager { } /** - * Selects media route for the specified application uid. + * Gets available routes for an application. + * + * @param packageName the package name of the application + */ + @NonNull + public List<MediaRoute2Info> getAvailableRoutes(@NonNull String packageName) { + //TODO: filter irrelevant routes. + return Collections.unmodifiableList(mRoutes); + } + + /** + * Selects media route for the specified package name. * - * @param uid The uid of the application that should change it's media route. - * @param route The route to select + * @param packageName the package name of the application that should change it's media route + * @param route the route to be selected */ - public void selectRoute(int uid, MediaRoute2Info route) { + public void selectRoute(@NonNull String packageName, @NonNull MediaRoute2Info route) { if (mClient != null) { try { - mMediaRouterService.selectClientRoute2(mClient, uid, route); + mMediaRouterService.selectClientRoute2(mClient, packageName, route); } catch (RemoteException ex) { Log.e(TAG, "Unable to select media route", ex); } @@ -174,14 +188,14 @@ public class MediaRouter2Manager { } /** - * Unselects media route for the specified application uid. + * Unselects media route for the specified package name. * - * @param uid The uid of the application that should stop routing. + * @param packageName the package name of the application that should stop routing */ - public void unselectRoute(int uid) { + public void unselectRoute(@NonNull String packageName) { if (mClient != null) { try { - mMediaRouterService.selectClientRoute2(mClient, uid, null); + mMediaRouterService.selectClientRoute2(mClient, packageName, null); } catch (RemoteException ex) { Log.e(TAG, "Unable to select media route", ex); } @@ -260,31 +274,46 @@ public class MediaRouter2Manager { } } + void notifyRouteListChanged() { + for (CallbackRecord record: mCallbacks) { + record.mExecutor.execute( + () -> record.mCallback.onRouteListChanged(mRoutes)); + } + } + void notifyProviderInfosUpdated(List<MediaRoute2ProviderInfo> providers) { if (providers == null) { Log.w(TAG, "Providers info is null."); return; } + ArrayList<MediaRoute2Info> routes = new ArrayList<>(); + for (MediaRoute2ProviderInfo provider : providers) { updateProvider(provider); + //TODO: Should we do this in updateProvider()? + routes.addAll(provider.getRoutes()); } //TODO: Call notifyRouteRemoved for the routes of the removed providers. - //TODO: Filter invalid providers. + //TODO: Filter invalid providers and invalid routes. mProviders = providers; + mRoutes = routes; + + //TODO: Call this when only the list is modified. + notifyRouteListChanged(); } - void notifyRouteSelected(int uid, MediaRoute2Info route) { + void notifyRouteSelected(String packageName, MediaRoute2Info route) { for (CallbackRecord record : mCallbacks) { - record.mExecutor.execute(() -> record.mCallback.onRouteSelected(uid, route)); + record.mExecutor.execute(() -> record.mCallback.onRouteSelected(packageName, route)); } } - void notifyControlCategoriesChanged(int uid, List<String> categories) { + void notifyControlCategoriesChanged(String packageName, List<String> categories) { for (CallbackRecord record : mCallbacks) { record.mExecutor.execute( - () -> record.mCallback.onControlCategoriesChanged(uid, categories)); + () -> record.mCallback.onControlCategoriesChanged(packageName, categories)); } } @@ -309,17 +338,27 @@ public class MediaRouter2Manager { /** * Called when a route is selected for an application. - * @param uid uid of the application - * @param route selected route of the application. + * + * @param packageName the package name of the application + * @param route the selected route of the application. + * It is null if the application has no selected route. */ - public void onRouteSelected(int uid, @Nullable MediaRoute2Info route) {} + public void onRouteSelected(@NonNull String packageName, @Nullable MediaRoute2Info route) {} /** * Called when the control categories of an application is changed. - * @param uid the uid of the app that changed control categories + * + * @param packageName the package name of the app that changed control categories * @param categories the changed categories */ - public void onControlCategoriesChanged(int uid, @NonNull List<String> categories) {} + public void onControlCategoriesChanged(@NonNull String packageName, + @NonNull List<String> categories) {} + + /** + * Called when the list of routes are changed. + * A client may refresh available routes for each application. + */ + public void onRouteListChanged(@NonNull List<MediaRoute2Info> routes) {} } final class CallbackRecord { @@ -343,15 +382,15 @@ public class MediaRouter2Manager { class Client extends IMediaRouter2Manager.Stub { @Override - public void notifyRouteSelected(int uid, MediaRoute2Info route) { + public void notifyRouteSelected(String packageName, MediaRoute2Info route) { mHandler.sendMessage(obtainMessage(MediaRouter2Manager::notifyRouteSelected, - MediaRouter2Manager.this, uid, route)); + MediaRouter2Manager.this, packageName, route)); } @Override - public void notifyControlCategoriesChanged(int uid, List<String> categories) { + public void notifyControlCategoriesChanged(String packageName, List<String> categories) { mHandler.sendMessage(obtainMessage(MediaRouter2Manager::notifyControlCategoriesChanged, - MediaRouter2Manager.this, uid, categories)); + MediaRouter2Manager.this, packageName, categories)); } @Override diff --git a/media/java/android/media/session/ISessionManager.aidl b/media/java/android/media/session/ISessionManager.aidl index a67a37eedd27..01e6ed5e9f35 100644 --- a/media/java/android/media/session/ISessionManager.aidl +++ b/media/java/android/media/session/ISessionManager.aidl @@ -62,7 +62,8 @@ interface ISessionManager { // For PhoneWindowManager to precheck media keys boolean isGlobalPriorityActive(); - void setCallback(in ICallback callback); + void registerCallback(in ICallback callback); + void unregisterCallback(in ICallback callback); void setOnVolumeKeyLongPressListener(in IOnVolumeKeyLongPressListener listener); void setOnMediaKeyListener(in IOnMediaKeyListener listener); diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java index dec0140c0d5c..1f2283c6381f 100644 --- a/media/java/android/media/session/MediaSessionManager.java +++ b/media/java/android/media/session/MediaSessionManager.java @@ -46,7 +46,9 @@ import android.view.KeyEvent; import com.android.internal.annotations.GuardedBy; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; /** @@ -72,6 +74,7 @@ public final class MediaSessionManager { * @hide */ public static final int RESULT_MEDIA_KEY_HANDLED = 1; + private final ISessionManager mService; private final Object mLock = new Object(); @GuardedBy("mLock") @@ -80,13 +83,21 @@ public final class MediaSessionManager { @GuardedBy("mLock") private final ArrayMap<OnSession2TokensChangedListener, Session2TokensChangedWrapper> mSession2TokensListeners = new ArrayMap<>(); - private final ISessionManager mService; + @GuardedBy("mLock") + private final CallbackStub mCbStub = new CallbackStub(); + @GuardedBy("mLock") + private final Map<Callback, Handler> mCallbacks = new HashMap<>(); + @GuardedBy("mLock") + private MediaSession.Token mCurMediaButtonSession; + @GuardedBy("mLock") + private ComponentName mCurMediaButtonReceiver; private Context mContext; - - private CallbackImpl mCallback; private OnVolumeKeyLongPressListenerImpl mOnVolumeKeyLongPressListener; private OnMediaKeyListenerImpl mOnMediaKeyListener; + // TODO: Remove mLegacyCallback once Bluetooth app stop calling setCallback() method. + @GuardedBy("mLock") + private Callback mLegacyCallback; /** * @hide @@ -752,18 +763,71 @@ public final class MediaSessionManager { * if the callback should be invoked on the calling thread's looper. * @hide */ + // TODO: Remove this method once Bluetooth app stop calling it. public void setCallback(@Nullable Callback callback, @Nullable Handler handler) { synchronized (mLock) { + if (mLegacyCallback != null) { + unregisterCallback(mLegacyCallback); + } + mLegacyCallback = callback; + if (callback != null) { + registerCallback(callback, handler); + } + } + } + + /** + * Register a {@link Callback}. + * + * @param callback A {@link Callback}. + * @param handler The handler on which the callback should be invoked, or {@code null} + * if the callback should be invoked on the calling thread's looper. + * @hide + */ + @SystemApi + @RequiresPermission(value = android.Manifest.permission.MEDIA_CONTENT_CONTROL) + public void registerCallback(@NonNull Callback callback, @Nullable Handler handler) { + if (callback == null) { + throw new NullPointerException("callback shouldn't be null"); + } + synchronized (mLock) { try { - if (callback == null) { - mCallback = null; - mService.setCallback(null); - } else { - if (handler == null) { - handler = new Handler(); - } - mCallback = new CallbackImpl(callback, handler); - mService.setCallback(mCallback); + if (handler == null) { + handler = new Handler(); + } + mCallbacks.put(callback, handler); + if (mCurMediaButtonSession != null) { + handler.post(() -> callback.onAddressedPlayerChanged(mCurMediaButtonSession)); + } else if (mCurMediaButtonReceiver != null) { + handler.post(() -> callback.onAddressedPlayerChanged(mCurMediaButtonReceiver)); + } + + if (mCallbacks.size() == 1) { + mService.registerCallback(mCbStub); + } + } catch (RemoteException e) { + Log.e(TAG, "Failed to set media key callback", e); + } + } + } + + /** + * Unregister a {@link Callback}. + * + * @param callback A {@link Callback}. + * @hide + */ + @SystemApi + @RequiresPermission(value = android.Manifest.permission.MEDIA_CONTENT_CONTROL) + public void unregisterCallback(@NonNull Callback callback) { + if (callback == null) { + throw new NullPointerException("callback shouldn't be null"); + } + synchronized (mLock) { + try { + mCallbacks.remove(callback); + if (mCallbacks.size() == 0) { + mService.unregisterCallback(mCbStub); } } catch (RemoteException e) { Log.e(TAG, "Failed to set media key callback", e); @@ -835,6 +899,7 @@ public final class MediaSessionManager { * receive media key events. * @hide */ + @SystemApi public static abstract class Callback { /** * Called when a media key event is dispatched to the media session @@ -861,7 +926,7 @@ public final class MediaSessionManager { /** * Called when the addressed player is changed to a media session. * <p>One of the {@ #onAddressedPlayerChanged} will be also called immediately after - * {@link #setCallback} if the addressed player exists. + * {@link #registerCallback} if the addressed player exists. * * @param sessionToken The media session's token. */ @@ -870,7 +935,7 @@ public final class MediaSessionManager { /** * Called when the addressed player is changed to the media button receiver. * <p>One of the {@ #onAddressedPlayerChanged} will be also called immediately after - * {@link #setCallback} if the addressed player exists. + * {@link #registerCallback} if the addressed player exists. * * @param mediaButtonReceiver The media button receiver. */ @@ -1076,56 +1141,52 @@ public final class MediaSessionManager { } } - private static final class CallbackImpl extends ICallback.Stub { - private final Callback mCallback; - private final Handler mHandler; - - public CallbackImpl(@NonNull Callback callback, @NonNull Handler handler) { - mCallback = callback; - mHandler = handler; - } + private final class CallbackStub extends ICallback.Stub { @Override public void onMediaKeyEventDispatchedToMediaSession(KeyEvent event, MediaSession.Token sessionToken) { - mHandler.post(new Runnable() { - @Override - public void run() { - mCallback.onMediaKeyEventDispatched(event, sessionToken); + synchronized (mLock) { + for (Map.Entry<Callback, Handler> e : mCallbacks.entrySet()) { + e.getValue().post( + () -> e.getKey().onMediaKeyEventDispatched(event, sessionToken)); } - }); + } } @Override public void onMediaKeyEventDispatchedToMediaButtonReceiver(KeyEvent event, ComponentName mediaButtonReceiver) { - mHandler.post(new Runnable() { - @Override - public void run() { - mCallback.onMediaKeyEventDispatched(event, mediaButtonReceiver); + synchronized (mLock) { + for (Map.Entry<Callback, Handler> e : mCallbacks.entrySet()) { + e.getValue().post( + () -> e.getKey().onMediaKeyEventDispatched(event, mediaButtonReceiver)); } - }); + } } @Override public void onAddressedPlayerChangedToMediaSession(MediaSession.Token sessionToken) { - mHandler.post(new Runnable() { - @Override - public void run() { - mCallback.onAddressedPlayerChanged(sessionToken); + synchronized (mLock) { + mCurMediaButtonSession = sessionToken; + mCurMediaButtonReceiver = null; + for (Map.Entry<Callback, Handler> e : mCallbacks.entrySet()) { + e.getValue().post(() -> e.getKey().onAddressedPlayerChanged(sessionToken)); } - }); + } } @Override public void onAddressedPlayerChangedToMediaButtonReceiver( ComponentName mediaButtonReceiver) { - mHandler.post(new Runnable() { - @Override - public void run() { - mCallback.onAddressedPlayerChanged(mediaButtonReceiver); + synchronized (mLock) { + mCurMediaButtonSession = null; + mCurMediaButtonReceiver = mediaButtonReceiver; + for (Map.Entry<Callback, Handler> e : mCallbacks.entrySet()) { + e.getValue().post(() -> e.getKey().onAddressedPlayerChanged( + mediaButtonReceiver)); } - }); + } } } } diff --git a/media/tests/MediaRouteProvider/src/com/android/mediarouteprovider/example/SampleMediaRoute2ProviderService.java b/media/tests/MediaRouteProvider/src/com/android/mediarouteprovider/example/SampleMediaRoute2ProviderService.java index 21cb93d4f12e..2cdc6a8101d7 100644 --- a/media/tests/MediaRouteProvider/src/com/android/mediarouteprovider/example/SampleMediaRoute2ProviderService.java +++ b/media/tests/MediaRouteProvider/src/com/android/mediarouteprovider/example/SampleMediaRoute2ProviderService.java @@ -59,8 +59,26 @@ public class SampleMediaRoute2ProviderService extends MediaRoute2ProviderService } @Override - public void onSelect(int uid, String routeId) { - updateProvider(uid, routeId); + public void onSelectRoute(String packageName, String routeId) { + MediaRoute2Info route = mRoutes.get(routeId); + if (route == null) { + return; + } + mRoutes.put(routeId, new MediaRoute2Info.Builder(route) + .setClientPackageName(packageName) + .build()); + publishRoutes(); + } + + @Override + public void onUnselectRoute(String packageName, String routeId) { + MediaRoute2Info route = mRoutes.get(routeId); + if (route == null) { + return; + } + mRoutes.put(routeId, new MediaRoute2Info.Builder(route) + .setClientPackageName(null) + .build()); publishRoutes(); } diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouterManagerTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouterManagerTest.java index aa062cd996ae..03b43e215c25 100644 --- a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouterManagerTest.java +++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouterManagerTest.java @@ -16,6 +16,8 @@ package com.android.mediaroutertest; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.timeout; @@ -37,7 +39,9 @@ import org.junit.Test; import org.junit.runner.RunWith; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.SynchronousQueue; @@ -49,8 +53,6 @@ import java.util.concurrent.TimeUnit; public class MediaRouterManagerTest { private static final String TAG = "MediaRouterManagerTest"; - private static final int TARGET_UID = 109992; - // Must be the same as SampleMediaRoute2ProviderService public static final String ROUTE_ID1 = "route_id1"; public static final String ROUTE_NAME1 = "Sample Route 1"; @@ -59,13 +61,13 @@ public class MediaRouterManagerTest { public static final String ACTION_REMOVE_ROUTE = "com.android.mediarouteprovider.action_remove_route"; - private static final int AWAIT_MS = 1000; private static final int TIMEOUT_MS = 5000; private Context mContext; private MediaRouter2Manager mManager; private MediaRouter2 mRouter; private Executor mExecutor; + private String mPackageName; private static final List<String> TEST_CONTROL_CATEGORIES = new ArrayList(); private static final String CONTROL_CATEGORY_1 = "android.media.mediarouter.MEDIA1"; @@ -83,6 +85,20 @@ public class MediaRouterManagerTest { mExecutor = new ThreadPoolExecutor( 1, 20, 3, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); + mPackageName = mContext.getPackageName(); + } + + @Test + public void testMediaRoute2Info() { + MediaRoute2Info routeInfo1 = new MediaRoute2Info.Builder("id", "name") + .build(); + MediaRoute2Info routeInfo2 = new MediaRoute2Info.Builder(routeInfo1).build(); + + MediaRoute2Info routeInfo3 = new MediaRoute2Info.Builder(routeInfo1) + .setClientPackageName(mPackageName).build(); + + assertEquals(routeInfo1, routeInfo2); + assertNotEquals(routeInfo1, routeInfo3); } //TODO: Test onRouteChanged when it's properly implemented. @@ -124,34 +140,30 @@ public class MediaRouterManagerTest { @Test public void controlCategoryTest() throws Exception { - final int uid = android.os.Process.myUid(); - MediaRouter2Manager.Callback mockCallback = mock(MediaRouter2Manager.Callback.class); mManager.addCallback(mExecutor, mockCallback); MediaRouter2.Callback mockRouterCallback = mock(MediaRouter2.Callback.class); InstrumentationRegistry.getInstrumentation().runOnMainSync( - (Runnable) () -> { + () -> { mRouter.addCallback(TEST_CONTROL_CATEGORIES, mExecutor, mockRouterCallback); mRouter.removeCallback(mockRouterCallback); } ); verify(mockCallback, timeout(TIMEOUT_MS).atLeastOnce()) - .onControlCategoriesChanged(uid, TEST_CONTROL_CATEGORIES); + .onControlCategoriesChanged(mPackageName, TEST_CONTROL_CATEGORIES); mManager.removeCallback(mockCallback); } @Test - public void selectRouteTest() throws Exception { - final int uid = android.os.Process.myUid(); - + public void onRouteSelectedTest() throws Exception { CountDownLatch latch = new CountDownLatch(1); MediaRouter2.Callback mockRouterCallback = mock(MediaRouter2.Callback.class); InstrumentationRegistry.getInstrumentation().runOnMainSync( - (Runnable) () -> { + () -> { mRouter.addCallback(TEST_CONTROL_CATEGORIES, mExecutor, mockRouterCallback); } ); @@ -163,22 +175,19 @@ public class MediaRouterManagerTest { public void onRouteAdded(MediaRoute2Info routeInfo) { if (mSelectedRoute == null) { mSelectedRoute = routeInfo; - mManager.selectRoute(uid, mSelectedRoute); + mManager.selectRoute(mPackageName, mSelectedRoute); } } @Override - public void onRouteSelected(int uid, MediaRoute2Info route) { - if (mSelectedRoute != null && route != null + public void onRouteSelected(String packageName, MediaRoute2Info route) { + if (TextUtils.equals(packageName, mPackageName) + && mSelectedRoute != null + && route != null && TextUtils.equals(route.getId(), mSelectedRoute.getId())) { latch.countDown(); } } - - @Override - public void onControlCategoriesChanged(int uid, List<String> categories) { - - } }; mManager.addCallback(mExecutor, managerCallback); @@ -187,4 +196,55 @@ public class MediaRouterManagerTest { mManager.removeCallback(managerCallback); } + + @Test + /** + * Tests selecting and unselecting routes of a single provider. + */ + public void testSingleProviderSelect() { + MediaRouter2Manager.Callback managerCallback = mock(MediaRouter2Manager.Callback.class); + MediaRouter2.Callback routerCallback = mock(MediaRouter2.Callback.class); + + mManager.addCallback(mExecutor, managerCallback); + InstrumentationRegistry.getInstrumentation().runOnMainSync( + () -> { + mRouter.addCallback(TEST_CONTROL_CATEGORIES, mExecutor, routerCallback); + } + ); + verify(managerCallback, timeout(TIMEOUT_MS)) + .onRouteListChanged(argThat(routes -> routes.size() > 0)); + + Map<String, MediaRoute2Info> routes = + createRouteMap(mManager.getAvailableRoutes(mPackageName)); + + mManager.selectRoute(mPackageName, routes.get(ROUTE_ID1)); + verify(managerCallback, timeout(TIMEOUT_MS)) + .onRouteChanged(argThat(routeInfo -> TextUtils.equals(ROUTE_ID1, routeInfo.getId()) + && TextUtils.equals(routeInfo.getClientPackageName(), mPackageName))); + + mManager.selectRoute(mPackageName, routes.get(ROUTE_ID2)); + verify(managerCallback, timeout(TIMEOUT_MS)) + .onRouteChanged(argThat(routeInfo -> TextUtils.equals(ROUTE_ID2, routeInfo.getId()) + && TextUtils.equals(routeInfo.getClientPackageName(), mPackageName))); + + mManager.unselectRoute(mPackageName); + verify(managerCallback, timeout(TIMEOUT_MS)) + .onRouteChanged(argThat(routeInfo -> TextUtils.equals(ROUTE_ID2, routeInfo.getId()) + && TextUtils.equals(routeInfo.getClientPackageName(), null))); + + InstrumentationRegistry.getInstrumentation().runOnMainSync( + () -> { + mRouter.removeCallback(routerCallback); + } + ); + mManager.removeCallback(managerCallback); + } + + Map<String, MediaRoute2Info> createRouteMap(List<MediaRoute2Info> routes) { + Map<String, MediaRoute2Info> routeMap = new HashMap<>(); + for (MediaRoute2Info route : routes) { + routeMap.put(route.getId(), route); + } + return routeMap; + } } diff --git a/packages/CarSystemUI/res/values-night/colors.xml b/packages/CarSystemUI/res/values-night/colors.xml index dad94a894603..a2edd7dc5b4e 100644 --- a/packages/CarSystemUI/res/values-night/colors.xml +++ b/packages/CarSystemUI/res/values-night/colors.xml @@ -19,6 +19,9 @@ <color name="status_bar_background_color">#ff000000</color> <color name="system_bar_background_opaque">#ff0c1013</color> + <!-- The background color of the notification shade --> + <color name="notification_shade_background_color">#E0000000</color> + <!-- The color of the ripples on the untinted notifications --> <color name="notification_ripple_untinted_color">@color/ripple_material_dark</color> </resources> diff --git a/packages/CarSystemUI/res/values/colors.xml b/packages/CarSystemUI/res/values/colors.xml index e13c94052281..e0ae45662390 100644 --- a/packages/CarSystemUI/res/values/colors.xml +++ b/packages/CarSystemUI/res/values/colors.xml @@ -35,7 +35,7 @@ <drawable name="system_bar_background">@android:color/transparent</drawable> <!-- The background color of the notification shade --> - <color name="notification_shade_background_color">#DD000000</color> + <color name="notification_shade_background_color">#D6000000</color> <!-- The background color of the car volume dialog --> <color name="car_volume_dialog_background_color">@color/system_bar_background_opaque</color> diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java index 812adf94b8bc..71b9dc3e923f 100644 --- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java @@ -27,6 +27,7 @@ import android.car.drivingstate.CarDrivingStateEvent; import android.car.drivingstate.CarUxRestrictionsManager; import android.car.hardware.power.CarPowerManager.CarPowerStateListener; import android.content.Context; +import android.content.res.Configuration; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; @@ -1078,6 +1079,21 @@ public class CarStatusBar extends StatusBar implements } } + @Override + public void onConfigChanged(Configuration newConfig) { + super.onConfigChanged(newConfig); + + int uiModeNightMask = (newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK); + + boolean dayNightModeChanged = uiModeNightMask == Configuration.UI_MODE_NIGHT_YES + || uiModeNightMask == Configuration.UI_MODE_NIGHT_NO; + + if (dayNightModeChanged) { + mNotificationView.setBackgroundColor( + mContext.getColor(R.color.notification_shade_background_color)); + } + } + private void calculatePercentageFromBottom(float height) { if (mNotificationView.getHeight() > 0) { mPercentageFromBottom = (int) Math.abs( diff --git a/packages/EasterEgg/AndroidManifest.xml b/packages/EasterEgg/AndroidManifest.xml index c7dd40d7afdb..7f76a4529963 100644 --- a/packages/EasterEgg/AndroidManifest.xml +++ b/packages/EasterEgg/AndroidManifest.xml @@ -1,40 +1,38 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2018 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. ---> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.egg" android:versionCode="1" android:versionName="1.0"> - <uses-sdk android:minSdkVersion="28" /> + <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <application - android:icon="@drawable/icon" + android:icon="@drawable/q_icon" android:label="@string/app_name"> + <activity android:name=".quares.QuaresActivity" + android:icon="@drawable/q_icon" + android:label="@string/q_egg_name" + android:theme="@style/QuaresTheme"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="android.intent.category.DEFAULT" /> + <!-- <category android:name="android.intent.category.LAUNCHER" /> --> + <category android:name="com.android.internal.category.PLATLOGO" /> + </intent-filter> + </activity> <activity android:name=".paint.PaintActivity" android:configChanges="orientation|keyboardHidden|screenSize|uiMode" - android:label="@string/app_name" + android:icon="@drawable/p_icon" + android:label="@string/p_egg_name" android:theme="@style/AppTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> - <category android:name="android.intent.category.DEFAULT" /> - <!--<category android:name="android.intent.category.LAUNCHER" />--> - <category android:name="com.android.internal.category.PLATLOGO" /> + + <!-- <category android:name="android.intent.category.DEFAULT" /> --> + <!-- <category android:name="android.intent.category.LAUNCHER" /> --> + <!-- <category android:name="com.android.internal.category.PLATLOGO" /> --> </intent-filter> </activity> </application> diff --git a/packages/EasterEgg/res/drawable/icon_bg.xml b/packages/EasterEgg/res/drawable/icon_bg.xml index c1553ce50946..659f98be4f43 100644 --- a/packages/EasterEgg/res/drawable/icon_bg.xml +++ b/packages/EasterEgg/res/drawable/icon_bg.xml @@ -15,4 +15,4 @@ limitations under the License. --> <color xmlns:android="http://schemas.android.com/apk/res/android" - android:color="#C5E1A5" />
\ No newline at end of file + android:color="@color/q_clue_text" /> diff --git a/packages/EasterEgg/res/drawable/icon.xml b/packages/EasterEgg/res/drawable/p_icon.xml index 2306b7b554c5..2306b7b554c5 100644 --- a/packages/EasterEgg/res/drawable/icon.xml +++ b/packages/EasterEgg/res/drawable/p_icon.xml diff --git a/packages/EasterEgg/res/drawable/pixel_bg.xml b/packages/EasterEgg/res/drawable/pixel_bg.xml new file mode 100644 index 000000000000..4d4a113cce53 --- /dev/null +++ b/packages/EasterEgg/res/drawable/pixel_bg.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2019 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. +--> +<selector xmlns:android="http://schemas.android.com/apk/res/android" + android:exitFadeDuration="100"> + <item android:state_pressed="true"> + <shape><solid android:color="@color/red"/></shape> + </item> + <item android:state_checked="true"> + <shape><solid android:color="@color/pixel_on"/></shape> + </item> + <item> + <shape><solid android:color="@color/pixel_off"/></shape> + </item> +</selector>
\ No newline at end of file diff --git a/packages/EasterEgg/res/drawable/q.xml b/packages/EasterEgg/res/drawable/q.xml new file mode 100644 index 000000000000..75baa47e3aa6 --- /dev/null +++ b/packages/EasterEgg/res/drawable/q.xml @@ -0,0 +1,27 @@ +<!-- +Copyright (C) 2015 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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="@color/q_icon_fg" + android:pathData="M19.45,22.89l-10.250001,-10.249999l-2.6599998,2.6599998l-1.77,-1.7600002l4.43,-4.4300003l12.0199995,12.0199995l-1.7699986,1.7600002z"/> + <path + android:fillColor="@color/q_icon_fg" + android:pathData="M12,6a6,6 0,1 1,-6 6,6 6,0 0,1 6,-6m0,-2.5A8.5,8.5 0,1 0,20.5 12,8.51 8.51,0 0,0 12,3.5Z"/> +</vector> diff --git a/packages/EasterEgg/res/drawable/q_icon.xml b/packages/EasterEgg/res/drawable/q_icon.xml new file mode 100644 index 000000000000..ef4b0a362043 --- /dev/null +++ b/packages/EasterEgg/res/drawable/q_icon.xml @@ -0,0 +1,19 @@ +<!-- + Copyright (C) 2019 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. +--> +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> + <background android:drawable="@drawable/icon_bg"/> + <foreground android:drawable="@drawable/q_smaller"/> +</adaptive-icon> diff --git a/packages/EasterEgg/res/drawable/q_smaller.xml b/packages/EasterEgg/res/drawable/q_smaller.xml new file mode 100644 index 000000000000..c71dff094235 --- /dev/null +++ b/packages/EasterEgg/res/drawable/q_smaller.xml @@ -0,0 +1,23 @@ +<!-- +Copyright (C) 2019 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. +--> +<inset xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:insetBottom="5dp" + android:insetLeft="5dp" + android:insetRight="5dp" + android:insetTop="5dp" + android:drawable="@drawable/q" /> diff --git a/packages/EasterEgg/res/layout/activity_quares.xml b/packages/EasterEgg/res/layout/activity_quares.xml new file mode 100644 index 000000000000..dcc90f6f77ae --- /dev/null +++ b/packages/EasterEgg/res/layout/activity_quares.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2019 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. +--> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:animateLayoutChanges="true" + tools:context="com.android.egg.quares.QuaresActivity"> + + <GridLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:alignmentMode="alignBounds" + android:id="@+id/grid" + /> + + <Button + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/label" + android:layout_gravity="center_horizontal|bottom" + android:gravity="center" + android:textSize="18dp" + android:visibility="gone" + android:drawablePadding="8dp" + android:padding="12dp" + android:backgroundTint="@color/q_clue_bg_correct" + android:textColor="@color/q_clue_text" + android:layout_marginBottom="48dp" + android:elevation="30dp" + /> +</FrameLayout> diff --git a/packages/EasterEgg/res/values-night/q_colors.xml b/packages/EasterEgg/res/values-night/q_colors.xml new file mode 100644 index 000000000000..191bd944b7dc --- /dev/null +++ b/packages/EasterEgg/res/values-night/q_colors.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2019 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. +--> +<resources> + <color name="pixel_off">#000000</color> + <color name="pixel_on">#FFFFFF</color> + + <color name="q_clue_bg">@color/navy</color> + <color name="q_clue_text">@color/tan</color> +</resources>
\ No newline at end of file diff --git a/packages/EasterEgg/res/values/q_colors.xml b/packages/EasterEgg/res/values/q_colors.xml new file mode 100644 index 000000000000..5e92c84fd97d --- /dev/null +++ b/packages/EasterEgg/res/values/q_colors.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2019 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. +--> +<resources> + <color name="emerald">#3ddc84</color> + <color name="red">#f8c734</color> + <color name="navy">#073042</color> + <color name="vapor">#d7effe</color> + <color name="tan">#eff7cf</color> + + <color name="pixel_off">#FFFFFF</color> + <color name="pixel_on">#000000</color> + + <color name="q_clue_bg">@color/tan</color> + <color name="q_clue_text">@color/navy</color> + <color name="q_clue_bg_correct">@color/emerald</color> + + <color name="q_icon_fg">@color/emerald</color> +</resources> diff --git a/packages/EasterEgg/res/values/q_puzzles.xml b/packages/EasterEgg/res/values/q_puzzles.xml new file mode 100644 index 000000000000..7c2eff152ffe --- /dev/null +++ b/packages/EasterEgg/res/values/q_puzzles.xml @@ -0,0 +1,214 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string-array name="puzzles"> + + <item>q</item> + <item>q</item> + <item>q</item> + <item>q</item> + <item>q</item> + + <item>android:drawable/ic_info</item> + + <item>android:drawable/stat_sys_adb</item> + <item>android:drawable/stat_sys_battery</item> + <item>android:drawable/stat_sys_phone_call</item> + <item>android:drawable/stat_sys_certificate_info</item> + <item>android:drawable/stat_sys_data_bluetooth</item> + <item>android:drawable/stat_sys_data_usb</item> + <item>android:drawable/stat_sys_download</item> + <item>android:drawable/stat_sys_gps_on</item> + <item>android:drawable/stat_sys_phone_call</item> + <item>android:drawable/stat_sys_tether_wifi</item> + <item>android:drawable/stat_sys_throttled</item> + <item>android:drawable/stat_sys_upload</item> + + <item>android:drawable/stat_notify_car_mode</item> + <item>android:drawable/stat_notify_chat</item> + <item>android:drawable/stat_notify_disk_full</item> + <item>android:drawable/stat_notify_email_generic</item> + <item>android:drawable/stat_notify_error</item> + <item>android:drawable/stat_notify_gmail</item> + <item>android:drawable/stat_notify_missed_call</item> + <item>android:drawable/stat_notify_mmcc_indication_icn</item> + <item>android:drawable/stat_notify_more</item> + <item>android:drawable/stat_notify_rssi_in_range</item> + <item>android:drawable/stat_notify_sdcard</item> + <item>android:drawable/stat_notify_sdcard_prepare</item> + <item>android:drawable/stat_notify_sdcard_usb</item> + <item>android:drawable/stat_notify_sim_toolkit</item> + <item>android:drawable/stat_notify_sync</item> + <item>android:drawable/stat_notify_sync_anim0</item> + <item>android:drawable/stat_notify_sync_error</item> + <item>android:drawable/stat_notify_voicemail</item> + + <item>android:drawable/ic_audio_alarm</item> + <item>android:drawable/ic_audio_alarm_mute</item> + <item>android:drawable/ic_bluetooth_share_icon</item> + <item>android:drawable/ic_bt_headphones_a2dp</item> + <item>android:drawable/ic_bt_headset_hfp</item> + <item>android:drawable/ic_bt_hearing_aid</item> + <item>android:drawable/ic_bt_laptop</item> + <item>android:drawable/ic_bt_misc_hid</item> + <item>android:drawable/ic_bt_network_pan</item> + <item>android:drawable/ic_bt_pointing_hid</item> + <item>android:drawable/ic_corp_badge</item> + <item>android:drawable/ic_expand_more</item> + <item>android:drawable/ic_faster_emergency</item> + <item>android:drawable/ic_file_copy</item> + <item>android:drawable/ic_info_outline_24</item> + <item>android:drawable/ic_lock</item> + <item>android:drawable/ic_lock_bugreport</item> + <item>android:drawable/ic_lock_open</item> + <item>android:drawable/ic_lock_power_off</item> + <item>android:drawable/ic_lockscreen_ime</item> + <item>android:drawable/ic_mode_edit</item> + <item>android:drawable/ic_phone</item> + <item>android:drawable/ic_qs_airplane</item> + <item>android:drawable/ic_qs_auto_rotate</item> + <item>android:drawable/ic_qs_battery_saver</item> + <item>android:drawable/ic_qs_bluetooth</item> + <item>android:drawable/ic_qs_dnd</item> + <item>android:drawable/ic_qs_flashlight</item> + <item>android:drawable/ic_qs_night_display_on</item> + <item>android:drawable/ic_restart</item> + <item>android:drawable/ic_screenshot</item> + <item>android:drawable/ic_settings_bluetooth</item> + <item>android:drawable/ic_signal_cellular_0_4_bar</item> + <item>android:drawable/ic_signal_cellular_0_5_bar</item> + <item>android:drawable/ic_signal_cellular_1_4_bar</item> + <item>android:drawable/ic_signal_cellular_1_5_bar</item> + <item>android:drawable/ic_signal_cellular_2_4_bar</item> + <item>android:drawable/ic_signal_cellular_2_5_bar</item> + <item>android:drawable/ic_signal_cellular_3_4_bar</item> + <item>android:drawable/ic_signal_cellular_3_5_bar</item> + <item>android:drawable/ic_signal_cellular_4_4_bar</item> + <item>android:drawable/ic_signal_cellular_4_5_bar</item> + <item>android:drawable/ic_signal_cellular_5_5_bar</item> + <item>android:drawable/ic_signal_location</item> + <item>android:drawable/ic_wifi_signal_0</item> + <item>android:drawable/ic_wifi_signal_1</item> + <item>android:drawable/ic_wifi_signal_2</item> + <item>android:drawable/ic_wifi_signal_3</item> + <item>android:drawable/ic_wifi_signal_4</item> + <item>android:drawable/perm_group_activity_recognition</item> + <item>android:drawable/perm_group_calendar</item> + <item>android:drawable/perm_group_call_log</item> + <item>android:drawable/perm_group_camera</item> + <item>android:drawable/perm_group_contacts</item> + <item>android:drawable/perm_group_location</item> + <item>android:drawable/perm_group_microphone</item> + <item>android:drawable/perm_group_phone_calls</item> + <item>android:drawable/perm_group_sensors</item> + <item>android:drawable/perm_group_sms</item> + <item>android:drawable/perm_group_storage</item> + <item>android:drawable/perm_group_visual</item> + + <item>com.android.settings:drawable/ic_add_24dp</item> + <item>com.android.settings:drawable/ic_airplanemode_active</item> + <item>com.android.settings:drawable/ic_android</item> + <item>com.android.settings:drawable/ic_apps</item> + <item>com.android.settings:drawable/ic_arrow_back</item> + <item>com.android.settings:drawable/ic_arrow_down_24dp</item> + <item>com.android.settings:drawable/ic_battery_charging_full</item> + <item>com.android.settings:drawable/ic_battery_status_bad_24dp</item> + <item>com.android.settings:drawable/ic_battery_status_good_24dp</item> + <item>com.android.settings:drawable/ic_battery_status_maybe_24dp</item> + <item>com.android.settings:drawable/ic_call_24dp</item> + <item>com.android.settings:drawable/ic_cancel</item> + <item>com.android.settings:drawable/ic_cast_24dp</item> + <item>com.android.settings:drawable/ic_chevron_right_24dp</item> + <item>com.android.settings:drawable/ic_data_saver</item> + <item>com.android.settings:drawable/ic_delete</item> + <item>com.android.settings:drawable/ic_devices_other</item> + <item>com.android.settings:drawable/ic_devices_other_opaque_black</item> + <item>com.android.settings:drawable/ic_do_not_disturb_on_24dp</item> + <item>com.android.settings:drawable/ic_eject_24dp</item> + <item>com.android.settings:drawable/ic_expand_less</item> + <item>com.android.settings:drawable/ic_expand_more_inverse</item> + <item>com.android.settings:drawable/ic_folder_vd_theme_24</item> + <item>com.android.settings:drawable/ic_friction_lock_closed</item> + <item>com.android.settings:drawable/ic_gray_scale_24dp</item> + <item>com.android.settings:drawable/ic_headset_24dp</item> + <item>com.android.settings:drawable/ic_help</item> + <item>com.android.settings:drawable/ic_local_movies</item> + <item>com.android.settings:drawable/ic_lock</item> + <item>com.android.settings:drawable/ic_media_stream</item> + <item>com.android.settings:drawable/ic_network_cell</item> + <item>com.android.settings:drawable/ic_notifications</item> + <item>com.android.settings:drawable/ic_notifications_off_24dp</item> + <item>com.android.settings:drawable/ic_phone_info</item> + <item>com.android.settings:drawable/ic_photo_library</item> + <item>com.android.settings:drawable/ic_settings_accessibility</item> + <item>com.android.settings:drawable/ic_settings_accounts</item> + <item>com.android.settings:drawable/ic_settings_backup</item> + <item>com.android.settings:drawable/ic_settings_battery_white</item> + <item>com.android.settings:drawable/ic_settings_data_usage</item> + <item>com.android.settings:drawable/ic_settings_date_time</item> + <item>com.android.settings:drawable/ic_settings_delete</item> + <item>com.android.settings:drawable/ic_settings_display_white</item> + <item>com.android.settings:drawable/ic_settings_home</item> + <item>com.android.settings:drawable/ic_settings_location</item> + <item>com.android.settings:drawable/ic_settings_night_display</item> + <item>com.android.settings:drawable/ic_settings_open</item> + <item>com.android.settings:drawable/ic_settings_print</item> + <item>com.android.settings:drawable/ic_settings_privacy</item> + <item>com.android.settings:drawable/ic_settings_security_white</item> + <item>com.android.settings:drawable/ic_settings_sim</item> + <item>com.android.settings:drawable/ic_settings_wireless</item> + <item>com.android.settings:drawable/ic_storage</item> + <item>com.android.settings:drawable/ic_storage_white</item> + <item>com.android.settings:drawable/ic_suggestion_night_display</item> + <item>com.android.settings:drawable/ic_sync</item> + <item>com.android.settings:drawable/ic_system_update</item> + <item>com.android.settings:drawable/ic_videogame_vd_theme_24</item> + <item>com.android.settings:drawable/ic_volume_ringer_vibrate</item> + <item>com.android.settings:drawable/ic_volume_up_24dp</item> + <item>com.android.settings:drawable/ic_vpn_key</item> + <item>com.android.settings:drawable/ic_wifi_tethering</item> + + <item>com.android.systemui:drawable/ic_alarm</item> + <item>com.android.systemui:drawable/ic_alarm_dim</item> + <item>com.android.systemui:drawable/ic_arrow_back</item> + <item>com.android.systemui:drawable/ic_bluetooth_connected</item> + <item>com.android.systemui:drawable/ic_brightness_thumb</item> + <item>com.android.systemui:drawable/ic_camera</item> + <item>com.android.systemui:drawable/ic_cast</item> + <item>com.android.systemui:drawable/ic_cast_connected</item> + <item>com.android.systemui:drawable/ic_cast_connected_fill</item> + <item>com.android.systemui:drawable/ic_close_white</item> + <item>com.android.systemui:drawable/ic_data_saver</item> + <item>com.android.systemui:drawable/ic_data_saver_off</item> + <item>com.android.systemui:drawable/ic_drag_handle</item> + <item>com.android.systemui:drawable/ic_headset</item> + <item>com.android.systemui:drawable/ic_headset_mic</item> + <item>com.android.systemui:drawable/ic_hotspot</item> + <item>com.android.systemui:drawable/ic_invert_colors</item> + <item>com.android.systemui:drawable/ic_location</item> + <item>com.android.systemui:drawable/ic_lockscreen_ime</item> + <item>com.android.systemui:drawable/ic_notifications_alert</item> + <item>com.android.systemui:drawable/ic_notifications_silence</item> + <item>com.android.systemui:drawable/ic_power_low</item> + <item>com.android.systemui:drawable/ic_power_saver</item> + <item>com.android.systemui:drawable/ic_qs_bluetooth_connecting</item> + <item>com.android.systemui:drawable/ic_qs_bluetooth_on</item> + <item>com.android.systemui:drawable/ic_qs_cancel</item> + <item>com.android.systemui:drawable/ic_qs_no_sim</item> + <item>com.android.systemui:drawable/ic_screenshot_delete</item> + <item>com.android.systemui:drawable/ic_settings</item> + <item>com.android.systemui:drawable/ic_swap_vert</item> + <item>com.android.systemui:drawable/ic_volume_alarm</item> + <item>com.android.systemui:drawable/ic_volume_alarm_mute</item> + <item>com.android.systemui:drawable/ic_volume_media</item> + <item>com.android.systemui:drawable/ic_volume_media_mute</item> + <item>com.android.systemui:drawable/ic_volume_ringer</item> + <item>com.android.systemui:drawable/ic_volume_ringer_mute</item> + <item>com.android.systemui:drawable/ic_volume_ringer_vibrate</item> + <item>com.android.systemui:drawable/ic_volume_voice</item> + <item>com.android.systemui:drawable/stat_sys_camera</item> + <item>com.android.systemui:drawable/stat_sys_managed_profile_status</item> + <item>com.android.systemui:drawable/stat_sys_mic_none</item> + <item>com.android.systemui:drawable/stat_sys_vpn_ic</item> + + </string-array> +</resources> diff --git a/packages/EasterEgg/res/values/strings.xml b/packages/EasterEgg/res/values/strings.xml index 32dbc97a00fb..b95ec6be4c84 100644 --- a/packages/EasterEgg/res/values/strings.xml +++ b/packages/EasterEgg/res/values/strings.xml @@ -1,5 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2018 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,5 +14,11 @@ Copyright (C) 2018 The Android Open Source Project limitations under the License. --> <resources xmlns:android="http://schemas.android.com/apk/res/android"> - <string name="app_name" translatable="false">PAINT.APK</string> + <string name="app_name" translatable="false">Android Q Easter Egg</string> + + <!-- name of the Q easter egg, a nonogram-style icon puzzle --> + <string name="q_egg_name" translatable="false">Icon Quiz</string> + + <!-- name of the P easter egg, a humble paint program --> + <string name="p_egg_name" translatable="false">PAINT.APK</string> </resources> diff --git a/packages/EasterEgg/res/values/styles.xml b/packages/EasterEgg/res/values/styles.xml index 44e2ce52aab8..e576526f49b7 100644 --- a/packages/EasterEgg/res/values/styles.xml +++ b/packages/EasterEgg/res/values/styles.xml @@ -20,4 +20,16 @@ <item name="android:windowLightNavigationBar">true</item> </style> + <style name="QuaresTheme" parent="@android:style/Theme.DeviceDefault.DayNight"> + <item name="android:windowIsTranslucent">true</item> + <item name="android:windowBackground">@android:color/transparent</item> + <item name="android:colorBackgroundCacheHint">@null</item> + <item name="android:windowShowWallpaper">true</item> + <item name="android:windowContentOverlay">@null</item> + <item name="android:windowNoTitle">true</item> + <item name="android:windowFullscreen">true</item> + <item name="android:statusBarColor">@android:color/transparent</item> + <item name="android:navigationBarColor">@android:color/transparent</item> + </style> + </resources> diff --git a/packages/EasterEgg/src/com/android/egg/quares/Quare.kt b/packages/EasterEgg/src/com/android/egg/quares/Quare.kt new file mode 100644 index 000000000000..eb77362a0be2 --- /dev/null +++ b/packages/EasterEgg/src/com/android/egg/quares/Quare.kt @@ -0,0 +1,168 @@ +/* + * Copyright 2019 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.egg.quares + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.drawable.Drawable +import android.graphics.drawable.Icon +import android.os.Parcel +import android.os.Parcelable +import java.util.ArrayList +import kotlin.math.abs +import kotlin.math.round + +class Quare(val width: Int, val height: Int, val depth: Int) : Parcelable { + private val data: IntArray = IntArray(width * height) + private val user: IntArray = data.copyOf() + + private fun loadAndQuantize(bitmap8bpp: Bitmap) { + bitmap8bpp.getPixels(data, 0, width, 0, 0, width, height) + if (depth == 8) return + val s = (255f / depth) + for (i in 0 until data.size) { + var f = (data[i] ushr 24).toFloat() / s + // f = f.pow(0.75f) // gamma adjust for bolder lines + f *= 1.25f // brightness adjust for bolder lines + f.coerceAtMost(1f) + data[i] = (round(f) * s).toInt() shl 24 + } + } + + fun isBlank(): Boolean { + return data.sum() == 0 + } + + fun load(drawable: Drawable) { + val resized = Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8) + val canvas = Canvas(resized) + drawable.setBounds(0, 0, width, height) + drawable.setTint(0xFF000000.toInt()) + drawable.draw(canvas) + loadAndQuantize(resized) + resized.recycle() + } + + fun load(context: Context, icon: Icon) { + icon.loadDrawable(context)?.let { + load(it) + } + } + + fun bitmap(): Bitmap { + return Bitmap.createBitmap(data, width, height, Bitmap.Config.ALPHA_8) + } + + fun getUserMark(x: Int, y: Int): Int { + return user[y * width + x] ushr 24 + } + + fun setUserMark(x: Int, y: Int, v: Int) { + user[y * width + x] = v shl 24 + } + + fun getDataAt(x: Int, y: Int): Int { + return data[y * width + x] ushr 24 + } + + fun check(): Boolean { + return data.contentEquals(user) + } + + fun check(xSel: Int, ySel: Int): Boolean { + val xStart = if (xSel < 0) 0 else xSel + val xEnd = if (xSel < 0) width - 1 else xSel + val yStart = if (ySel < 0) 0 else ySel + val yEnd = if (ySel < 0) height - 1 else ySel + for (y in yStart..yEnd) + for (x in xStart..xEnd) + if (getDataAt(x, y) != getUserMark(x, y)) return false + return true + } + + fun errors(): IntArray { + return IntArray(width * height) { + abs(data[it] - user[it]) + } + } + + fun getRowClue(y: Int): IntArray { + return getClue(-1, y) + } + fun getColumnClue(x: Int): IntArray { + return getClue(x, -1) + } + fun getClue(xSel: Int, ySel: Int): IntArray { + val arr = ArrayList<Int>() + var len = 0 + val xStart = if (xSel < 0) 0 else xSel + val xEnd = if (xSel < 0) width - 1 else xSel + val yStart = if (ySel < 0) 0 else ySel + val yEnd = if (ySel < 0) height - 1 else ySel + for (y in yStart..yEnd) + for (x in xStart..xEnd) + if (getDataAt(x, y) != 0) { + len++ + } else if (len > 0) { + arr.add(len) + len = 0 + } + if (len > 0) arr.add(len) + else if (arr.size == 0) arr.add(0) + return arr.toIntArray() + } + + fun resetUserMarks() { + user.forEachIndexed { index, _ -> user[index] = 0 } + } + + // Parcelable interface + + override fun describeContents(): Int { + return 0 + } + + override fun writeToParcel(p: Parcel?, flags: Int) { + p?.let { + p.writeInt(width) + p.writeInt(height) + p.writeInt(depth) + p.writeIntArray(data) + p.writeIntArray(user) + } + } + + companion object CREATOR : Parcelable.Creator<Quare> { + override fun createFromParcel(p: Parcel?): Quare { + return p!!.let { + Quare( + p.readInt(), // width + p.readInt(), // height + p.readInt() // depth + ).also { + p.readIntArray(it.data) + p.readIntArray(it.user) + } + } + } + + override fun newArray(size: Int): Array<Quare?> { + return arrayOfNulls(size) + } + } +} diff --git a/packages/EasterEgg/src/com/android/egg/quares/QuaresActivity.kt b/packages/EasterEgg/src/com/android/egg/quares/QuaresActivity.kt new file mode 100644 index 000000000000..ce439a9a663c --- /dev/null +++ b/packages/EasterEgg/src/com/android/egg/quares/QuaresActivity.kt @@ -0,0 +1,312 @@ +/* + * Copyright 2019 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.egg.quares + +import android.app.Activity +import android.content.Context +import android.content.res.Configuration +import android.graphics.Canvas +import android.graphics.Paint +import android.graphics.Typeface +import android.graphics.drawable.Icon +import android.os.Bundle +import android.text.StaticLayout +import android.text.TextPaint +import android.util.Log +import android.view.View +import android.view.View.GONE +import android.view.View.VISIBLE +import android.widget.Button +import android.widget.CompoundButton +import android.widget.GridLayout + +import java.util.Random + +import com.android.egg.R + +const val TAG = "Quares" + +class QuaresActivity : Activity() { + private var q: Quare = Quare(16, 16, 1) + private var resId = 0 + private var resName = "" + private var icon: Icon? = null + + private lateinit var label: Button + private lateinit var grid: GridLayout + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + window.decorView.systemUiVisibility = + View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_STABLE + + actionBar?.hide() + + setContentView(R.layout.activity_quares) + + grid = findViewById(R.id.grid) + label = findViewById(R.id.label) + + if (savedInstanceState != null) { + Log.v(TAG, "restoring puzzle from state") + q = savedInstanceState.getParcelable("q") ?: q + resId = savedInstanceState.getInt("resId") + resName = savedInstanceState.getString("resName", "") + loadPuzzle() + } + + label.setOnClickListener { newPuzzle() } + } + + override fun onResume() { + super.onResume() + if (resId == 0) { + // lazy init from onCreate + newPuzzle() + } + checkVictory() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + + outState.putParcelable("q", q) + outState.putInt("resId", resId) + outState.putString("resName", resName) + } + + fun newPuzzle() { + Log.v(TAG, "new puzzle...") + + q.resetUserMarks() + val oldResId = resId + resId = android.R.drawable.stat_sys_warning + try { + for (tries in 0..3) { + val ar = resources.obtainTypedArray(R.array.puzzles) + val newName = ar.getString(Random().nextInt(ar.length())) + if (newName == null) continue + + Log.v(TAG, "Looking for icon " + newName) + + val pkg = getPackageNameForResourceName(newName) + val newId = packageManager.getResourcesForApplication(pkg) + .getIdentifier(newName, "drawable", pkg) + if (newId == 0) { + Log.v(TAG, "oops, " + newName + " doesn't resolve from pkg " + pkg) + } else if (newId != oldResId) { + // got a good one + resId = newId + resName = newName + break + } + } + } catch (e: RuntimeException) { + Log.v(TAG, "problem loading puzzle, using fallback", e) + } + loadPuzzle() + } + + fun getPackageNameForResourceName(name: String): String { + return if (name.contains(":") && !name.startsWith("android:")) { + name.substring(0, name.indexOf(":")) + } else { + packageName + } + } + + fun checkVictory() { + if (q.check()) { + val dp = resources.displayMetrics.density + + val label: Button = findViewById(R.id.label) + label.text = resName.replace(Regex("^.*/"), "") + val drawable = icon?.loadDrawable(this)?.also { + it.setBounds(0, 0, (32 * dp).toInt(), (32 * dp).toInt()) + it.setTint(label.currentTextColor) + } + label.setCompoundDrawables(drawable, null, null, null) + + label.visibility = VISIBLE + } else { + label.visibility = GONE + } + } + + fun loadPuzzle() { + Log.v(TAG, "loading " + resName + " at " + q.width + "x" + q.height) + + val dp = resources.displayMetrics.density + + icon = Icon.createWithResource(getPackageNameForResourceName(resName), resId) + q.load(this, icon!!) + + if (q.isBlank()) { + // this is a really boring puzzle, let's try again + resId = 0 + resName = "" + recreate() + return + } + + grid.removeAllViews() + grid.columnCount = q.width + 1 + grid.rowCount = q.height + 1 + + label.visibility = GONE + + val orientation = resources.configuration.orientation + + // clean this up a bit + val minSide = resources.configuration.smallestScreenWidthDp - 25 // ish + val size = (minSide / (q.height + 0.5) * dp).toInt() + + val sb = StringBuffer() + + for (j in 0 until grid.rowCount) { + for (i in 0 until grid.columnCount) { + val tv: View + val params = GridLayout.LayoutParams().also { + it.width = size + it.height = size + it.setMargins(1, 1, 1, 1) + it.rowSpec = GridLayout.spec(GridLayout.UNDEFINED, GridLayout.TOP) // UGH + } + val x = i - 1 + val y = j - 1 + if (i > 0 && j > 0) { + if (i == 1 && j > 1) sb.append("\n") + sb.append(if (q.getDataAt(x, y) == 0) " " else "X") + tv = PixelButton(this) + tv.isChecked = q.getUserMark(x, y) != 0 + tv.setOnClickListener { + q.setUserMark(x, y, if (tv.isChecked) 0xFF else 0) + val columnCorrect = (grid.getChildAt(i) as? ClueView)?.check(q) ?: false + val rowCorrect = (grid.getChildAt(j*(grid.columnCount)) as? ClueView) + ?.check(q) ?: false + if (columnCorrect && rowCorrect) { + checkVictory() + } else { + label.visibility = GONE + } + } + } else if (i == j) { // 0,0 + tv = View(this) + tv.visibility = GONE + } else { + tv = ClueView(this) + if (j == 0) { + tv.textRotation = 90f + if (orientation == Configuration.ORIENTATION_LANDSCAPE) { + params.height /= 2 + tv.showText = false + } else { + params.height = (96 * dp).toInt() + } + if (x >= 0) { + tv.setColumn(q, x) + } + } + if (i == 0) { + if (orientation == Configuration.ORIENTATION_PORTRAIT) { + params.width /= 2 + tv.showText = false + } else { + params.width = (96 * dp).toInt() + } + if (y >= 0) { + tv.setRow(q, y) + } + } + } + grid.addView(tv, params) + } + } + + Log.v(TAG, "icon: \n" + sb) + } +} + +class PixelButton(context: Context) : CompoundButton(context) { + init { + setBackgroundResource(R.drawable.pixel_bg) + isClickable = true + isEnabled = true + } +} + +class ClueView(context: Context) : View(context) { + var row: Int = -1 + var column: Int = -1 + var textRotation: Float = 0f + var text: CharSequence = "" + var showText = true + val paint: TextPaint + val incorrectColor: Int + val correctColor: Int + + init { + setBackgroundColor(0) + paint = TextPaint().also { + it.textSize = 14f * context.resources.displayMetrics.density + it.color = context.getColor(R.color.q_clue_text) + it.typeface = Typeface.DEFAULT_BOLD + it.textAlign = Paint.Align.CENTER + } + incorrectColor = context.getColor(R.color.q_clue_bg) + correctColor = context.getColor(R.color.q_clue_bg_correct) + } + + fun setRow(q: Quare, row: Int): Boolean { + this.row = row + this.column = -1 + this.textRotation = 0f + text = q.getRowClue(row).joinToString("-") + return check(q) + } + fun setColumn(q: Quare, column: Int): Boolean { + this.column = column + this.row = -1 + this.textRotation = 90f + text = q.getColumnClue(column).joinToString("-") + return check(q) + } + fun check(q: Quare): Boolean { + val correct = q.check(column, row) + setBackgroundColor(if (correct) correctColor else incorrectColor) + return correct + } + + override fun onDraw(canvas: Canvas?) { + super.onDraw(canvas) + if (!showText) return + canvas?.let { + val x = canvas.width / 2f + val y = canvas.height / 2f + var textWidth = canvas.width + if (textRotation != 0f) { + canvas.rotate(textRotation, x, y) + textWidth = canvas.height + } + val textLayout = StaticLayout.Builder.obtain( + text, 0, text.length, paint, textWidth).build() + canvas.translate(x, y - textLayout.height / 2) + textLayout.draw(canvas) + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java index 932e40c77af0..a5857df8ba5a 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java @@ -282,6 +282,7 @@ public abstract class BiometricDialogView extends LinearLayout { if (mRestoredState == null) { updateState(STATE_AUTHENTICATING); + mNegativeButton.setText(mBundle.getCharSequence(BiometricPrompt.KEY_NEGATIVE_TEXT)); final int hint = getHintStringResourceId(); if (hint != 0) { mErrorText.setText(hint); @@ -319,8 +320,6 @@ public abstract class BiometricDialogView extends LinearLayout { mDescriptionText.setText(descriptionText); } - mNegativeButton.setText(mBundle.getCharSequence(BiometricPrompt.KEY_NEGATIVE_TEXT)); - if (requiresConfirmation() && mRestoredState == null) { mPositiveButton.setVisibility(View.VISIBLE); mPositiveButton.setEnabled(false); @@ -474,6 +473,8 @@ public abstract class BiometricDialogView extends LinearLayout { mHandler.removeMessages(MSG_RESET_MESSAGE); mErrorText.setTextColor(mTextColor); mErrorText.setText(R.string.biometric_dialog_tap_confirm); + mErrorText.setContentDescription( + getResources().getString(R.string.biometric_dialog_tap_confirm)); mErrorText.setVisibility(View.VISIBLE); announceAccessibilityEvent(); mPositiveButton.setVisibility(View.VISIBLE); @@ -487,6 +488,7 @@ public abstract class BiometricDialogView extends LinearLayout { if (newState == STATE_PENDING_CONFIRMATION || newState == STATE_AUTHENTICATED) { mNegativeButton.setText(R.string.cancel); + mNegativeButton.setContentDescription(getResources().getString(R.string.cancel)); } updateIcon(mState, newState); diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 819ce5f317e8..6b2721a8440e 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -210,6 +210,7 @@ public class KeyguardViewMediator extends SystemUI { private boolean mBootCompleted; private boolean mBootSendUserPresent; private boolean mShuttingDown; + private boolean mDozing; /** High level access to the power manager for WakeLocks */ private PowerManager mPM; @@ -713,11 +714,10 @@ public class KeyguardViewMediator extends SystemUI { com.android.keyguard.R.bool.config_enableKeyguardService)) { setShowingLocked(!shouldWaitForProvisioning() && !mLockPatternUtils.isLockScreenDisabled( - KeyguardUpdateMonitor.getCurrentUser()), - mAodShowing, true /* forceCallbacks */); + KeyguardUpdateMonitor.getCurrentUser()), true /* forceCallbacks */); } else { // The system's keyguard is disabled or missing. - setShowingLocked(false, mAodShowing, true); + setShowingLocked(false /* showing */, true /* forceCallbacks */); } mStatusBarKeyguardViewManager = @@ -1326,7 +1326,7 @@ public class KeyguardViewMediator extends SystemUI { if (mLockPatternUtils.checkVoldPassword(KeyguardUpdateMonitor.getCurrentUser())) { if (DEBUG) Log.d(TAG, "Not showing lock screen since just decrypted"); // Without this, settings is not enabled until the lock screen first appears - setShowingLocked(false, mAodShowing); + setShowingLocked(false); hideLocked(); return; } @@ -1742,6 +1742,9 @@ public class KeyguardViewMediator extends SystemUI { private void updateActivityLockScreenState(boolean showing, boolean aodShowing) { mUiOffloadThread.submit(() -> { + if (DEBUG) { + Log.d(TAG, "updateActivityLockScreenState(" + showing + ", " + aodShowing + ")"); + } try { ActivityTaskManager.getService().setLockScreenShown(showing, aodShowing); } catch (RemoteException e) { @@ -1767,10 +1770,10 @@ public class KeyguardViewMediator extends SystemUI { if (DEBUG) Log.d(TAG, "handleShow"); } - setShowingLocked(true, mAodShowing); - mStatusBarKeyguardViewManager.show(options); mHiding = false; mWakeAndUnlocking = false; + setShowingLocked(true); + mStatusBarKeyguardViewManager.show(options); resetKeyguardDonePendingLocked(); mHideAnimationRun = false; adjustStatusBarLocked(); @@ -1877,7 +1880,7 @@ public class KeyguardViewMediator extends SystemUI { if (!mHiding) { // Tell ActivityManager that we canceled the keyguardExitAnimation. - setShowingLocked(mShowing, mAodShowing, true /* force */); + setShowingLocked(mShowing, true /* force */); return; } mHiding = false; @@ -1898,8 +1901,8 @@ public class KeyguardViewMediator extends SystemUI { playSounds(false); } + setShowingLocked(false); mWakeAndUnlocking = false; - setShowingLocked(false, mAodShowing); mDismissCallbackRegistry.notifyDismissSucceeded(); mStatusBarKeyguardViewManager.hide(startTime, fadeoutDuration); resetKeyguardDonePendingLocked(); @@ -1959,7 +1962,7 @@ public class KeyguardViewMediator extends SystemUI { Trace.beginSection("KeyguardViewMediator#handleVerifyUnlock"); synchronized (KeyguardViewMediator.this) { if (DEBUG) Log.d(TAG, "handleVerifyUnlock"); - setShowingLocked(true, mAodShowing); + setShowingLocked(true); mStatusBarKeyguardViewManager.dismissAndCollapse(); } Trace.endSection(); @@ -2107,6 +2110,8 @@ public class KeyguardViewMediator extends SystemUI { pw.print(" mDeviceInteractive: "); pw.println(mDeviceInteractive); pw.print(" mGoingToSleep: "); pw.println(mGoingToSleep); pw.print(" mHiding: "); pw.println(mHiding); + pw.print(" mDozing: "); pw.println(mDozing); + pw.print(" mAodShowing: "); pw.println(mAodShowing); pw.print(" mWaitingUntilKeyguardVisible: "); pw.println(mWaitingUntilKeyguardVisible); pw.print(" mKeyguardDonePending: "); pw.println(mKeyguardDonePending); pw.print(" mHideAnimationRun: "); pw.println(mHideAnimationRun); @@ -2117,10 +2122,14 @@ public class KeyguardViewMediator extends SystemUI { } /** - * @param aodShowing true when AOD - or ambient mode - is showing. + * @param dozing true when AOD - or ambient mode - is showing. */ - public void setAodShowing(boolean aodShowing) { - setShowingLocked(mShowing, aodShowing); + public void setDozing(boolean dozing) { + if (dozing == mDozing) { + return; + } + mDozing = dozing; + setShowingLocked(mShowing); } /** @@ -2141,19 +2150,18 @@ public class KeyguardViewMediator extends SystemUI { } } - private void setShowingLocked(boolean showing, boolean aodShowing) { - setShowingLocked(showing, aodShowing, false /* forceCallbacks */); + private void setShowingLocked(boolean showing) { + setShowingLocked(showing, false /* forceCallbacks */); } - private void setShowingLocked(boolean showing, boolean aodShowing, boolean forceCallbacks) { + private void setShowingLocked(boolean showing, boolean forceCallbacks) { + final boolean aodShowing = mDozing && !mWakeAndUnlocking; final boolean notifyDefaultDisplayCallbacks = showing != mShowing || aodShowing != mAodShowing || forceCallbacks; + mShowing = showing; + mAodShowing = aodShowing; if (notifyDefaultDisplayCallbacks) { - mShowing = showing; - mAodShowing = aodShowing; - if (notifyDefaultDisplayCallbacks) { - notifyDefaultDisplayCallbacks(showing); - } + notifyDefaultDisplayCallbacks(showing); updateActivityLockScreenState(showing, aodShowing); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java index c44f953615e3..cbaf85c511dd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Rect; +import android.graphics.Region; import android.util.Log; import android.util.Pools; import android.view.DisplayCutout; @@ -88,7 +89,7 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, private int[] mTmpTwoArray = new int[2]; private boolean mHeadsUpGoingAway; private int mStatusBarState; - private Rect mTouchableRegion = new Rect(); + private Region mTouchableRegion = new Region(); private AnimationStateHandler mAnimationStateHandler; @@ -365,10 +366,11 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, info.touchableRegion.set(calculateTouchableRegion()); } - public Rect calculateTouchableRegion() { + public Region calculateTouchableRegion() { if (!hasPinnedHeadsUp()) { mTouchableRegion.set(0, 0, mStatusBarWindowView.getWidth(), mStatusBarHeight); updateRegionForNotch(mTouchableRegion); + } else { NotificationEntry topEntry = getTopEntry(); if (topEntry.isChildInGroup()) { @@ -388,7 +390,7 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, return mTouchableRegion; } - private void updateRegionForNotch(Rect region) { + private void updateRegionForNotch(Region region) { DisplayCutout cutout = mStatusBarWindowView.getRootWindowInsets().getDisplayCutout(); if (cutout == null) { return; @@ -460,6 +462,8 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, super.dumpInternal(fd, pw, args); pw.print(" mBarState="); pw.println(mStatusBarState); + pw.print(" mTouchableRegion="); + pw.println(mTouchableRegion); } /////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index f64fc81f37ef..971a7eeaca12 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -38,6 +38,7 @@ import android.graphics.PointF; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; +import android.graphics.Region; import android.os.PowerManager; import android.util.AttributeSet; import android.util.Log; @@ -676,9 +677,10 @@ public class NotificationPanelView extends PanelView implements private Rect calculateGestureExclusionRect() { Rect exclusionRect = null; - if (isFullyCollapsed()) { + Region touchableRegion = mHeadsUpManager.calculateTouchableRegion(); + if (isFullyCollapsed() && touchableRegion != null) { // Note: The heads up manager also calculates the non-pinned touchable region - exclusionRect = mHeadsUpManager.calculateTouchableRegion(); + exclusionRect = touchableRegion.getBounds(); } return exclusionRect != null ? exclusionRect diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 0970f2a7ae67..aebf1c8e2169 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -1937,6 +1937,7 @@ public class StatusBar extends SystemUI implements DemoMode, if (start) { mNotificationPanel.startWaitingForOpenPanelGesture(); + setPanelExpanded(true); } else { mNotificationPanel.stopWaitingForOpenPanelGesture(velocity); } @@ -3434,7 +3435,7 @@ public class StatusBar extends SystemUI implements DemoMode, mNotificationPanel.resetViews(dozingAnimated); updateQsExpansionEnabled(); - mKeyguardViewMediator.setAodShowing(mDozing); + mKeyguardViewMediator.setDozing(mDozing); mEntryManager.updateNotifications(); updateDozingState(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index b21ba096c361..45627631efe1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -163,7 +163,8 @@ public class MobileSignalController extends SignalController< | PhoneStateListener.LISTEN_CALL_STATE | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE | PhoneStateListener.LISTEN_DATA_ACTIVITY - | PhoneStateListener.LISTEN_CARRIER_NETWORK_CHANGE); + | PhoneStateListener.LISTEN_CARRIER_NETWORK_CHANGE + | PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE); mContext.getContentResolver().registerContentObserver(Global.getUriFor(Global.MOBILE_DATA), true, mObserver); mContext.getContentResolver().registerContentObserver(Global.getUriFor( @@ -636,6 +637,13 @@ public class MobileSignalController extends SignalController< updateTelephony(); } + + @Override + public void onActiveDataSubscriptionIdChanged(int subId) { + if (DEBUG) Log.d(mTag, "onActiveDataSubscriptionIdChanged: subId=" + subId); + updateDataSim(); + updateTelephony(); + } }; static class MobileIconGroup extends SignalController.IconGroup { diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java index 3ebe70266c71..b36bbaa252c2 100644 --- a/services/core/java/com/android/server/LocationManagerService.java +++ b/services/core/java/com/android/server/LocationManagerService.java @@ -97,6 +97,7 @@ import com.android.internal.location.ProviderProperties; import com.android.internal.location.ProviderRequest; import com.android.internal.util.ArrayUtils; import com.android.internal.util.DumpUtils; +import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.server.location.AbstractLocationProvider; import com.android.server.location.ActivityRecognitionProxy; @@ -905,7 +906,8 @@ public class LocationManagerService extends ILocationManager.Stub { Integer.parseInt(fragments[9]) /* accuracy */); LocationProvider testProviderManager = new LocationProvider(name); addProviderLocked(testProviderManager); - new MockProvider(mContext, testProviderManager, properties); + testProviderManager.attachLocked( + new MockProvider(mContext, testProviderManager, properties)); } } @@ -1026,38 +1028,55 @@ public class LocationManagerService extends ILocationManager.Stub { return mProperties; } - @GuardedBy("mLock") - public void setRequestLocked(ProviderRequest request, WorkSource workSource) { - if (mProvider != null) { - long identity = Binder.clearCallingIdentity(); - try { - mProvider.setRequest(request, workSource); - } finally { - Binder.restoreCallingIdentity(identity); + public void setRequest(ProviderRequest request, WorkSource workSource) { + // move calls going to providers onto a different thread to avoid deadlock + mHandler.post(() -> { + synchronized (mLock) { + if (mProvider != null) { + mProvider.onSetRequest(request, workSource); + } } - } + }); + } + + public void sendExtraCommand(String command, Bundle extras) { + int uid = Binder.getCallingUid(); + int pid = Binder.getCallingPid(); + + // move calls going to providers onto a different thread to avoid deadlock + mHandler.post(() -> { + synchronized (mLock) { + if (mProvider != null) { + mProvider.onSendExtraCommand(uid, pid, command, extras); + } + } + }); } @GuardedBy("mLock") - public void dumpLocked(FileDescriptor fd, PrintWriter pw, String[] args) { - pw.print(" " + mName + " provider"); + public void dumpLocked(FileDescriptor fd, IndentingPrintWriter pw, String[] args) { + pw.print(mName + " provider"); if (isMock()) { pw.print(" [mock]"); } pw.println(":"); - pw.println(" useable=" + mUseable); + pw.increaseIndent(); + + pw.println("useable=" + mUseable); if (!mUseable) { - pw.println(" attached=" + (mProvider != null)); + pw.println("attached=" + (mProvider != null)); if (mIsManagedBySettings) { - pw.println(" allowed=" + mAllowed); + pw.println("allowed=" + mAllowed); } - pw.println(" enabled=" + mEnabled); + pw.println("enabled=" + mEnabled); } - pw.println(" properties=" + mProperties); + pw.println("properties=" + mProperties); if (mProvider != null) { + // in order to be consistent with other provider APIs, this should be run on the + // location thread... but this likely isn't worth it just for dumping info. long identity = Binder.clearCallingIdentity(); try { mProvider.dump(fd, pw, args); @@ -1065,6 +1084,8 @@ public class LocationManagerService extends ILocationManager.Stub { Binder.restoreCallingIdentity(identity); } } + + pw.decreaseIndent(); } @GuardedBy("mLock") @@ -1095,79 +1116,53 @@ public class LocationManagerService extends ILocationManager.Stub { } } - @GuardedBy("mLock") - public void sendExtraCommandLocked(String command, Bundle extras) { - if (mProvider != null) { - // intentionally do not clear binder identity so that providers can evaluate who - // is sending the extra command - mProvider.sendExtraCommand(command, extras); - } - } - - // called from any thread @Override public void onReportLocation(Location location) { - // no security check necessary because this is coming from an internal-only interface - // move calls coming from below LMS onto a different thread to avoid deadlock - mHandler.post(() -> { - synchronized (mLock) { - handleLocationChangedLocked(location, this); - } - }); + synchronized (mLock) { + handleLocationChangedLocked(location, this); + } } - // called from any thread @Override public void onReportLocation(List<Location> locations) { - // move calls coming from below LMS onto a different thread to avoid deadlock - mHandler.post(() -> { - synchronized (mLock) { - LocationProvider gpsProvider = getLocationProviderLocked(GPS_PROVIDER); - if (gpsProvider == null || !gpsProvider.isUseableLocked()) { - Slog.w(TAG, "reportLocationBatch() called without user permission"); - return; - } + synchronized (mLock) { + LocationProvider gpsProvider = getLocationProviderLocked(GPS_PROVIDER); + if (gpsProvider == null || !gpsProvider.isUseableLocked()) { + Slog.w(TAG, "reportLocationBatch() called without user permission"); + return; + } - if (mGnssBatchingCallback == null) { - Slog.e(TAG, "reportLocationBatch() called without active Callback"); - return; - } + if (mGnssBatchingCallback == null) { + Slog.e(TAG, "reportLocationBatch() called without active Callback"); + return; + } - try { - mGnssBatchingCallback.onLocationBatch(locations); - } catch (RemoteException e) { - Slog.e(TAG, "mGnssBatchingCallback.onLocationBatch failed", e); - } + try { + mGnssBatchingCallback.onLocationBatch(locations); + } catch (RemoteException e) { + Slog.e(TAG, "mGnssBatchingCallback.onLocationBatch failed", e); } - }); + } } - // called from any thread @Override public void onSetEnabled(boolean enabled) { - // move calls coming from below LMS onto a different thread to avoid deadlock - mHandler.post(() -> { - synchronized (mLock) { - if (enabled == mEnabled) { - return; - } - - if (D) { - Log.d(TAG, mName + " provider enabled is now " + mEnabled); - } + synchronized (mLock) { + if (enabled == mEnabled) { + return; + } - mEnabled = enabled; - onUseableChangedLocked(false); + if (D) { + Log.d(TAG, mName + " provider enabled is now " + mEnabled); } - }); + + mEnabled = enabled; + onUseableChangedLocked(false); + } } @Override public void onSetProperties(ProviderProperties properties) { - // because this does not invoke any other methods which might result in calling back - // into the location provider, it is safe to run this on the calling thread. it is also - // currently necessary to run this on the calling thread to ensure that property changes - // are publicly visibly immediately, ie for mock providers which are created. synchronized (mLock) { mProperties = properties; } @@ -1325,9 +1320,8 @@ public class LocationManagerService extends ILocationManager.Stub { } @Override - @GuardedBy("mLock") - public void setRequestLocked(ProviderRequest request, WorkSource workSource) { - super.setRequestLocked(request, workSource); + public void setRequest(ProviderRequest request, WorkSource workSource) { + super.setRequest(request, workSource); mCurrentRequest = request; } @@ -2232,7 +2226,7 @@ public class LocationManagerService extends ILocationManager.Stub { } } - provider.setRequestLocked(providerRequest, worksource); + provider.setRequest(providerRequest, worksource); } /** @@ -2916,6 +2910,12 @@ public class LocationManagerService extends ILocationManager.Stub { mCallerIdentity = callerIdentity; mListenerName = listenerName; } + + @Override + public String toString() { + return mListenerName + "[" + mCallerIdentity.mPackageName + "(" + mCallerIdentity.mPid + + ")]"; + } } private static class LinkedListener<TListener> extends LinkedListenerBase { @@ -3116,7 +3116,7 @@ public class LocationManagerService extends ILocationManager.Stub { LocationProvider provider = getLocationProviderLocked(providerName); if (provider != null) { - provider.sendExtraCommandLocked(command, extras); + provider.sendExtraCommand(command, extras); } mLocationUsageLogger.logLocationApiUsage( @@ -3671,6 +3671,8 @@ public class LocationManagerService extends ILocationManager.Stub { protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return; + IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " "); + synchronized (mLock) { if (args.length > 0 && args[0].equals("--gnssmetrics")) { if (mGnssMetricsProvider != null) { @@ -3678,115 +3680,133 @@ public class LocationManagerService extends ILocationManager.Stub { } return; } - pw.println("Current Location Manager state:"); - pw.print(" Current System Time: " + + ipw.println("Location Manager State:"); + ipw.increaseIndent(); + ipw.print("Current System Time: " + TimeUtils.logTimeOfDay(System.currentTimeMillis())); - pw.println(", Current Elapsed Time: " + ipw.println(", Current Elapsed Time: " + TimeUtils.formatDuration(SystemClock.elapsedRealtime())); - pw.println(" Current user: " + mCurrentUserId + " " + Arrays.toString( + ipw.println("Current user: " + mCurrentUserId + " " + Arrays.toString( mCurrentUserProfiles)); - pw.println(" Location mode: " + isLocationEnabled()); - pw.println(" Battery Saver Location Mode: " + ipw.println("Location Mode: " + isLocationEnabled()); + ipw.println("Battery Saver Location Mode: " + locationPowerSaveModeToString(mBatterySaverMode)); - pw.println(" Location Listeners:"); + + ipw.println("Location Listeners:"); + ipw.increaseIndent(); for (Receiver receiver : mReceivers.values()) { - pw.println(" " + receiver); + ipw.println(receiver); } - pw.println(" Active Records by Provider:"); + ipw.decreaseIndent(); + + ipw.println("Active Records by Provider:"); + ipw.increaseIndent(); for (Map.Entry<String, ArrayList<UpdateRecord>> entry : mRecordsByProvider.entrySet()) { - pw.println(" " + entry.getKey() + ":"); + ipw.println(entry.getKey() + ":"); + ipw.increaseIndent(); for (UpdateRecord record : entry.getValue()) { - pw.println(" " + record); + ipw.println(record); } + ipw.decreaseIndent(); } + ipw.decreaseIndent(); - pw.println(" Active GnssMeasurement Listeners:"); - dumpGnssDataListenersLocked(pw, mGnssMeasurementsListeners); - pw.println(" Active GnssNavigationMessage Listeners:"); - dumpGnssDataListenersLocked(pw, mGnssNavigationMessageListeners); - pw.println(" Active GnssStatus Listeners:"); - dumpGnssDataListenersLocked(pw, mGnssStatusListeners); + ipw.println("GnssMeasurement Listeners:"); + ipw.increaseIndent(); + for (LinkedListenerBase listener : mGnssMeasurementsListeners.values()) { + ipw.println(listener + ": " + isThrottlingExemptLocked(listener.mCallerIdentity)); + } + ipw.decreaseIndent(); - pw.println(" Historical Records by Provider:"); + ipw.println("GnssNavigationMessage Listeners:"); + ipw.increaseIndent(); + for (LinkedListenerBase listener : mGnssNavigationMessageListeners.values()) { + ipw.println(listener + ": " + isThrottlingExemptLocked(listener.mCallerIdentity)); + } + ipw.decreaseIndent(); + + ipw.println("GnssStatus Listeners:"); + ipw.increaseIndent(); + for (LinkedListenerBase listener : mGnssStatusListeners.values()) { + ipw.println(listener + ": " + isThrottlingExemptLocked(listener.mCallerIdentity)); + } + ipw.decreaseIndent(); + + ipw.println("Historical Records by Provider:"); + ipw.increaseIndent(); for (Map.Entry<PackageProviderKey, PackageStatistics> entry : mRequestStatistics.statistics.entrySet()) { PackageProviderKey key = entry.getKey(); - PackageStatistics stats = entry.getValue(); - pw.println(" " + key.packageName + ": " + key.providerName + ": " + stats); + ipw.println(key.packageName + ": " + key.providerName + ": " + entry.getValue()); } - pw.println(" Last Known Locations:"); + ipw.decreaseIndent(); + + ipw.println("Last Known Locations:"); + ipw.increaseIndent(); for (Map.Entry<String, Location> entry : mLastLocation.entrySet()) { - String provider = entry.getKey(); - Location location = entry.getValue(); - pw.println(" " + provider + ": " + location); + ipw.println(entry.getKey() + ": " + entry.getValue()); } + ipw.decreaseIndent(); - pw.println(" Last Known Locations Coarse Intervals:"); + ipw.println("Last Known Coarse Locations:"); + ipw.increaseIndent(); for (Map.Entry<String, Location> entry : mLastLocationCoarseInterval.entrySet()) { - String provider = entry.getKey(); - Location location = entry.getValue(); - pw.println(" " + provider + ": " + location); + ipw.println(entry.getKey() + ": " + entry.getValue()); } + ipw.decreaseIndent(); if (mGeofenceManager != null) { - mGeofenceManager.dump(pw); - } else { - pw.println(" Geofences: null"); + ipw.println("Geofences:"); + ipw.increaseIndent(); + mGeofenceManager.dump(ipw); + ipw.decreaseIndent(); } if (mBlacklist != null) { - pw.append(" "); - mBlacklist.dump(pw); - } else { - pw.println(" mBlacklist=null"); + mBlacklist.dump(ipw); } if (mExtraLocationControllerPackage != null) { - pw.println(" Location controller extra package: " + mExtraLocationControllerPackage - + " enabled: " + mExtraLocationControllerPackageEnabled); + ipw.println("Location Controller Extra Package: " + mExtraLocationControllerPackage + + (mExtraLocationControllerPackageEnabled ? " [enabled]" : "[disabled]")); } if (!mBackgroundThrottlePackageWhitelist.isEmpty()) { - pw.println(" Throttling Whitelisted Packages:"); + ipw.println("Throttling Whitelisted Packages:"); + ipw.increaseIndent(); for (String packageName : mBackgroundThrottlePackageWhitelist) { - pw.println(" " + packageName); + ipw.println(packageName); } + ipw.decreaseIndent(); } if (!mIgnoreSettingsPackageWhitelist.isEmpty()) { - pw.println(" Bypass Whitelisted Packages:"); + ipw.println("Bypass Whitelisted Packages:"); + ipw.increaseIndent(); for (String packageName : mIgnoreSettingsPackageWhitelist) { - pw.println(" " + packageName); + ipw.println(packageName); } + ipw.decreaseIndent(); } if (mLocationFudger != null) { - pw.append(" fudger: "); - mLocationFudger.dump(fd, pw, args); - } else { - pw.println(" fudger: null"); + ipw.println("Location Fudger:"); + ipw.increaseIndent(); + mLocationFudger.dump(fd, ipw, args); + ipw.decreaseIndent(); } - if (args.length > 0 && "short".equals(args[0])) { - return; - } + ipw.println("Location Providers:"); + ipw.increaseIndent(); for (LocationProvider provider : mProviders) { - provider.dumpLocked(fd, pw, args); + provider.dumpLocked(fd, ipw, args); } + ipw.decreaseIndent(); + if (mGnssBatchingInProgress) { - pw.println(" GNSS batching in progress"); + ipw.println("GNSS batching in progress"); } } } - - @GuardedBy("mLock") - private void dumpGnssDataListenersLocked(PrintWriter pw, - ArrayMap<IBinder, ? extends LinkedListenerBase> gnssDataListeners) { - for (LinkedListenerBase listener : gnssDataListeners.values()) { - CallerIdentity callerIdentity = listener.mCallerIdentity; - pw.println(" " + callerIdentity.mPid + " " + callerIdentity.mUid + " " - + callerIdentity.mPackageName + ": " - + isThrottlingExemptLocked(callerIdentity)); - } - } } diff --git a/services/core/java/com/android/server/Watchdog.java b/services/core/java/com/android/server/Watchdog.java index 19ad32e202fe..a502ff24e5b8 100644 --- a/services/core/java/com/android/server/Watchdog.java +++ b/services/core/java/com/android/server/Watchdog.java @@ -103,6 +103,7 @@ public class Watchdog extends Thread { public static final List<String> HAL_INTERFACES_OF_INTEREST = Arrays.asList( "android.hardware.audio@2.0::IDevicesFactory", "android.hardware.audio@4.0::IDevicesFactory", + "android.hardware.audio@5.0::IDevicesFactory", "android.hardware.biometrics.face@1.0::IBiometricsFace", "android.hardware.bluetooth@1.0::IBluetoothHci", "android.hardware.camera.provider@2.4::ICameraProvider", diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index a53786572f6c..89e97d2419d8 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -366,7 +366,7 @@ public class AudioService extends IAudioService.Stub AudioSystem.STREAM_MUSIC, // STREAM_MUSIC AudioSystem.STREAM_MUSIC, // STREAM_ALARM AudioSystem.STREAM_MUSIC, // STREAM_NOTIFICATION - AudioSystem.STREAM_MUSIC, // STREAM_BLUETOOTH_SCO + AudioSystem.STREAM_BLUETOOTH_SCO, // STREAM_BLUETOOTH_SCO AudioSystem.STREAM_MUSIC, // STREAM_SYSTEM_ENFORCED AudioSystem.STREAM_MUSIC, // STREAM_DTMF AudioSystem.STREAM_MUSIC, // STREAM_TTS diff --git a/services/core/java/com/android/server/infra/AbstractPerUserSystemService.java b/services/core/java/com/android/server/infra/AbstractPerUserSystemService.java index c52921ef344b..16cf7eef6a1e 100644 --- a/services/core/java/com/android/server/infra/AbstractPerUserSystemService.java +++ b/services/core/java/com/android/server/infra/AbstractPerUserSystemService.java @@ -75,6 +75,14 @@ public abstract class AbstractPerUserSystemService<S extends AbstractPerUserSyst mMaster = master; mLock = lock; mUserId = userId; + updateIsSetupComplete(userId); + } + + /** Updates whether setup is complete for current user */ + private void updateIsSetupComplete(@UserIdInt int userId) { + final String setupComplete = Settings.Secure.getStringForUser( + getContext().getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, userId); + mSetupComplete = "1".equals(setupComplete); } /** @@ -143,9 +151,7 @@ public abstract class AbstractPerUserSystemService<S extends AbstractPerUserSyst + ", disabled=" + disabled + ", mDisabled=" + mDisabled); } - final String setupComplete = Settings.Secure.getStringForUser( - getContext().getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, mUserId); - mSetupComplete = "1".equals(setupComplete); + updateIsSetupComplete(mUserId); mDisabled = disabled; updateServiceInfoLocked(); diff --git a/services/core/java/com/android/server/location/AbstractLocationProvider.java b/services/core/java/com/android/server/location/AbstractLocationProvider.java index 8107e9fe3e67..c1a63940c080 100644 --- a/services/core/java/com/android/server/location/AbstractLocationProvider.java +++ b/services/core/java/com/android/server/location/AbstractLocationProvider.java @@ -77,6 +77,22 @@ public abstract class AbstractLocationProvider { } /** + * Call this method to report a change in provider enabled/disabled status. May be called from + * any thread. + */ + protected void setEnabled(boolean enabled) { + mLocationProviderManager.onSetEnabled(enabled); + } + + /** + * Call this method to report a change in provider properties. May be called from + * any thread. + */ + protected void setProperties(ProviderProperties properties) { + mLocationProviderManager.onSetProperties(properties); + } + + /** * Call this method to report a new location. May be called from any thread. */ protected void reportLocation(Location location) { @@ -91,39 +107,35 @@ public abstract class AbstractLocationProvider { } /** - * Call this method to report a change in provider enabled/disabled status. May be called from - * any thread. + * Invoked by the location service to return a list of packages currently associated with this + * provider. May be called from any thread. */ - protected void setEnabled(boolean enabled) { - mLocationProviderManager.onSetEnabled(enabled); + public List<String> getProviderPackages() { + return Collections.singletonList(mContext.getPackageName()); } /** - * Call this method to report a change in provider properties. May be called from - * any thread. + * Invoked by the location service to deliver a new request for fulfillment to the provider. + * Replaces any previous requests completely. Will always be invoked from the location service + * thread with a cleared binder identity. */ - protected void setProperties(ProviderProperties properties) { - mLocationProviderManager.onSetProperties(properties); - } - - /** Returns list of packages currently associated with this provider. */ - public List<String> getProviderPackages() { - return Collections.singletonList(mContext.getPackageName()); - } + public abstract void onSetRequest(ProviderRequest request, WorkSource source); /** - * Called when the location service delivers a new request for fulfillment to the provider. - * Replaces any previous requests completely. + * Invoked by the location service to deliver a custom command to this provider. Will always be + * invoked from the location service thread with a cleared binder identity. */ - public abstract void setRequest(ProviderRequest request, WorkSource source); + public void onSendExtraCommand(int uid, int pid, String command, Bundle extras) {} /** - * Called to dump debug or log information. + * Invoked by the location service to dump debug or log information. May be invoked from any + * thread. */ public abstract void dump(FileDescriptor fd, PrintWriter pw, String[] args); /** - * Retrieves the current status of the provider. + * Invoked by the location service to retrieve the current status of the provider. May be + * invoked from any thread. * * @deprecated Will be removed in a future release. */ @@ -133,7 +145,8 @@ public abstract class AbstractLocationProvider { } /** - * Retrieves the last update time of the status of the provider. + * Invoked by the location service to retrieve the last update time of the status of the + * provider. May be invoked from any thread. * * @deprecated Will be removed in a future release. */ @@ -141,10 +154,4 @@ public abstract class AbstractLocationProvider { public long getStatusUpdateTime() { return 0; } - - /** - * Sends a custom command to this provider. Called with the original binder identity of the - * caller. - */ - public abstract void sendExtraCommand(String command, Bundle extras); } diff --git a/services/core/java/com/android/server/location/GeofenceManager.java b/services/core/java/com/android/server/location/GeofenceManager.java index fafe99c9fe18..a1922067e7cf 100644 --- a/services/core/java/com/android/server/location/GeofenceManager.java +++ b/services/core/java/com/android/server/location/GeofenceManager.java @@ -16,11 +16,6 @@ package com.android.server.location; -import java.io.PrintWriter; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - import android.app.AppOpsManager; import android.app.PendingIntent; import android.content.ContentResolver; @@ -44,6 +39,11 @@ import android.util.Slog; import com.android.server.LocationManagerService; import com.android.server.PendingIntentUtils; +import java.io.PrintWriter; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + public class GeofenceManager implements LocationListener, PendingIntent.OnFinished { private static final String TAG = "GeofenceManager"; private static final boolean D = LocationManagerService.D; @@ -79,13 +79,13 @@ public class GeofenceManager implements LocationListener, PendingIntent.OnFinish private final GeofenceHandler mHandler; private final LocationBlacklist mBlacklist; - private Object mLock = new Object(); + private final Object mLock = new Object(); // access to members below is synchronized on mLock /** * A list containing all registered geofences. */ - private List<GeofenceState> mFences = new LinkedList<GeofenceState>(); + private List<GeofenceState> mFences = new LinkedList<>(); /** * This is set true when we have an active request for {@link Location} updates via @@ -272,8 +272,8 @@ public class GeofenceManager implements LocationListener, PendingIntent.OnFinish */ // Runs on the handler. private void updateFences() { - List<PendingIntent> enterIntents = new LinkedList<PendingIntent>(); - List<PendingIntent> exitIntents = new LinkedList<PendingIntent>(); + List<PendingIntent> enterIntents = new LinkedList<>(); + List<PendingIntent> exitIntents = new LinkedList<>(); synchronized (mLock) { mPendingUpdate = false; @@ -446,14 +446,8 @@ public class GeofenceManager implements LocationListener, PendingIntent.OnFinish } public void dump(PrintWriter pw) { - pw.println(" Geofences:"); - for (GeofenceState state : mFences) { - pw.append(" "); - pw.append(state.mPackageName); - pw.append(" "); - pw.append(state.mFence.toString()); - pw.append("\n"); + pw.println(state.mPackageName + " " + state.mFence); } } diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java index 88576187163f..6911b7c8f565 100644 --- a/services/core/java/com/android/server/location/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/GnssLocationProvider.java @@ -1028,7 +1028,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } @Override - public void setRequest(ProviderRequest request, WorkSource source) { + public void onSetRequest(ProviderRequest request, WorkSource source) { sendMessage(SET_REQUEST, 0, new GpsRequest(request, source)); } @@ -1165,7 +1165,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } @Override - public void sendExtraCommand(String command, Bundle extras) { + public void onSendExtraCommand(int uid, int pid, String command, Bundle extras) { long identity = Binder.clearCallingIdentity(); try { @@ -2171,18 +2171,18 @@ public class GnssLocationProvider extends AbstractLocationProvider implements @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { StringBuilder s = new StringBuilder(); - s.append(" mStarted=").append(mStarted).append(" (changed "); + s.append("mStarted=").append(mStarted).append(" (changed "); TimeUtils.formatDuration(SystemClock.elapsedRealtime() - mStartedChangedElapsedRealtime, s); s.append(" ago)").append('\n'); - s.append(" mFixInterval=").append(mFixInterval).append('\n'); - s.append(" mLowPowerMode=").append(mLowPowerMode).append('\n'); - s.append(" mGnssMeasurementsProvider.isRegistered()=") + s.append("mFixInterval=").append(mFixInterval).append('\n'); + s.append("mLowPowerMode=").append(mLowPowerMode).append('\n'); + s.append("mGnssMeasurementsProvider.isRegistered()=") .append(mGnssMeasurementsProvider.isRegistered()).append('\n'); - s.append(" mGnssNavigationMessageProvider.isRegistered()=") + s.append("mGnssNavigationMessageProvider.isRegistered()=") .append(mGnssNavigationMessageProvider.isRegistered()).append('\n'); - s.append(" mDisableGpsForPowerManager=").append(mDisableGpsForPowerManager).append('\n'); - s.append(" mTopHalCapabilities=0x").append(Integer.toHexString(mTopHalCapabilities)); + s.append("mDisableGpsForPowerManager=").append(mDisableGpsForPowerManager).append('\n'); + s.append("mTopHalCapabilities=0x").append(Integer.toHexString(mTopHalCapabilities)); s.append(" ( "); if (hasCapability(GPS_CAPABILITY_SCHEDULING)) s.append("SCHEDULING "); if (hasCapability(GPS_CAPABILITY_MSB)) s.append("MSB "); @@ -2199,12 +2199,13 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } s.append(")\n"); if (hasCapability(GPS_CAPABILITY_MEASUREMENT_CORRECTIONS)) { - s.append(" SubHal=MEASUREMENT_CORRECTIONS["); + s.append("SubHal=MEASUREMENT_CORRECTIONS["); s.append(mGnssMeasurementCorrectionsProvider.toStringCapabilities()); s.append("]\n"); } s.append(mGnssMetrics.dumpGnssMetricsAsText()); - s.append(" native internal state: ").append(native_get_internal_state()); + s.append("native internal state: \n"); + s.append(" ").append(native_get_internal_state()); s.append("\n"); pw.append(s); } diff --git a/services/core/java/com/android/server/location/LocationProviderProxy.java b/services/core/java/com/android/server/location/LocationProviderProxy.java index ddbc20358a9d..09911ff1a74e 100644 --- a/services/core/java/com/android/server/location/LocationProviderProxy.java +++ b/services/core/java/com/android/server/location/LocationProviderProxy.java @@ -168,7 +168,7 @@ public class LocationProviderProxy extends AbstractLocationProvider { } @Override - public void setRequest(ProviderRequest request, WorkSource source) { + public void onSetRequest(ProviderRequest request, WorkSource source) { synchronized (mRequestLock) { mRequest = request; mWorkSource = source; @@ -181,10 +181,10 @@ public class LocationProviderProxy extends AbstractLocationProvider { @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { - pw.println(" service=" + mServiceWatcher); + pw.println("service=" + mServiceWatcher); synchronized (mProviderPackagesLock) { if (mProviderPackages.size() > 1) { - pw.println(" additional packages=" + mProviderPackages); + pw.println("additional packages=" + mProviderPackages); } } } @@ -206,7 +206,7 @@ public class LocationProviderProxy extends AbstractLocationProvider { } @Override - public void sendExtraCommand(String command, Bundle extras) { + public void onSendExtraCommand(int uid, int pid, String command, Bundle extras) { mServiceWatcher.runOnBinder(binder -> { ILocationProvider service = ILocationProvider.Stub.asInterface(binder); service.sendExtraCommand(command, extras); diff --git a/services/core/java/com/android/server/location/MockProvider.java b/services/core/java/com/android/server/location/MockProvider.java index 6accad8a93a0..b0c4c2e65fd8 100644 --- a/services/core/java/com/android/server/location/MockProvider.java +++ b/services/core/java/com/android/server/location/MockProvider.java @@ -81,11 +81,11 @@ public class MockProvider extends AbstractLocationProvider { @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { - pw.println(" last location=" + mLocation); + pw.println("last location=" + mLocation); } @Override - public void setRequest(ProviderRequest request, WorkSource source) {} + public void onSetRequest(ProviderRequest request, WorkSource source) {} @Override public int getStatus(Bundle extras) { @@ -101,7 +101,4 @@ public class MockProvider extends AbstractLocationProvider { public long getStatusUpdateTime() { return mStatusUpdateTime; } - - @Override - public void sendExtraCommand(String command, Bundle extras) {} } diff --git a/services/core/java/com/android/server/location/PassiveProvider.java b/services/core/java/com/android/server/location/PassiveProvider.java index 3a841c91399e..639b1eb1ed5e 100644 --- a/services/core/java/com/android/server/location/PassiveProvider.java +++ b/services/core/java/com/android/server/location/PassiveProvider.java @@ -19,7 +19,6 @@ package com.android.server.location; import android.content.Context; import android.location.Criteria; import android.location.Location; -import android.os.Bundle; import android.os.WorkSource; import com.android.internal.location.ProviderProperties; @@ -53,7 +52,7 @@ public class PassiveProvider extends AbstractLocationProvider { } @Override - public void setRequest(ProviderRequest request, WorkSource source) { + public void onSetRequest(ProviderRequest request, WorkSource source) { mReportLocation = request.reportLocation; } @@ -64,10 +63,7 @@ public class PassiveProvider extends AbstractLocationProvider { } @Override - public void sendExtraCommand(String command, Bundle extras) {} - - @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { - pw.println(" report location=" + mReportLocation); + pw.println("report location=" + mReportLocation); } } diff --git a/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java b/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java index c13fcd61eeab..9e3401882f45 100644 --- a/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java +++ b/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java @@ -85,9 +85,16 @@ final class MediaRoute2ProviderProxy implements ServiceConnection { mCallback = callback; } - public void setSelectedRoute(int uid, String routeId) { + public void selectRoute(String packageName, String routeId) { if (mConnectionReady) { - mActiveConnection.selectRoute(uid, routeId); + mActiveConnection.selectRoute(packageName, routeId); + updateBinding(); + } + } + + public void unselectRoute(String packageName, String routeId) { + if (mConnectionReady) { + mActiveConnection.unselectRotue(packageName, routeId); updateBinding(); } } @@ -235,17 +242,6 @@ final class MediaRoute2ProviderProxy implements ServiceConnection { } } - private void onRouteSelected(Connection connection, int uid, String routeId) { - if (mActiveConnection != connection) { - return; - } - - if (DEBUG) { - Slog.d(TAG, this + ": State changed "); - } - mHandler.post(mStateChanged); - } - private void onProviderInfoUpdated(Connection connection, MediaRoute2ProviderInfo info) { if (mActiveConnection != connection) { return; @@ -298,8 +294,8 @@ final class MediaRoute2ProviderProxy implements ServiceConnection { public boolean register() { try { mProvider.asBinder().linkToDeath(this, 0); - mProvider.registerClient(mClient); - mHandler.post((Runnable) () -> onConnectionReady(Connection.this)); + mProvider.setClient(mClient); + mHandler.post(() -> onConnectionReady(Connection.this)); return true; } catch (RemoteException ex) { binderDied(); @@ -312,23 +308,25 @@ final class MediaRoute2ProviderProxy implements ServiceConnection { mClient.dispose(); } - public void selectRoute(int uid, String id) { - if (mClient == null) { - return; - } + public void selectRoute(String packageName, String routeId) { try { - mProvider.selectRoute(mClient, uid, id); + mProvider.selectRoute(packageName, routeId); } catch (RemoteException ex) { Slog.e(TAG, "Failed to deliver request to set discovery mode.", ex); } } - public void sendControlRequest(String id, Intent request) { - if (mClient == null) { - return; + public void unselectRotue(String packageName, String routeId) { + try { + mProvider.unselectRoute(packageName, routeId); + } catch (RemoteException ex) { + Slog.e(TAG, "Failed to deliver request to set discovery mode.", ex); } + } + + public void sendControlRequest(String routeId, Intent request) { try { - mProvider.notifyControlRequestSent(mClient, id, request); + mProvider.notifyControlRequestSent(routeId, request); } catch (RemoteException ex) { Slog.e(TAG, "Failed to deliver request to send control request.", ex); } @@ -339,10 +337,6 @@ final class MediaRoute2ProviderProxy implements ServiceConnection { mHandler.post(() -> onConnectionDied(Connection.this)); } - void postRouteSelected(int uid, String routeId) { - mHandler.post(() -> onRouteSelected(Connection.this, uid, routeId)); - } - void postProviderUpdated(MediaRoute2ProviderInfo info) { mHandler.post(() -> onProviderInfoUpdated(Connection.this, info)); } @@ -360,14 +354,6 @@ final class MediaRoute2ProviderProxy implements ServiceConnection { } @Override - public void notifyRouteSelected(int uid, String routeId) throws RemoteException { - Connection connection = mConnectionRef.get(); - if (connection != null) { - connection.postRouteSelected(uid, routeId); - } - } - - @Override public void notifyProviderInfoUpdated(MediaRoute2ProviderInfo info) { Connection connection = mConnectionRef.get(); if (connection != null) { diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index 0398658f18cd..01936c9159dd 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -183,11 +183,11 @@ class MediaRouter2ServiceImpl { } public void selectClientRoute2(@NonNull IMediaRouter2Manager manager, - int clientUid, @Nullable MediaRoute2Info route) { + String packageName, @Nullable MediaRoute2Info route) { final long token = Binder.clearCallingIdentity(); try { synchronized (mLock) { - selectClientRoute2Locked(manager, clientUid, route); + selectClientRoute2Locked(manager, packageName, route); } } finally { Binder.restoreCallingIdentity(token); @@ -267,8 +267,7 @@ class MediaRouter2ServiceImpl { } } - private void selectRoute2Locked(IMediaRouter2Client client, - MediaRoute2Info route) { + private void selectRoute2Locked(IMediaRouter2Client client, MediaRoute2Info route) { ClientRecord clientRecord = mAllClientRecords.get(client.asBinder()); if (clientRecord != null) { MediaRoute2Info oldRoute = clientRecord.mSelectedRoute; @@ -364,10 +363,10 @@ class MediaRouter2ServiceImpl { } private void selectClientRoute2Locked(IMediaRouter2Manager manager, - int clientUid, MediaRoute2Info route) { + String packageName, MediaRoute2Info route) { ManagerRecord managerRecord = mAllManagerRecords.get(manager.asBinder()); if (managerRecord != null) { - ClientRecord clientRecord = managerRecord.mUserRecord.findClientRecordByUid(clientUid); + ClientRecord clientRecord = managerRecord.mUserRecord.findClientRecord(packageName); if (clientRecord == null) { Slog.w(TAG, "Ignoring route selection for unknown client."); } @@ -413,9 +412,11 @@ class MediaRouter2ServiceImpl { mHandler = new UserHandler(MediaRouter2ServiceImpl.this, this); } - ClientRecord findClientRecordByUid(int uid) { + ClientRecord findClientRecord(String packageName) { for (ClientRecord clientRecord : mClientRecords) { - if (clientRecord.mUid == uid) return clientRecord; + if (TextUtils.equals(clientRecord.mPackageName, packageName)) { + return clientRecord; + } } return null; } @@ -501,8 +502,7 @@ class MediaRouter2ServiceImpl { static final int MSG_STOP = 2; static final int MSG_UPDATE_CLIENT_USAGE = 11; - static final int MSG_UPDATE_MANAGER_STATE = 12; - static final int MSG_SEND_CONTROL_REQUEST = 13; + static final int MSG_SEND_CONTROL_REQUEST = 12; private final WeakReference<MediaRouter2ServiceImpl> mServiceRef; private final UserRecord mUserRecord; @@ -539,10 +539,6 @@ class MediaRouter2ServiceImpl { updateClientUsage((ClientRecord) msg.obj); break; } - case MSG_UPDATE_MANAGER_STATE: { - updateManagerState(); - break; - } case MSG_SEND_CONTROL_REQUEST: { Pair<MediaRoute2Info, Intent> obj = (Pair<MediaRoute2Info, Intent>) msg.obj; sendControlRequest(obj.first, obj.second); @@ -585,20 +581,24 @@ class MediaRouter2ServiceImpl { scheduleUpdateManagerState(); } - private void unselectRoute(ClientRecord clientRecord, MediaRoute2Info route) { + private void selectRoute(ClientRecord clientRecord, MediaRoute2Info route) { if (route != null) { MediaRoute2ProviderProxy provider = findProvider(route.getProviderId()); - if (provider != null) { - provider.setSelectedRoute(clientRecord.mUid, null); + if (provider == null) { + Log.w(TAG, "Ignoring to select route of unknown provider " + route); + } else { + provider.selectRoute(clientRecord.mPackageName, route.getId()); } } } - private void selectRoute(ClientRecord clientRecord, MediaRoute2Info route) { + private void unselectRoute(ClientRecord clientRecord, MediaRoute2Info route) { if (route != null) { MediaRoute2ProviderProxy provider = findProvider(route.getProviderId()); - if (provider != null) { - provider.setSelectedRoute(clientRecord.mUid, route.getId()); + if (provider == null) { + Log.w(TAG, "Ignoring to unselect route of unknown provider " + route); + } else { + provider.unselectRoute(clientRecord.mPackageName, route.getId()); } } } @@ -613,7 +613,7 @@ class MediaRouter2ServiceImpl { private void scheduleUpdateManagerState() { if (!mManagerStateUpdateScheduled) { mManagerStateUpdateScheduled = true; - sendEmptyMessage(MSG_UPDATE_MANAGER_STATE); + post(this::updateManagerState); } } @@ -670,8 +670,9 @@ class MediaRouter2ServiceImpl { } for (IMediaRouter2Manager manager : managers) { try { - manager.notifyRouteSelected(clientRecord.mUid, clientRecord.mSelectedRoute); - manager.notifyControlCategoriesChanged(clientRecord.mUid, + manager.notifyRouteSelected(clientRecord.mPackageName, + clientRecord.mSelectedRoute); + manager.notifyControlCategoriesChanged(clientRecord.mPackageName, clientRecord.mControlCategories); } catch (RemoteException ex) { Slog.w(TAG, "Failed to update client usage. Manager probably died.", ex); diff --git a/services/core/java/com/android/server/media/MediaRouterService.java b/services/core/java/com/android/server/media/MediaRouterService.java index 4577365b6c3a..a43068b87c06 100644 --- a/services/core/java/com/android/server/media/MediaRouterService.java +++ b/services/core/java/com/android/server/media/MediaRouterService.java @@ -482,8 +482,8 @@ public final class MediaRouterService extends IMediaRouterService.Stub // Binder call @Override public void selectClientRoute2(IMediaRouter2Manager manager, - int clientUid, MediaRoute2Info route) { - mService2.selectClientRoute2(manager, clientUid, route); + String packageName, MediaRoute2Info route) { + mService2.selectClientRoute2(manager, packageName, route); } // Binder call diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index 5bd4b2029e7b..c05655a6a5de 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -92,6 +92,7 @@ import com.android.server.Watchdog.Monitor; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; /** @@ -748,6 +749,8 @@ public class MediaSessionService extends SystemService implements Monitor { private final int mFullUserId; private final MediaSessionStack mPriorityStack; + private final HashMap<IBinder, CallbackRecord> mCallbacks = new HashMap<>(); + private PendingIntent mLastMediaButtonReceiver; private ComponentName mRestoredMediaButtonReceiver; private int mRestoredMediaButtonReceiverComponentType; @@ -761,7 +764,6 @@ public class MediaSessionService extends SystemService implements Monitor { private IOnMediaKeyListener mOnMediaKeyListener; private int mOnMediaKeyListenerUid; - private ICallback mCallback; FullUserRecord(int fullUserId) { mFullUserId = fullUserId; @@ -793,6 +795,24 @@ public class MediaSessionService extends SystemService implements Monitor { } } + public void registerCallbackLocked(ICallback callback, int uid) { + IBinder cbBinder = callback.asBinder(); + CallbackRecord cr = new CallbackRecord(callback, uid); + mCallbacks.put(cbBinder, cr); + try { + cbBinder.linkToDeath(cr, 0); + } catch (RemoteException e) { + Log.w(TAG, "Failed to register callback", e); + mCallbacks.remove(cbBinder); + } + } + + public void unregisterCallbackLocked(ICallback callback) { + IBinder cbBinder = callback.asBinder(); + CallbackRecord cr = mCallbacks.remove(cbBinder); + cbBinder.unlinkToDeath(cr, 0); + } + public void dumpLocked(PrintWriter pw, String prefix) { pw.print(prefix + "Record for full_user=" + mFullUserId); // Dump managed profile user ids associated with this user. @@ -811,7 +831,10 @@ public class MediaSessionService extends SystemService implements Monitor { pw.println(indent + "Media key listener: " + mOnMediaKeyListener); pw.println(indent + "Media key listener package: " + getCallingPackageName(mOnMediaKeyListenerUid)); - pw.println(indent + "Callback: " + mCallback); + pw.println(indent + "Callbacks: registered " + mCallbacks.size() + " callback(s)"); + for (CallbackRecord cr : mCallbacks.values()) { + pw.println(indent + " from " + getCallingPackageName(cr.uid)); + } pw.println(indent + "Last MediaButtonReceiver: " + mLastMediaButtonReceiver); pw.println(indent + "Restored MediaButtonReceiver: " + mRestoredMediaButtonReceiver); pw.println(indent + "Restored MediaButtonReceiverComponentType: " @@ -871,21 +894,18 @@ public class MediaSessionService extends SystemService implements Monitor { mFullUserId); } - private void pushAddressedPlayerChangedLocked() { - if (mCallback == null) { - return; - } + private void pushAddressedPlayerChangedLocked(ICallback callback) { try { MediaSessionRecord mediaButtonSession = getMediaButtonSessionLocked(); if (mediaButtonSession != null) { - mCallback.onAddressedPlayerChangedToMediaSession( + callback.onAddressedPlayerChangedToMediaSession( mediaButtonSession.getSessionToken()); } else if (mCurrentFullUserRecord.mLastMediaButtonReceiver != null) { - mCallback.onAddressedPlayerChangedToMediaButtonReceiver( + callback.onAddressedPlayerChangedToMediaButtonReceiver( mCurrentFullUserRecord.mLastMediaButtonReceiver .getIntent().getComponent()); } else if (mCurrentFullUserRecord.mRestoredMediaButtonReceiver != null) { - mCallback.onAddressedPlayerChangedToMediaButtonReceiver( + callback.onAddressedPlayerChangedToMediaButtonReceiver( mCurrentFullUserRecord.mRestoredMediaButtonReceiver); } } catch (RemoteException e) { @@ -893,6 +913,12 @@ public class MediaSessionService extends SystemService implements Monitor { } } + private void pushAddressedPlayerChangedLocked() { + for (CallbackRecord cr : mCallbacks.values()) { + pushAddressedPlayerChangedLocked(cr.callback); + } + } + private MediaSessionRecord getMediaButtonSessionLocked() { return isGlobalPriorityActiveLocked() ? mGlobalPrioritySession : mPriorityStack.getMediaButtonSession(); @@ -926,6 +952,23 @@ public class MediaSessionService extends SystemService implements Monitor { // Pick legacy behavior for BroadcastReceiver or unknown. return COMPONENT_TYPE_BROADCAST; } + + final class CallbackRecord implements IBinder.DeathRecipient { + public final ICallback callback; + public final int uid; + + CallbackRecord(ICallback callback, int uid) { + this.callback = callback; + this.uid = uid; + } + + @Override + public void binderDied() { + synchronized (mLock) { + mCallbacks.remove(callback.asBinder()); + } + } + } } final class SessionsListenerRecord implements IBinder.DeathRecipient { @@ -1305,44 +1348,53 @@ public class MediaSessionService extends SystemService implements Monitor { } @Override - public void setCallback(ICallback callback) { + public void registerCallback(final ICallback callback) { final int pid = Binder.getCallingPid(); final int uid = Binder.getCallingUid(); + final int userId = UserHandle.getUserId(uid); final long token = Binder.clearCallingIdentity(); try { - if (!UserHandle.isSameApp(uid, Process.BLUETOOTH_UID)) { - throw new SecurityException("Only Bluetooth service processes can set" - + " Callback"); + if (!hasMediaControlPermission(pid, uid)) { + throw new SecurityException("MEDIA_CONTENT_CONTROL permission is required to" + + " register Callback"); } synchronized (mLock) { - int userId = UserHandle.getUserId(uid); FullUserRecord user = getFullUserRecordLocked(userId); if (user == null || user.mFullUserId != userId) { - Log.w(TAG, "Only the full user can set the callback" + Log.w(TAG, "Only the full user can register the callback" + ", userId=" + userId); return; } - user.mCallback = callback; - Log.d(TAG, "The callback " + user.mCallback - + " is set by " + getCallingPackageName(uid)); - if (user.mCallback == null) { + user.registerCallbackLocked(callback, uid); + Log.d(TAG, "The callback (" + callback.asBinder() + + ") is registered by " + getCallingPackageName(uid)); + } + } finally { + Binder.restoreCallingIdentity(token); + } + } + + @Override + public void unregisterCallback(final ICallback callback) { + final int pid = Binder.getCallingPid(); + final int uid = Binder.getCallingUid(); + final int userId = UserHandle.getUserId(uid); + final long token = Binder.clearCallingIdentity(); + try { + if (!hasMediaControlPermission(pid, uid)) { + throw new SecurityException("MEDIA_CONTENT_CONTROL permission is required to" + + " unregister Callback"); + } + synchronized (mLock) { + FullUserRecord user = getFullUserRecordLocked(userId); + if (user == null || user.mFullUserId != userId) { + Log.w(TAG, "Only the full user can unregister the callback" + + ", userId=" + userId); return; } - try { - user.mCallback.asBinder().linkToDeath( - new IBinder.DeathRecipient() { - @Override - public void binderDied() { - synchronized (mLock) { - user.mCallback = null; - } - } - }, 0); - user.pushAddressedPlayerChangedLocked(); - } catch (RemoteException e) { - Log.w(TAG, "Failed to set callback", e); - user.mCallback = null; - } + user.unregisterCallbackLocked(callback); + Log.d(TAG, "The callback (" + callback.asBinder() + + ") is unregistered by " + getCallingPackageName(uid)); } } finally { Binder.restoreCallingIdentity(token); @@ -1771,6 +1823,7 @@ public class MediaSessionService extends SystemService implements Monitor { public boolean isTrusted(String controllerPackageName, int controllerPid, int controllerUid) throws RemoteException { final int uid = Binder.getCallingUid(); + final int userId = UserHandle.getUserId(uid); final long token = Binder.clearCallingIdentity(); try { // Don't perform sanity check between controllerPackageName and controllerUid. @@ -1781,8 +1834,8 @@ public class MediaSessionService extends SystemService implements Monitor { // Note that we can use Context#getOpPackageName() instead of // Context#getPackageName() for getting package name that matches with the PID/UID, // but it doesn't tell which package has created the MediaController, so useless. - return hasMediaControlPermission(UserHandle.getUserId(uid), controllerPackageName, - controllerPid, controllerUid); + return hasMediaControlPermission(controllerPid, controllerUid) + || hasEnabledNotificationListener(userId, controllerPackageName); } finally { Binder.restoreCallingIdentity(token); } @@ -1808,13 +1861,7 @@ public class MediaSessionService extends SystemService implements Monitor { return resolvedUserId; } - private boolean hasMediaControlPermission(int resolvedUserId, String packageName, - int pid, int uid) throws RemoteException { - // Allow API calls from the System UI and Settings - if (hasStatusBarServicePermission(pid, uid)) { - return true; - } - + private boolean hasMediaControlPermission(int pid, int uid) { // Check if it's system server or has MEDIA_CONTENT_CONTROL. // Note that system server doesn't have MEDIA_CONTENT_CONTROL, so we need extra // check here. @@ -1823,11 +1870,15 @@ public class MediaSessionService extends SystemService implements Monitor { == PackageManager.PERMISSION_GRANTED) { return true; } else if (DEBUG) { - Log.d(TAG, packageName + " (uid=" + uid + ") hasn't granted MEDIA_CONTENT_CONTROL"); + Log.d(TAG, "uid(" + uid + ") hasn't granted MEDIA_CONTENT_CONTROL"); } + return false; + } + private boolean hasEnabledNotificationListener(int resolvedUserId, String packageName) + throws RemoteException { // You may not access another user's content as an enabled listener. - final int userId = UserHandle.getUserId(uid); + final int userId = UserHandle.getUserId(resolvedUserId); if (resolvedUserId != userId) { return false; } @@ -1845,7 +1896,7 @@ public class MediaSessionService extends SystemService implements Monitor { } } if (DEBUG) { - Log.d(TAG, packageName + " (uid=" + uid + ") doesn't have an enabled " + Log.d(TAG, packageName + " (uid=" + resolvedUserId + ") doesn't have an enabled " + "notification listener"); } return false; @@ -1950,13 +2001,14 @@ public class MediaSessionService extends SystemService implements Monitor { session.sendMediaButton(packageName, pid, uid, asSystemService, keyEvent, needWakeLock ? mKeyEventReceiver.mLastTimeoutId : -1, mKeyEventReceiver); - if (mCurrentFullUserRecord.mCallback != null) { - try { - mCurrentFullUserRecord.mCallback.onMediaKeyEventDispatchedToMediaSession( + try { + for (FullUserRecord.CallbackRecord cr + : mCurrentFullUserRecord.mCallbacks.values()) { + cr.callback.onMediaKeyEventDispatchedToMediaSession( keyEvent, session.getSessionToken()); - } catch (RemoteException e) { - Log.w(TAG, "Failed to send callback", e); } + } catch (RemoteException e) { + Log.w(TAG, "Failed to send callback", e); } } else if (mCurrentFullUserRecord.mLastMediaButtonReceiver != null || mCurrentFullUserRecord.mRestoredMediaButtonReceiver != null) { @@ -1980,12 +2032,12 @@ public class MediaSessionService extends SystemService implements Monitor { receiver.send(mContext, needWakeLock ? mKeyEventReceiver.mLastTimeoutId : -1, mediaButtonIntent, mKeyEventReceiver, mHandler); - if (mCurrentFullUserRecord.mCallback != null) { - ComponentName componentName = mCurrentFullUserRecord - .mLastMediaButtonReceiver.getIntent().getComponent(); - if (componentName != null) { - mCurrentFullUserRecord.mCallback - .onMediaKeyEventDispatchedToMediaButtonReceiver( + ComponentName componentName = mCurrentFullUserRecord + .mLastMediaButtonReceiver.getIntent().getComponent(); + if (componentName != null) { + for (FullUserRecord.CallbackRecord cr + : mCurrentFullUserRecord.mCallbacks.values()) { + cr.callback.onMediaKeyEventDispatchedToMediaButtonReceiver( keyEvent, componentName); } } @@ -2018,9 +2070,9 @@ public class MediaSessionService extends SystemService implements Monitor { Log.w(TAG, "Error sending media button to the restored intent " + receiver + ", type=" + componentType, e); } - if (mCurrentFullUserRecord.mCallback != null) { - mCurrentFullUserRecord.mCallback - .onMediaKeyEventDispatchedToMediaButtonReceiver( + for (FullUserRecord.CallbackRecord cr + : mCurrentFullUserRecord.mCallbacks.values()) { + cr.callback.onMediaKeyEventDispatchedToMediaButtonReceiver( keyEvent, receiver); } } diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 819a1d9d2648..976931c5e86b 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -5122,23 +5122,25 @@ public class NotificationManagerService extends SystemService { } } - // snoozed apps - if (mSnoozeHelper.isSnoozed(userId, pkg, r.getKey())) { - MetricsLogger.action(r.getLogMaker() - .setType(MetricsProto.MetricsEvent.TYPE_UPDATE) - .setCategory(MetricsProto.MetricsEvent.NOTIFICATION_SNOOZED)); - if (DBG) { - Slog.d(TAG, "Ignored enqueue for snoozed notification " + r.getKey()); + synchronized (mNotificationLock) { + // snoozed apps + if (mSnoozeHelper.isSnoozed(userId, pkg, r.getKey())) { + MetricsLogger.action(r.getLogMaker() + .setType(MetricsProto.MetricsEvent.TYPE_UPDATE) + .setCategory(MetricsProto.MetricsEvent.NOTIFICATION_SNOOZED)); + if (DBG) { + Slog.d(TAG, "Ignored enqueue for snoozed notification " + r.getKey()); + } + mSnoozeHelper.update(userId, r); + handleSavePolicyFile(); + return false; } - mSnoozeHelper.update(userId, r); - handleSavePolicyFile(); - return false; - } - // blocked apps - if (isBlocked(r, mUsageStats)) { - return false; + // blocked apps + if (isBlocked(r, mUsageStats)) { + return false; + } } return true; diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java index 2301e3fb093d..dd099b15a464 100644 --- a/services/core/java/com/android/server/pm/ApexManager.java +++ b/services/core/java/com/android/server/pm/ApexManager.java @@ -158,9 +158,9 @@ abstract class ApexManager { * applied at next reboot. * * @param sessionId the identifier of the {@link PackageInstallerSession} being marked as ready. - * @return true upon success, false if the session is unknown. + * @throws PackageManagerException if call to apexd fails */ - abstract boolean markStagedSessionReady(int sessionId); + abstract void markStagedSessionReady(int sessionId) throws PackageManagerException; /** * Marks a staged session as successful. @@ -402,12 +402,16 @@ abstract class ApexManager { } @Override - boolean markStagedSessionReady(int sessionId) { + void markStagedSessionReady(int sessionId) throws PackageManagerException { try { - return mApexService.markStagedSessionReady(sessionId); + mApexService.markStagedSessionReady(sessionId); } catch (RemoteException re) { Slog.e(TAG, "Unable to contact apexservice", re); throw new RuntimeException(re); + } catch (Exception e) { + throw new PackageManagerException( + PackageInstaller.SessionInfo.STAGED_SESSION_VERIFICATION_FAILED, + "Failed to mark apexd session as ready : " + e.getMessage()); } } @@ -576,7 +580,7 @@ abstract class ApexManager { } @Override - boolean markStagedSessionReady(int sessionId) { + void markStagedSessionReady(int sessionId) { throw new UnsupportedOperationException(); } diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java index 404b515e233e..42b65c357959 100644 --- a/services/core/java/com/android/server/pm/StagingManager.java +++ b/services/core/java/com/android/server/pm/StagingManager.java @@ -278,10 +278,14 @@ public class StagingManager { // session as ready), then if a device gets rebooted right after the call to apexd, only // apex part of the train will be applied, leaving device in an inconsistent state. session.setStagedSessionReady(); - if (hasApex && !mApexManager.markStagedSessionReady(session.sessionId)) { - session.setStagedSessionFailed(SessionInfo.STAGED_SESSION_VERIFICATION_FAILED, - "APEX staging failed, check logcat messages from apexd for more " - + "details."); + if (!hasApex) { + // Session doesn't contain apex, nothing to do. + return; + } + try { + mApexManager.markStagedSessionReady(session.sessionId); + } catch (PackageManagerException e) { + session.setStagedSessionFailed(e.error, e.getMessage()); } } diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index 4404b7363981..cfa370bf63a3 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -1247,7 +1247,8 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { private boolean packageVersionsEqual(VersionedPackage a, VersionedPackage b) { - return a.getPackageName().equals(b.getPackageName()) + return a != null && b != null + && a.getPackageName().equals(b.getPackageName()) && a.getLongVersionCode() == b.getLongVersionCode(); } diff --git a/services/core/java/com/android/server/updates/CertificateTransparencyLogInstallReceiver.java b/services/core/java/com/android/server/updates/CertificateTransparencyLogInstallReceiver.java index ec65f8dafe52..bf32045146f6 100644 --- a/services/core/java/com/android/server/updates/CertificateTransparencyLogInstallReceiver.java +++ b/services/core/java/com/android/server/updates/CertificateTransparencyLogInstallReceiver.java @@ -16,25 +16,30 @@ package com.android.server.updates; -import com.android.internal.util.HexDump; import android.os.FileUtils; -import android.system.Os; import android.system.ErrnoException; +import android.system.Os; import android.util.Base64; import android.util.Slog; + +import com.android.internal.util.HexDump; + +import libcore.io.Streams; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileFilter; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStreamWriter; -import java.io.StringBufferInputStream; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; -import java.security.PublicKey; import java.security.NoSuchAlgorithmException; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; public class CertificateTransparencyLogInstallReceiver extends ConfigUpdateInstallReceiver { @@ -46,14 +51,13 @@ public class CertificateTransparencyLogInstallReceiver extends ConfigUpdateInsta } @Override - protected void install(byte[] content, int version) throws IOException { + protected void install(InputStream inputStream, int version) throws IOException { /* Install is complicated here because we translate the input, which is a JSON file * containing log information to a directory with a file per log. To support atomically * replacing the old configuration directory with the new there's a bunch of steps. We * create a new directory with the logs and then do an atomic update of the current symlink * to point to the new directory. */ - // 1. Ensure that the update dir exists and is readable updateDir.mkdir(); if (!updateDir.isDirectory()) { @@ -72,7 +76,8 @@ public class CertificateTransparencyLogInstallReceiver extends ConfigUpdateInsta // and so we cannot delete the directory since its in use. Instead just bump the version // and return. if (newVersion.getCanonicalPath().equals(currentSymlink.getCanonicalPath())) { - writeUpdate(updateDir, updateVersion, Long.toString(version).getBytes()); + writeUpdate(updateDir, updateVersion, + new ByteArrayInputStream(Long.toString(version).getBytes())); deleteOldLogDirectories(); return; } else { @@ -92,6 +97,7 @@ public class CertificateTransparencyLogInstallReceiver extends ConfigUpdateInsta // 4. For each log in the log file create the corresponding file in <new_version>/ . try { + byte[] content = Streams.readFullyNoClose(inputStream); JSONObject json = new JSONObject(new String(content, StandardCharsets.UTF_8)); JSONArray logs = json.getJSONArray("logs"); for (int i = 0; i < logs.length(); i++) { @@ -119,7 +125,8 @@ public class CertificateTransparencyLogInstallReceiver extends ConfigUpdateInsta } Slog.i(TAG, "CT log directory updated to " + newVersion.getAbsolutePath()); // 7. Update the current version information - writeUpdate(updateDir, updateVersion, Long.toString(version).getBytes()); + writeUpdate(updateDir, updateVersion, + new ByteArrayInputStream(Long.toString(version).getBytes())); // 8. Cleanup deleteOldLogDirectories(); } diff --git a/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java b/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java index c3c841c73ca9..73bb4bf956c3 100644 --- a/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java +++ b/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java @@ -16,9 +16,6 @@ package com.android.server.updates; -import com.android.server.EventLogTags; -import com.android.internal.util.HexDump; - import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -26,6 +23,14 @@ import android.net.Uri; import android.util.EventLog; import android.util.Slog; +import com.android.internal.util.HexDump; +import com.android.server.EventLogTags; + +import libcore.io.IoUtils; +import libcore.io.Streams; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -33,9 +38,6 @@ import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import libcore.io.IoUtils; -import libcore.io.Streams; - public class ConfigUpdateInstallReceiver extends BroadcastReceiver { private static final String TAG = "ConfigUpdateInstallReceiver"; @@ -61,8 +63,6 @@ public class ConfigUpdateInstallReceiver extends BroadcastReceiver { @Override public void run() { try { - // get the content path from the extras - byte[] altContent = getAltContent(context, intent); // get the version from the extras int altVersion = getVersionFromIntent(intent); // get the previous value from the extras @@ -75,11 +75,13 @@ public class ConfigUpdateInstallReceiver extends BroadcastReceiver { Slog.i(TAG, "Not installing, new version is <= current version"); } else if (!verifyPreviousHash(currentHash, altRequiredHash)) { EventLog.writeEvent(EventLogTags.CONFIG_INSTALL_FAILED, - "Current hash did not match required value"); + "Current hash did not match required value"); } else { // install the new content Slog.i(TAG, "Found new update, installing..."); - install(altContent, altVersion); + try (BufferedInputStream altContent = getAltContent(context, intent)) { + install(altContent, altVersion); + } Slog.i(TAG, "Installation successful"); postInstall(context, intent); } @@ -130,14 +132,9 @@ public class ConfigUpdateInstallReceiver extends BroadcastReceiver { } } - private byte[] getAltContent(Context c, Intent i) throws IOException { + private BufferedInputStream getAltContent(Context c, Intent i) throws IOException { Uri content = getContentFromIntent(i); - InputStream is = c.getContentResolver().openInputStream(content); - try { - return Streams.readFullyNoClose(is); - } finally { - is.close(); - } + return new BufferedInputStream(c.getContentResolver().openInputStream(content)); } private byte[] getCurrentContent() { @@ -175,7 +172,7 @@ public class ConfigUpdateInstallReceiver extends BroadcastReceiver { return current.equals(required); } - protected void writeUpdate(File dir, File file, byte[] content) throws IOException { + protected void writeUpdate(File dir, File file, InputStream inputStream) throws IOException { FileOutputStream out = null; File tmp = null; try { @@ -192,7 +189,7 @@ public class ConfigUpdateInstallReceiver extends BroadcastReceiver { tmp.setReadable(true, false); // write to it out = new FileOutputStream(tmp); - out.write(content); + Streams.copy(inputStream, out); // sync to disk out.getFD().sync(); // atomic rename @@ -207,9 +204,10 @@ public class ConfigUpdateInstallReceiver extends BroadcastReceiver { } } - protected void install(byte[] content, int version) throws IOException { - writeUpdate(updateDir, updateContent, content); - writeUpdate(updateDir, updateVersion, Long.toString(version).getBytes()); + protected void install(InputStream inputStream, int version) throws IOException { + writeUpdate(updateDir, updateContent, inputStream); + writeUpdate(updateDir, updateVersion, + new ByteArrayInputStream(Long.toString(version).getBytes())); } protected void postInstall(Context context, Intent intent) { diff --git a/services/core/java/com/android/server/wm/PinnedStackController.java b/services/core/java/com/android/server/wm/PinnedStackController.java index af729317392b..ef0049b068f4 100644 --- a/services/core/java/com/android/server/wm/PinnedStackController.java +++ b/services/core/java/com/android/server/wm/PinnedStackController.java @@ -350,7 +350,7 @@ class PinnedStackController { // Calculate the stack bounds in the new orientation to the same same fraction along the // rotated movement bounds. final Rect postChangeMovementBounds = getMovementBounds(postChangeStackBounds, - false /* adjustForIme */, false /* adjustForShelf */); + false /* adjustForIme */); mSnapAlgorithm.applySnapFraction(postChangeStackBounds, postChangeMovementBounds, snapFraction); if (mIsMinimized) { @@ -540,8 +540,7 @@ class PinnedStackController { */ private Rect getMovementBounds(Rect stackBounds) { synchronized (mService.mGlobalLock) { - return getMovementBounds(stackBounds, true /* adjustForIme */, - true /* adjustForShelf */); + return getMovementBounds(stackBounds, true /* adjustForIme */); } } @@ -549,15 +548,16 @@ class PinnedStackController { * @return the movement bounds for the given {@param stackBounds} and the current state of the * controller. */ - private Rect getMovementBounds(Rect stackBounds, boolean adjustForIme, boolean adjustForShelf) { + private Rect getMovementBounds(Rect stackBounds, boolean adjustForIme) { synchronized (mService.mGlobalLock) { final Rect movementBounds = new Rect(); getInsetBounds(movementBounds); - // Apply the movement bounds adjustments based on the current state + // Apply the movement bounds adjustments based on the current state. + // Note that shelf offset does not affect the movement bounds here + // since it's been taken care of in system UI. mSnapAlgorithm.getMovementBounds(stackBounds, movementBounds, movementBounds, - Math.max((adjustForIme && mIsImeShowing) ? mImeHeight : 0, - (adjustForShelf && mIsShelfShowing) ? mShelfHeight : 0)); + (adjustForIme && mIsImeShowing) ? mImeHeight : 0); return movementBounds; } } diff --git a/startop/iorap/DISABLED_TEST_MAPPING b/startop/iorap/TEST_MAPPING index 8c9d4dfb0894..8c9d4dfb0894 100644 --- a/startop/iorap/DISABLED_TEST_MAPPING +++ b/startop/iorap/TEST_MAPPING diff --git a/startop/iorap/tests/AndroidTest.xml b/startop/iorap/tests/AndroidTest.xml index bcd11033bed3..6102c44e61bf 100644 --- a/startop/iorap/tests/AndroidTest.xml +++ b/startop/iorap/tests/AndroidTest.xml @@ -33,18 +33,34 @@ <target_preparer class="com.android.tradefed.targetprep.DisableSELinuxTargetPreparer"> </target_preparer> + <!-- do not use DeviceSetup#set-property because it reboots the device b/136200738. + furthermore the changes in /data/local.prop don't actually seem to get picked up. + --> <target_preparer class="com.android.tradefed.targetprep.DeviceSetup"> + <!-- we need this magic flag, otherwise it always reboots and breaks the selinux --> + <option name="force-skip-system-props" value="true" /> + <!-- Crash instead of using Log.wtf within the system_server iorap code. --> - <option name="set-property" key="iorapd.forwarding_service.wtf_crash" value="true" /> + <option name="run-command" value="setprop iorapd.forwarding_service.wtf_crash true" /> <!-- IIorapd has fake behavior: it doesn't do anything but reply with 'DONE' status --> - <option name="set-property" key="iorapd.binder.fake" value="true" /> - <option name="restore-properties" value="true" /> + <option name="run-command" value="setprop iorapd.binder.fake true" /> + + <!-- iorapd does not pick up the above changes until we restart it --> + <option name="run-command" value="stop iorapd" /> + <option name="run-command" value="start iorapd" /> + <!-- give it some time to restart the service; otherwise the first unit test might fail --> + <option name="run-command" value="sleep 1" /> </target_preparer> <test class="com.android.tradefed.testtype.AndroidJUnitTest" > <option name="package" value="com.google.android.startop.iorap.tests" /> <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" /> </test> + + <!-- using DeviceSetup again does not work. we simply leave the device in a semi-bad + state. there is no way to clean this up as far as I know. + --> + </configuration> diff --git a/startop/iorap/tests/src/com/google/android/startop/iorap/IIorapIntegrationTest.kt b/startop/iorap/tests/src/com/google/android/startop/iorap/IIorapIntegrationTest.kt index 883d09490610..460add897f2f 100644 --- a/startop/iorap/tests/src/com/google/android/startop/iorap/IIorapIntegrationTest.kt +++ b/startop/iorap/tests/src/com/google/android/startop/iorap/IIorapIntegrationTest.kt @@ -14,6 +14,7 @@ package com.google.android.startop.iorap +import android.net.Uri import android.os.ServiceManager import androidx.test.filters.MediumTest import org.junit.Test @@ -85,6 +86,9 @@ class IIorapIntegrationTest { @Test fun testOnPackageEvent() { + // FIXME (b/137134253): implement PackageEvent parsing on the C++ side. + // This is currently (silently: b/137135024) failing because IIorap is 'oneway' and the + // C++ PackageEvent un-parceling fails since its not implemented fully. /* testAnyMethod { requestId : RequestId -> iorapService.onPackageEvent(requestId, @@ -92,7 +96,6 @@ class IIorapIntegrationTest { Uri.parse("https://www.google.com"), "com.fake.package")) } */ - // FIXME: Broken for some reason. C++ side never sees this call. } @Test @@ -107,7 +110,7 @@ class IIorapIntegrationTest { @Test fun testOnAppLaunchEvent() { testAnyMethod { requestId : RequestId -> - // iorapService.onAppLaunchEvent(requestId, AppLaunchEvent.IntentStarted()) + iorapService.onAppLaunchEvent(requestId, AppLaunchEvent.IntentFailed(/*sequenceId*/123)) } } diff --git a/startop/scripts/app_startup/lib/adb_utils.py b/startop/scripts/app_startup/lib/adb_utils.py index 00e2e9995863..0e0065defd7f 100644 --- a/startop/scripts/app_startup/lib/adb_utils.py +++ b/startop/scripts/app_startup/lib/adb_utils.py @@ -16,12 +16,18 @@ """Helper util libraries for calling adb command line.""" +import datetime import os +import re import sys +import time +from typing import Optional sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname( os.path.abspath(__file__))))) import lib.cmd_utils as cmd_utils +import lib.logcat_utils as logcat_utils + def logcat_save_timestamp() -> str: """Gets the current logcat timestamp. @@ -54,10 +60,48 @@ def disable_selinux(): cmd_utils.run_shell_command('adb wait-for-device') def pkill(procname: str): - """Kills a process in device by its package name.""" + """Kills a process on device specified by the substring pattern in procname""" _, pids = cmd_utils.run_shell_command('adb shell ps | grep "{}" | ' 'awk \'{{print $2;}}\''. format(procname)) for pid in pids.split('\n'): - cmd_utils.run_adb_shell_command('kill {}'.format(pid)) + pid = pid.strip() + if pid: + passed,_ = cmd_utils.run_adb_shell_command('kill {}'.format(pid)) + time.sleep(1) + +def parse_time_to_milliseconds(time: str) -> int: + """Parses the time string to milliseconds.""" + # Example: +1s56ms, +56ms + regex = r'\+((?P<second>\d+?)s)?(?P<millisecond>\d+?)ms' + result = re.search(regex, time) + second = 0 + if result.group('second'): + second = int(result.group('second')) + ms = int(result.group('millisecond')) + return second * 1000 + ms + +def blocking_wait_for_logcat_displayed_time(timestamp: datetime.datetime, + package: str, + timeout: int) -> Optional[int]: + """Parses the displayed time in the logcat. + + Returns: + the displayed time. + """ + pattern = re.compile('.*ActivityTaskManager: Displayed {}.*'.format(package)) + # 2019-07-02 22:28:34.469453349 -> 2019-07-02 22:28:34.469453 + timestamp = datetime.datetime.strptime(timestamp[:-3], + '%Y-%m-%d %H:%M:%S.%f') + timeout_dt = timestamp + datetime.timedelta(0, timeout) + # 2019-07-01 14:54:21.946 27365 27392 I ActivityTaskManager: + # Displayed com.android.settings/.Settings: +927ms + result = logcat_utils.blocking_wait_for_logcat_pattern(timestamp, + pattern, + timeout_dt) + if not result or not '+' in result: + return None + displayed_time = result[result.rfind('+'):] + + return parse_time_to_milliseconds(displayed_time)
\ No newline at end of file diff --git a/startop/scripts/app_startup/lib/adb_utils_test.py b/startop/scripts/app_startup/lib/adb_utils_test.py new file mode 100644 index 000000000000..e590fed568e3 --- /dev/null +++ b/startop/scripts/app_startup/lib/adb_utils_test.py @@ -0,0 +1,16 @@ +import adb_utils + +# pip imports +import pytest + +def test_parse_time_to_milliseconds(): + # Act + result1 = adb_utils.parse_time_to_milliseconds('+1s7ms') + result2 = adb_utils.parse_time_to_milliseconds('+523ms') + + # Assert + assert result1 == 1007 + assert result2 == 523 + +if __name__ == '__main__': + pytest.main() diff --git a/startop/scripts/app_startup/run_app_with_prefetch.py b/startop/scripts/app_startup/run_app_with_prefetch.py index c7970f5c4a67..052db9d6f5ea 100644 --- a/startop/scripts/app_startup/run_app_with_prefetch.py +++ b/startop/scripts/app_startup/run_app_with_prefetch.py @@ -30,8 +30,7 @@ import argparse import os import sys import time -from typing import List, Tuple -from pathlib import Path +from typing import List, Tuple, Optional # local imports import lib.adb_utils as adb_utils @@ -40,6 +39,8 @@ import lib.adb_utils as adb_utils DIR = os.path.abspath(os.path.dirname(__file__)) IORAP_COMMON_BASH_SCRIPT = os.path.realpath(os.path.join(DIR, '../iorap/common')) +APP_STARTUP_COMMON_BASH_SCRIPT = os.path.realpath(os.path.join(DIR, + 'lib/common')) sys.path.append(os.path.dirname(DIR)) import lib.print_utils as print_utils @@ -103,7 +104,20 @@ def validate_options(opts: argparse.Namespace) -> bool: print_utils.error_print('--input not specified!') return False - # Install necessary trace file. + if opts.simulate: + opts.activity = 'act' + + if not opts.activity: + _, opts.activity = cmd_utils.run_shell_func(IORAP_COMMON_BASH_SCRIPT, + 'get_activity_name', + [opts.package]) + + if not opts.activity: + print_utils.error_print('Activity name could not be found, ' + 'invalid package name?!') + return False + + # Install necessary trace file. This must be after the activity checking. if needs_trace_file: passed = iorapd_utils.iorapd_compiler_install_trace_file( opts.package, opts.activity, opts.input) @@ -113,18 +127,6 @@ def validate_options(opts: argparse.Namespace) -> bool: format(opts.package, opts.activity)) return False - if opts.activity is not None: - return True - - _, opts.activity = cmd_utils.run_shell_func(IORAP_COMMON_BASH_SCRIPT, - 'get_activity_name', - [opts.package]) - - if not opts.activity: - print_utils.error_print('Activity name could not be found, ' - 'invalid package name?!') - return False - return True def set_up_adb_env(): @@ -184,9 +186,6 @@ def parse_metrics_output(input: str, Returns: A list of tuples that including metric name, metric value and rest info. """ - if simulate: - return [('TotalTime', '123')] - all_metrics = [] for line in input.split('\n'): if not line: @@ -208,6 +207,33 @@ def parse_metrics_output(input: str, all_metrics.append((metric_name, metric_value)) return all_metrics +def _parse_total_time(am_start_output: str) -> Optional[str]: + """Parses the total time from 'adb shell am start pkg' output. + + Returns: + the total time of app startup. + """ + for line in am_start_output.split('\n'): + if 'TotalTime:' in line: + return line[len('TotalTime:'):].strip() + return None + +def blocking_parse_all_metrics(am_start_output: str, package: str, + pre_launch_timestamp: str, + timeout: int) -> str: + """Parses the metric after app startup by reading from logcat in a blocking + manner until all metrics have been found". + + Returns: + the total time and displayed time of app startup. + For example: "TotalTime=123\nDisplayedTime=121 + """ + total_time = _parse_total_time(am_start_output) + displayed_time = adb_utils.blocking_wait_for_logcat_displayed_time( + pre_launch_timestamp, package, timeout) + + return 'TotalTime={}\nDisplayedTime={}'.format(total_time, displayed_time) + def run(readahead: str, package: str, activity: str, @@ -223,11 +249,17 @@ def run(readahead: str, print_utils.debug_print('===== START =====') print_utils.debug_print('==========================================') + # Kill any existing process of this app + adb_utils.pkill(package) + if readahead != 'warm': print_utils.debug_print('Drop caches for non-warm start.') # Drop all caches to get cold starts. adb_utils.vm_drop_cache() + if readahead != 'warm' and readahead != 'cold': + iorapd_utils.enable_iorapd_readahead() + print_utils.debug_print('Running with timeout {}'.format(timeout)) pre_launch_timestamp = adb_utils.logcat_save_timestamp() @@ -235,21 +267,22 @@ def run(readahead: str, passed, output = cmd_utils.run_shell_command('timeout {timeout} ' '"{DIR}/launch_application" ' '"{package}" ' - '"{activity}" | ' - '"{DIR}/parse_metrics" ' - '--package {package} ' - '--activity {activity} ' - '--timestamp "{timestamp}"' - .format(timeout=timeout, - DIR=DIR, - package=package, - activity=activity, - timestamp=pre_launch_timestamp)) - - if not output and not simulate: + '"{activity}"' + .format(timeout=timeout, + DIR=DIR, + package=package, + activity=activity)) + if not passed and not simulate: return None - results = parse_metrics_output(output, simulate) + if simulate: + results = [('TotalTime', '123')] + else: + output = blocking_parse_all_metrics(output, + package, + pre_launch_timestamp, + timeout) + results = parse_metrics_output(output, simulate) passed = perform_post_launch_cleanup( readahead, package, activity, timeout, debug, pre_launch_timestamp) @@ -272,12 +305,17 @@ def perform_post_launch_cleanup(readahead: str, A bool indicates whether the cleanup succeeds or not. """ if readahead != 'warm' and readahead != 'cold': - return iorapd_utils.wait_for_iorapd_finish(package, + passed = iorapd_utils.wait_for_iorapd_finish(package, activity, timeout, debug, logcat_timestamp) - return passed + + if not passed: + return passed + + return iorapd_utils.disable_iorapd_readahead() + # Don't need to do anything for warm or cold. return True diff --git a/startop/scripts/app_startup/run_app_with_prefetch_test.py b/startop/scripts/app_startup/run_app_with_prefetch_test.py index 241aea4943ef..a642385b37d7 100644 --- a/startop/scripts/app_startup/run_app_with_prefetch_test.py +++ b/startop/scripts/app_startup/run_app_with_prefetch_test.py @@ -200,70 +200,82 @@ def test_parse_metrics_output(): def _mocked_run_shell_command(*args, **kwargs): if args[0] == 'adb shell "date -u +\'%Y-%m-%d %H:%M:%S.%N\'"': - return (True, "123:123") + return (True, "2019-07-02 23:20:06.972674825") elif args[0] == 'adb shell ps | grep "music" | awk \'{print $2;}\'': return (True, '9999') else: return (True, 'a1=b1\nc1=d1=d2\ne1=f1') -def test_run_no_vm_cache_drop(): - with patch('lib.cmd_utils.run_shell_command', - new_callable=Mock) as mock_run_shell_command: - mock_run_shell_command.side_effect = _mocked_run_shell_command - run.run('warm', - 'music', - 'MainActivity', - timeout=10, - simulate=False, - debug=False) - - calls = [call('adb shell "date -u +\'%Y-%m-%d %H:%M:%S.%N\'"'), - call( - 'timeout {timeout} "{DIR}/launch_application" "{package}" "{activity}" | ' - '"{DIR}/parse_metrics" --package {package} --activity {activity} ' - '--timestamp "{timestamp}"' - .format(timeout=10, - DIR=run.DIR, - package='music', - activity='MainActivity', - timestamp='123:123')), - call('adb shell ps | grep "music" | awk \'{print $2;}\''), - call('adb shell "kill 9999"')] - mock_run_shell_command.assert_has_calls(calls) +@patch('lib.adb_utils.blocking_wait_for_logcat_displayed_time') +@patch('lib.cmd_utils.run_shell_command') +def test_run_no_vm_cache_drop(mock_run_shell_command, + mock_blocking_wait_for_logcat_displayed_time): + mock_run_shell_command.side_effect = _mocked_run_shell_command + mock_blocking_wait_for_logcat_displayed_time.return_value = 123 + + run.run('warm', + 'music', + 'MainActivity', + timeout=10, + simulate=False, + debug=False) + + calls = [call('adb shell ps | grep "music" | awk \'{print $2;}\''), + call('adb shell "kill 9999"'), + call('adb shell "date -u +\'%Y-%m-%d %H:%M:%S.%N\'"'), + call( + 'timeout {timeout} "{DIR}/launch_application" "{package}" "{activity}"' + .format(timeout=10, + DIR=run.DIR, + package='music', + activity='MainActivity', + timestamp='2019-07-02 23:20:06.972674825')), + call('adb shell ps | grep "music" | awk \'{print $2;}\''), + call('adb shell "kill 9999"')] + mock_run_shell_command.assert_has_calls(calls) -def test_run_with_vm_cache_drop_and_post_launch_cleanup(): - with patch('lib.cmd_utils.run_shell_command', - new_callable=Mock) as mock_run_shell_command: - mock_run_shell_command.side_effect = _mocked_run_shell_command - run.run('fadvise', - 'music', - 'MainActivity', - timeout=10, - simulate=False, - debug=False) - - calls = [call('adb shell "echo 3 > /proc/sys/vm/drop_caches"'), - call('adb shell "date -u +\'%Y-%m-%d %H:%M:%S.%N\'"'), - call( - 'timeout {timeout} "{DIR}/launch_application" "{package}" "{activity}" | ' - '"{DIR}/parse_metrics" --package {package} --activity {activity} ' - '--timestamp "{timestamp}"' - .format(timeout=10, - DIR=run.DIR, - package='music', - activity='MainActivity', - timestamp='123:123')), - call( - 'bash -c "source {script_path}; ' - 'iorapd_readahead_wait_until_finished ' - '\'{package}\' \'{activity}\' \'{timestamp}\' \'{timeout}\'"'. - format(timeout=10, - package='music', - activity='MainActivity', - timestamp='123:123', - script_path=run.IORAP_COMMON_BASH_SCRIPT)), - call('adb shell ps | grep "music" | awk \'{print $2;}\''), - call('adb shell "kill 9999"')] +@patch('lib.adb_utils.blocking_wait_for_logcat_displayed_time') +@patch('lib.cmd_utils.run_shell_command') +def test_run_with_vm_cache_drop_and_post_launch_cleanup( + mock_run_shell_command, + mock_blocking_wait_for_logcat_displayed_time): + mock_run_shell_command.side_effect = _mocked_run_shell_command + mock_blocking_wait_for_logcat_displayed_time.return_value = 123 + + run.run('fadvise', + 'music', + 'MainActivity', + timeout=10, + simulate=False, + debug=False) + + calls = [call('adb shell ps | grep "music" | awk \'{print $2;}\''), + call('adb shell "kill 9999"'), + call('adb shell "echo 3 > /proc/sys/vm/drop_caches"'), + call('bash -c "source {}; iorapd_readahead_enable"'. + format(run.IORAP_COMMON_BASH_SCRIPT)), + call('adb shell "date -u +\'%Y-%m-%d %H:%M:%S.%N\'"'), + call( + 'timeout {timeout} "{DIR}/launch_application" ' + '"{package}" "{activity}"' + .format(timeout=10, + DIR=run.DIR, + package='music', + activity='MainActivity', + timestamp='2019-07-02 23:20:06.972674825')), + call( + 'bash -c "source {script_path}; ' + 'iorapd_readahead_wait_until_finished ' + '\'{package}\' \'{activity}\' \'{timestamp}\' \'{timeout}\'"'. + format(timeout=10, + package='music', + activity='MainActivity', + timestamp='2019-07-02 23:20:06.972674825', + script_path=run.IORAP_COMMON_BASH_SCRIPT)), + call('bash -c "source {}; iorapd_readahead_disable"'. + format(run.IORAP_COMMON_BASH_SCRIPT)), + call('adb shell ps | grep "music" | awk \'{print $2;}\''), + call('adb shell "kill 9999"')] mock_run_shell_command.assert_has_calls(calls) if __name__ == '__main__': diff --git a/startop/scripts/iorap/lib/iorapd_utils.py b/startop/scripts/iorap/lib/iorapd_utils.py index f907305f5c61..c03e9b0ae04d 100644 --- a/startop/scripts/iorap/lib/iorapd_utils.py +++ b/startop/scripts/iorap/lib/iorapd_utils.py @@ -86,3 +86,28 @@ def wait_for_iorapd_finish(package: str, [package, activity, logcat_timestamp, str(timeout)]) return passed + + +def enable_iorapd_readahead() -> bool: + """ + Disable readahead. Subsequent launches of an application will be sped up + by iorapd readahead prefetching. + + Returns: + A bool indicates whether the enabling is done successfully or not. + """ + passed, _ = cmd_utils.run_shell_func(IORAP_COMMON_BASH_SCRIPT, + 'iorapd_readahead_enable', []) + return passed + +def disable_iorapd_readahead() -> bool: + """ + Disable readahead. Subsequent launches of an application will be not be sped + up by iorapd readahead prefetching. + + Returns: + A bool indicates whether the disabling is done successfully or not. + """ + passed, _ = cmd_utils.run_shell_func(IORAP_COMMON_BASH_SCRIPT, + 'iorapd_readahead_disable', []) + return passed diff --git a/startop/scripts/lib/cmd_utils.py b/startop/scripts/lib/cmd_utils.py index c3d96059c91c..bc5ca3140d3d 100644 --- a/startop/scripts/lib/cmd_utils.py +++ b/startop/scripts/lib/cmd_utils.py @@ -44,10 +44,16 @@ def run_shell_func(script_path: str, A tuple of running status (True=succeeded, False=failed or timed out) and std output (string contents of stdout with trailing whitespace removed) . """ - cmd = 'bash -c "source {script_path}; {func} {args}"'.format( - script_path=script_path, - func=func, - args=' '.join("'{}'".format(arg) for arg in args)) + if args: + cmd = 'bash -c "source {script_path}; {func} {args}"'.format( + script_path=script_path, + func=func, + args=' '.join("'{}'".format(arg) for arg in args)) + else: + cmd = 'bash -c "source {script_path}; {func}"'.format( + script_path=script_path, + func=func) + print_utils.debug_print(cmd) return run_shell_command(cmd) diff --git a/startop/scripts/lib/logcat_utils.py b/startop/scripts/lib/logcat_utils.py new file mode 100644 index 000000000000..13b1c3a5cff7 --- /dev/null +++ b/startop/scripts/lib/logcat_utils.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +# +# Copyright 2019, 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. + +"""Helper util libraries for parsing logcat logs.""" + +import asyncio +import re +from datetime import datetime +from typing import Optional, Pattern + +# local import +import print_utils + +def parse_logcat_datetime(timestamp: str) -> Optional[datetime]: + """Parses the timestamp of logcat. + + Params: + timestamp: for example "2019-07-01 16:13:55.221". + + Returns: + a datetime of timestamp with the year now. + """ + try: + # Match the format of logcat. For example: "2019-07-01 16:13:55.221", + # because it doesn't have year, set current year to it. + timestamp = datetime.strptime(timestamp, + '%Y-%m-%d %H:%M:%S.%f') + return timestamp + except ValueError as ve: + print_utils.debug_print('Invalid line: ' + timestamp) + return None + +def _is_time_out(timeout: datetime, line: str) -> bool: + """Checks if the timestamp of this line exceeds the timeout. + + Returns: + true if the timestamp exceeds the timeout. + """ + # Get the timestampe string. + cur_timestamp_str = ' '.join(re.split(r'\s+', line)[0:2]) + timestamp = parse_logcat_datetime(cur_timestamp_str) + if not timestamp: + return False + + return timestamp > timeout + +async def _blocking_wait_for_logcat_pattern(timestamp: datetime, + pattern: Pattern, + timeout: datetime) -> Optional[str]: + # Show the year in the timestampe. + logcat_cmd = 'adb logcat -v year -v threadtime -T'.split() + logcat_cmd.append(str(timestamp)) + print_utils.debug_print('[LOGCAT]:' + ' '.join(logcat_cmd)) + + # Create subprocess + process = await asyncio.create_subprocess_exec( + *logcat_cmd, + # stdout must a pipe to be accessible as process.stdout + stdout=asyncio.subprocess.PIPE) + + while (True): + # Read one line of output. + data = await process.stdout.readline() + line = data.decode('utf-8').rstrip() + + # 2019-07-01 14:54:21.946 27365 27392 I ActivityTaskManager: Displayed + # com.android.settings/.Settings: +927ms + # TODO: Detect timeouts even when there is no logcat output. + if _is_time_out(timeout, line): + print_utils.debug_print('DID TIMEOUT BEFORE SEEING ANYTHING (' + 'timeout={timeout} seconds << {pattern} ' + '>>'.format(timeout=timeout, pattern=pattern)) + return None + + if pattern.match(line): + print_utils.debug_print( + 'WE DID SEE PATTERN << "{}" >>.'.format(pattern)) + return line + +def blocking_wait_for_logcat_pattern(timestamp: datetime, + pattern: Pattern, + timeout: datetime) -> Optional[str]: + """Selects the line that matches the pattern and within the timeout. + + Returns: + the line that matches the pattern and within the timeout. + """ + loop = asyncio.get_event_loop() + result = loop.run_until_complete( + _blocking_wait_for_logcat_pattern(timestamp, pattern, timeout)) + return result diff --git a/startop/scripts/lib/logcat_utils_test.py b/startop/scripts/lib/logcat_utils_test.py new file mode 100644 index 000000000000..ab82515bc4fa --- /dev/null +++ b/startop/scripts/lib/logcat_utils_test.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +# +# Copyright 2019, 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. +# +"""Unit tests for the logcat_utils.py script.""" + +import asyncio +import datetime +import re + +import logcat_utils +from mock import MagicMock, patch + +def test_parse_logcat_datatime(): + # Act + result = logcat_utils.parse_logcat_datetime('2019-07-01 16:13:55.221') + + # Assert + assert result == datetime.datetime(2019, 7, 1, 16, 13, 55, 221000) + +class AsyncMock(MagicMock): + async def __call__(self, *args, **kwargs): + return super(AsyncMock, self).__call__(*args, **kwargs) + +def _async_return(): + f = asyncio.Future() + f.set_result( + b'2019-07-01 15:51:53.290 27365 27392 I ActivityTaskManager: ' + b'Displayed com.google.android.music/com.android.music.activitymanagement.' + b'TopLevelActivity: +1s7ms') + return f + +def test_parse_displayed_time_succeed(): + # Act + with patch('asyncio.create_subprocess_exec', + new_callable=AsyncMock) as asyncio_mock: + asyncio_mock.return_value.stdout.readline = _async_return + timestamp = datetime.datetime(datetime.datetime.now().year, 7, 1, 16, 13, + 55, 221000) + timeout_dt = timestamp + datetime.timedelta(0, 10) + pattern = re.compile('.*ActivityTaskManager: Displayed ' + 'com.google.android.music/com.android.music.*') + result = logcat_utils.blocking_wait_for_logcat_pattern(timestamp, + pattern, + timeout_dt) + + # Assert + assert result == '2019-07-01 15:51:53.290 27365 27392 I ' \ + 'ActivityTaskManager: ' \ + 'Displayed com.google.android.music/com.android.music.' \ + 'activitymanagement.TopLevelActivity: +1s7ms' + +def _async_timeout_return(): + f = asyncio.Future() + f.set_result( + b'2019-07-01 17:51:53.290 27365 27392 I ActivityTaskManager: ' + b'Displayed com.google.android.music/com.android.music.activitymanagement.' + b'TopLevelActivity: +1s7ms') + return f + +def test_parse_displayed_time_timeout(): + # Act + with patch('asyncio.create_subprocess_exec', + new_callable=AsyncMock) as asyncio_mock: + asyncio_mock.return_value.stdout.readline = _async_timeout_return + timestamp = datetime.datetime(datetime.datetime.now().year, + 7, 1, 16, 13, 55, 221000) + timeout_dt = timestamp + datetime.timedelta(0, 10) + pattern = re.compile('.*ActivityTaskManager: Displayed ' + 'com.google.android.music/com.android.music.*') + result = logcat_utils.blocking_wait_for_logcat_pattern(timestamp, + pattern, + timeout_dt) + + # Assert + assert result == None diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 22a8232d1a0b..ed70a81e01d6 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -10834,7 +10834,6 @@ public class TelephonyManager { * @param callback Callback will be triggered once it succeeds or failed. * See {@link TelephonyManager.SetOpportunisticSubscriptionResult} * for more details. Pass null if don't care about the result. - * */ public void setPreferredOpportunisticDataSubscription(int subId, boolean needValidation, @Nullable @CallbackExecutor Executor executor, @Nullable Consumer<Integer> callback) { @@ -10842,6 +10841,12 @@ public class TelephonyManager { try { IOns iOpportunisticNetworkService = getIOns(); if (iOpportunisticNetworkService == null) { + if (executor == null || callback == null) { + return; + } + Binder.withCleanCallingIdentity(() -> executor.execute(() -> { + callback.accept(SET_OPPORTUNISTIC_SUB_INACTIVE_SUBSCRIPTION); + })); return; } ISetOpportunisticDataCallback callbackStub = new ISetOpportunisticDataCallback.Stub() { @@ -10923,9 +10928,16 @@ public class TelephonyManager { if (executor == null || callback == null) { return; } - Binder.withCleanCallingIdentity(() -> executor.execute(() -> { - callback.accept(UPDATE_AVAILABLE_NETWORKS_INVALID_ARGUMENTS); - })); + if (iOpportunisticNetworkService == null) { + /* Todo<b/130595455> passing unknown due to lack of good error codes */ + Binder.withCleanCallingIdentity(() -> executor.execute(() -> { + callback.accept(UPDATE_AVAILABLE_NETWORKS_UNKNOWN_FAILURE); + })); + } else { + Binder.withCleanCallingIdentity(() -> executor.execute(() -> { + callback.accept(UPDATE_AVAILABLE_NETWORKS_INVALID_ARGUMENTS); + })); + } return; } IUpdateAvailableNetworksCallback callbackStub = |