diff options
120 files changed, 1427 insertions, 332 deletions
diff --git a/api/current.txt b/api/current.txt index 5b3459c1fcc1..f59420571666 100644 --- a/api/current.txt +++ b/api/current.txt @@ -8114,8 +8114,11 @@ package android.graphics { method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int); method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); + method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); + method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); + method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createScaledBitmap(android.graphics.Bitmap, int, int, boolean); method public int describeContents(); method public void eraseColor(int); @@ -12444,7 +12447,7 @@ package android.net { method public android.net.LocalSocketAddress getLocalSocketAddress(); } - public class LocalSocket { + public class LocalSocket implements java.io.Closeable { ctor public LocalSocket(); method public void bind(android.net.LocalSocketAddress) throws java.io.IOException; method public void close() throws java.io.IOException; @@ -19928,6 +19931,49 @@ package android.security { } +package android.service.dreams { + + public class Dream extends android.app.Service implements android.view.Window.Callback { + ctor public Dream(); + method public void addContentView(android.view.View, android.view.ViewGroup.LayoutParams); + method public boolean dispatchGenericMotionEvent(android.view.MotionEvent); + method public boolean dispatchKeyEvent(android.view.KeyEvent); + method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent); + method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + method public boolean dispatchTouchEvent(android.view.MotionEvent); + method public boolean dispatchTrackballEvent(android.view.MotionEvent); + method public android.view.View findViewById(int); + method public void finish(); + method public android.view.Window getWindow(); + method public android.view.WindowManager getWindowManager(); + method public boolean isInteractive(); + method protected void lightsOut(); + method public void onActionModeFinished(android.view.ActionMode); + method public void onActionModeStarted(android.view.ActionMode); + method public void onAttachedToWindow(); + method public final android.os.IBinder onBind(android.content.Intent); + method public void onContentChanged(); + method public boolean onCreatePanelMenu(int, android.view.Menu); + method public android.view.View onCreatePanelView(int); + method public void onDetachedFromWindow(); + method public boolean onMenuItemSelected(int, android.view.MenuItem); + method public boolean onMenuOpened(int, android.view.Menu); + method public void onPanelClosed(int, android.view.Menu); + method public boolean onPreparePanel(int, android.view.View, android.view.Menu); + method public boolean onSearchRequested(); + method public void onStart(); + method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams); + method public void onWindowFocusChanged(boolean); + method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback); + method public void setContentView(int); + method public void setContentView(android.view.View); + method public void setContentView(android.view.View, android.view.ViewGroup.LayoutParams); + method public void setInteractive(boolean); + field public static final java.lang.String SERVICE_INTERFACE = "android.service.dreams.Dream"; + } + +} + package android.service.textservice { public abstract class SpellCheckerService extends android.app.Service { diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java index f42fd2a1bc3b..a79eb1482f4a 100644 --- a/cmds/am/src/com/android/commands/am/Am.java +++ b/cmds/am/src/com/android/commands/am/Am.java @@ -133,6 +133,8 @@ public class Am { runScreenCompat(); } else if (op.equals("display-size")) { runDisplaySize(); + } else if (op.equals("display-density")) { + runDisplayDensity(); } else if (op.equals("to-uri")) { runToUri(false); } else if (op.equals("to-intent-uri")) { @@ -1127,6 +1129,44 @@ public class Am { } } + private void runDisplayDensity() throws Exception { + String densityStr = nextArgRequired(); + int density; + if ("reset".equals(densityStr)) { + density = -1; + } else { + try { + density = Integer.parseInt(densityStr); + } catch (NumberFormatException e) { + System.err.println("Error: bad number " + e); + showUsage(); + return; + } + if (density < 72) { + System.err.println("Error: density must be >= 72"); + showUsage(); + return; + } + } + + IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.checkService( + Context.WINDOW_SERVICE)); + if (wm == null) { + System.err.println(NO_SYSTEM_ERROR_CODE); + throw new AndroidException("Can't connect to window manager; is the system running?"); + } + + try { + if (density > 0) { + // TODO(multidisplay): For now Configuration only applies to main screen. + wm.setForcedDisplayDensity(Display.DEFAULT_DISPLAY, density); + } else { + wm.clearForcedDisplayDensity(Display.DEFAULT_DISPLAY); + } + } catch (RemoteException e) { + } + } + private void runToUri(boolean intentScheme) throws Exception { Intent intent = makeIntent(); System.out.println(intent.toUri(intentScheme ? Intent.URI_INTENT_SCHEME : 0)); @@ -1301,6 +1341,7 @@ public class Am { " am monitor [--gdb <port>]\n" + " am screen-compat [on|off] <PACKAGE>\n" + " am display-size [reset|MxN]\n" + + " am display-density [reset|DENSITY]\n" + " am to-uri [INTENT]\n" + " am to-intent-uri [INTENT]\n" + "\n" + @@ -1355,6 +1396,8 @@ public class Am { "\n" + "am display-size: override display size.\n" + "\n" + + "am display-density: override display density.\n" + + "\n" + "am to-uri: print the given Intent specification as a URI.\n" + "\n" + "am to-intent-uri: print the given Intent specification as an intent: URI.\n" + diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index f8d01de4bc70..bb35ddd33d51 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -167,6 +167,7 @@ public final class ActivityThread { AppBindData mBoundApplication; Profiler mProfiler; int mCurDefaultDisplayDpi; + boolean mDensityCompatMode; Configuration mConfiguration; Configuration mCompatConfiguration; Configuration mResConfiguration; @@ -2733,7 +2734,8 @@ public final class ActivityThread { // On platforms where we don't want thumbnails, set dims to (0,0) if ((w > 0) && (h > 0)) { - thumbnail = Bitmap.createBitmap(w, h, THUMBNAIL_FORMAT); + thumbnail = Bitmap.createBitmap(r.activity.getResources().getDisplayMetrics(), + w, h, THUMBNAIL_FORMAT); thumbnail.eraseColor(0); } } @@ -3468,6 +3470,7 @@ public final class ActivityThread { // If there was a pending configuration change, execute it first. if (changedConfig != null) { mCurDefaultDisplayDpi = changedConfig.densityDpi; + updateDefaultDensity(); handleConfigurationChanged(changedConfig, null); } @@ -3718,6 +3721,7 @@ public final class ActivityThread { if (!mPendingConfiguration.isOtherSeqNewer(config)) { config = mPendingConfiguration; mCurDefaultDisplayDpi = config.densityDpi; + updateDefaultDensity(); } mPendingConfiguration = null; } @@ -3918,8 +3922,20 @@ public final class ActivityThread { } catch (RemoteException e) { // Ignore } - } - + } + + private void updateDefaultDensity() { + if (mCurDefaultDisplayDpi != Configuration.DENSITY_DPI_UNDEFINED + && mCurDefaultDisplayDpi != DisplayMetrics.DENSITY_DEVICE + && !mDensityCompatMode) { + Slog.i(TAG, "Switching default density from " + + DisplayMetrics.DENSITY_DEVICE + " to " + + mCurDefaultDisplayDpi); + DisplayMetrics.DENSITY_DEVICE = mCurDefaultDisplayDpi; + Bitmap.setDefaultDensity(DisplayMetrics.DENSITY_DEFAULT); + } + } + private void handleBindApplication(AppBindData data) { mBoundApplication = data; mConfiguration = new Configuration(data.config); @@ -3980,6 +3996,16 @@ public final class ActivityThread { data.info = getPackageInfoNoCheck(data.appInfo, data.compatInfo); + /** + * Switch this process to density compatibility mode if needed. + */ + if ((data.appInfo.flags&ApplicationInfo.FLAG_SUPPORTS_SCREEN_DENSITIES) + == 0) { + mDensityCompatMode = true; + Bitmap.setDefaultDensity(DisplayMetrics.DENSITY_DEFAULT); + } + updateDefaultDensity(); + final ContextImpl appContext = new ContextImpl(); appContext.init(data.info, null, this); final File cacheDir = appContext.getCacheDir(); @@ -4010,14 +4036,6 @@ public final class ActivityThread { StrictMode.enableDeathOnNetwork(); } - /** - * Switch this process to density compatibility mode if needed. - */ - if ((data.appInfo.flags&ApplicationInfo.FLAG_SUPPORTS_SCREEN_DENSITIES) - == 0) { - Bitmap.setDefaultDensity(DisplayMetrics.DENSITY_DEFAULT); - } - if (data.debugMode != IApplicationThread.DEBUG_OFF) { // XXX should have option to change the port. Debug.changeDebugPort(8100); diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index dc1802929a8a..ceaf17ee6207 100755 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -1246,10 +1246,8 @@ public final class BluetoothAdapter { * @hide */ public boolean enableNoAutoConnect() { - try { - return mService.enableNoAutoConnect(); - } catch (RemoteException e) {Log.e(TAG, "", e);} - return false; + // TODO avoid auto-connect in the new stack. + return enable(); } /** diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index c7e55ce673f5..d2af3e90f33b 100755 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -89,7 +89,8 @@ public class Resources { = new LongSparseArray<ColorStateList>(); private static final LongSparseArray<Drawable.ConstantState> sPreloadedColorDrawables = new LongSparseArray<Drawable.ConstantState>(); - private static boolean mPreloaded; + private static boolean sPreloaded; + private static int sPreloadedDensity; /*package*/ final TypedValue mTmpValue = new TypedValue(); /*package*/ final Configuration mTmpConfig = new Configuration(); @@ -1837,11 +1838,14 @@ public class Resources { */ public final void startPreloading() { synchronized (mSync) { - if (mPreloaded) { + if (sPreloaded) { throw new IllegalStateException("Resources already preloaded"); } - mPreloaded = true; + sPreloaded = true; mPreloading = true; + sPreloadedDensity = DisplayMetrics.DENSITY_DEVICE; + mConfiguration.densityDpi = sPreloadedDensity; + updateConfiguration(null, null); } } @@ -1855,7 +1859,24 @@ public class Resources { flushLayoutCache(); } } - + + private boolean verifyPreloadConfig(TypedValue value, String name) { + if ((value.changingConfigurations&~(ActivityInfo.CONFIG_FONT_SCALE + | ActivityInfo.CONFIG_DENSITY)) != 0) { + String resName; + try { + resName = getResourceName(value.resourceId); + } catch (NotFoundException e) { + resName = "?"; + } + Log.w(TAG, "Preloaded " + name + " resource #0x" + + Integer.toHexString(value.resourceId) + + " (" + resName + ") that varies with configuration!!"); + return false; + } + return true; + } + /*package*/ Drawable loadDrawable(TypedValue value, int id) throws NotFoundException { @@ -1879,8 +1900,10 @@ public class Resources { return dr; } - Drawable.ConstantState cs = isColorDrawable ? - sPreloadedColorDrawables.get(key) : sPreloadedDrawables.get(key); + Drawable.ConstantState cs = isColorDrawable + ? sPreloadedColorDrawables.get(key) + : (sPreloadedDensity == mConfiguration.densityDpi + ? sPreloadedDrawables.get(key) : null); if (cs != null) { dr = cs.newDrawable(this); } else { @@ -1948,10 +1971,12 @@ public class Resources { cs = dr.getConstantState(); if (cs != null) { if (mPreloading) { - if (isColorDrawable) { - sPreloadedColorDrawables.put(key, cs); - } else { - sPreloadedDrawables.put(key, cs); + if (verifyPreloadConfig(value, "drawable")) { + if (isColorDrawable) { + sPreloadedColorDrawables.put(key, cs); + } else { + sPreloadedDrawables.put(key, cs); + } } } else { synchronized (mTmpValue) { @@ -2016,7 +2041,9 @@ public class Resources { csl = ColorStateList.valueOf(value.data); if (mPreloading) { - sPreloadedColorStateLists.put(key, csl); + if (verifyPreloadConfig(value, "color")) { + sPreloadedColorStateLists.put(key, csl); + } } return csl; @@ -2060,7 +2087,9 @@ public class Resources { if (csl != null) { if (mPreloading) { - sPreloadedColorStateLists.put(key, csl); + if (verifyPreloadConfig(value, "color")) { + sPreloadedColorStateLists.put(key, csl); + } } else { synchronized (mTmpValue) { //Log.i(TAG, "Saving cached color state list @ #" + diff --git a/core/java/android/net/LocalSocket.java b/core/java/android/net/LocalSocket.java index 34e0d9a92f3b..14a80948b797 100644 --- a/core/java/android/net/LocalSocket.java +++ b/core/java/android/net/LocalSocket.java @@ -16,6 +16,7 @@ package android.net; +import java.io.Closeable; import java.io.FileDescriptor; import java.io.IOException; import java.io.InputStream; @@ -26,7 +27,7 @@ import java.net.SocketOptions; * Creates a (non-server) socket in the UNIX-domain namespace. The interface * here is not entirely unlike that of java.net.Socket */ -public class LocalSocket { +public class LocalSocket implements Closeable { private LocalSocketImpl impl; private volatile boolean implCreated; @@ -167,6 +168,7 @@ public class LocalSocket { * * @throws IOException */ + @Override public void close() throws IOException { implCreateIfNeeded(); impl.close(); diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 1bb27bdbcb9f..fcc0ae49b730 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -1705,7 +1705,7 @@ public abstract class BatteryStats implements Parcelable { if (u.hasUserActivity()) { boolean hasData = false; - for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { + for (int i=0; i<Uid.NUM_USER_ACTIVITY_TYPES; i++) { int val = u.getUserActivityCount(i, which); if (val != 0) { if (!hasData) { diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 840f27dfcd3c..c8bb8861a788 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2794,6 +2794,13 @@ public final class Settings { public static final String DISPLAY_SIZE_FORCED = "display_size_forced"; /** + * The saved value for WindowManagerService.setForcedDisplayDensity(). + * One integer in dpi. If unset, then use the real display density. + * @hide + */ + public static final String DISPLAY_DENSITY_FORCED = "display_density_forced"; + + /** * Whether assisted GPS should be enabled or not. * @hide */ diff --git a/core/java/android/service/dreams/Dream.java b/core/java/android/service/dreams/Dream.java index 83464c936d81..9a903e468a72 100644 --- a/core/java/android/service/dreams/Dream.java +++ b/core/java/android/service/dreams/Dream.java @@ -1,26 +1,31 @@ /** - * + * Copyright (C) 2012 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 android.service.dreams; -import com.android.internal.policy.PolicyManager; - import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.app.Service; -import android.content.Context; import android.content.Intent; -import android.content.pm.ActivityInfo; import android.graphics.drawable.ColorDrawable; -import android.os.Binder; import android.os.Handler; import android.os.IBinder; -import android.os.Looper; import android.os.RemoteException; import android.os.ServiceManager; import android.util.Slog; import android.view.ActionMode; -import android.view.IWindowManager; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; @@ -28,14 +33,14 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.Window; +import android.view.WindowManager; import android.view.WindowManager.LayoutParams; import android.view.accessibility.AccessibilityEvent; -import android.view.WindowManager; -import android.view.WindowManagerImpl; + +import com.android.internal.policy.PolicyManager; /** - * @hide - * + * Extend this class to implement a custom screensaver. */ public class Dream extends Service implements Window.Callback { private final static boolean DEBUG = true; @@ -61,7 +66,7 @@ public class Dream extends Service implements Window.Callback { final Handler mHandler = new Handler(); boolean mFinished = false; - + // begin Window.Callback methods @Override public boolean dispatchKeyEvent(KeyEvent event) { @@ -210,19 +215,14 @@ public class Dream extends Service implements Window.Callback { mSandman = IDreamManager.Stub.asInterface(ServiceManager.getService("dreams")); } - + /** - * Called when this Dream is started. Place your initialization here. - * - * Subclasses must call through to the superclass implementation. - * - * XXX(dsandler) Might want to make this final and have a different method for clients to override + * Called when this Dream is started. */ - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - return super.onStartCommand(intent, flags, startId); + public void onStart() { + // hook for subclasses } - + /** * Inflate a layout resource and set it to be the content view for this Dream. * Behaves similarly to {@link android.app.Activity#setContentView(int)}. @@ -351,9 +351,12 @@ public class Dream extends Service implements Window.Callback { @Override public void run() { if (DEBUG) Slog.v(TAG, "Dream window added on thread " + Thread.currentThread().getId()); - + getWindowManager().addView(mWindow.getDecorView(), mWindow.getAttributes()); - }}); + + // start it up + onStart(); + }}); } /** diff --git a/core/java/android/service/dreams/DreamManagerService.java b/core/java/android/service/dreams/DreamManagerService.java index 4a14cedbf9b3..d6b38a1cf080 100644 --- a/core/java/android/service/dreams/DreamManagerService.java +++ b/core/java/android/service/dreams/DreamManagerService.java @@ -114,11 +114,19 @@ public class DreamManagerService if (DEBUG) Slog.v(TAG, "awaken()"); synchronized (mLock) { if (mCurrentDream != null) { + if (DEBUG) Slog.v(TAG, "disconnecting: " + mCurrentDreamComponent + " service: " + mCurrentDream); mContext.unbindService(this); + mCurrentDream = null; + mCurrentDreamToken = null; } } } + // IDreamManager method + public boolean isDreaming() { + return mCurrentDream != null; + } + public void bindDreamComponentL(ComponentName componentName, boolean test) { if (DEBUG) Slog.v(TAG, "bindDreamComponent: componentName=" + componentName + " pid=" + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()); @@ -129,11 +137,7 @@ public class DreamManagerService Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS ) .putExtra("android.dreams.TEST", test); - - if (!mContext.bindService(intent, this, Context.BIND_AUTO_CREATE)) { - Slog.w(TAG, "unable to bind service: " + componentName); - return; - } + mCurrentDreamComponent = componentName; mCurrentDreamToken = new Binder(); try { @@ -145,6 +149,9 @@ public class DreamManagerService Slog.w(TAG, "Unable to add window token. Proceed at your own risk."); } + if (!mContext.bindService(intent, this, Context.BIND_AUTO_CREATE)) { + Slog.w(TAG, "unable to bind service: " + componentName); + } } @Override @@ -163,8 +170,7 @@ public class DreamManagerService @Override public void onServiceDisconnected(ComponentName name) { if (DEBUG) Slog.v(TAG, "disconnected: " + name + " service: " + mCurrentDream); - mCurrentDream = null; - mCurrentDreamToken = null; + // Only happens in exceptional circumstances } @Override diff --git a/core/java/android/service/dreams/IDreamManager.aidl b/core/java/android/service/dreams/IDreamManager.aidl index 722501391f0d..b64dd8f966ec 100644 --- a/core/java/android/service/dreams/IDreamManager.aidl +++ b/core/java/android/service/dreams/IDreamManager.aidl @@ -27,4 +27,5 @@ interface IDreamManager { void setDreamComponent(in ComponentName componentName); ComponentName getDreamComponent(); void testDream(in ComponentName componentName); + boolean isDreaming(); }
\ No newline at end of file diff --git a/core/java/android/util/DisplayMetrics.java b/core/java/android/util/DisplayMetrics.java index d58eec4ea3f4..506594b4bca8 100644 --- a/core/java/android/util/DisplayMetrics.java +++ b/core/java/android/util/DisplayMetrics.java @@ -92,7 +92,7 @@ public class DisplayMetrics { * density for a display in {@link #densityDpi}. */ @Deprecated - public static final int DENSITY_DEVICE = getDeviceDensity(); + public static int DENSITY_DEVICE = getDeviceDensity(); /** * The absolute width of the display in pixels. diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java index c59f1bff9fba..2b0c14df21f2 100644 --- a/core/java/android/view/Display.java +++ b/core/java/android/view/Display.java @@ -16,7 +16,6 @@ package android.view; -import android.content.res.CompatibilityInfo; import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.Rect; diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index f58cd836f9f3..5bccdd4b34be 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -59,6 +59,8 @@ interface IWindowManager void setForcedDisplaySize(int displayId, int longDimen, int shortDimen); void clearForcedDisplaySize(int displayId); + void setForcedDisplayDensity(int displayId, int density); + void clearForcedDisplayDensity(int displayId); // Is the device configured to have a full system bar for larger screens? boolean hasSystemNavBar(); diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java index abab2684489f..5f5d1f297fac 100644 --- a/core/java/android/view/Surface.java +++ b/core/java/android/view/Surface.java @@ -469,6 +469,8 @@ public class Surface implements Parcelable { public native void setFlags(int flags, int mask); /** @hide */ public native void setWindowCrop(Rect crop); + /** @hide */ + public native void setDisplayId(int displayId); diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java index a719a0159c18..fe14c88cfe9c 100644 --- a/core/java/android/view/TextureView.java +++ b/core/java/android/view/TextureView.java @@ -534,7 +534,8 @@ public class TextureView extends View { */ public Bitmap getBitmap(int width, int height) { if (isAvailable() && width > 0 && height > 0) { - return getBitmap(Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)); + return getBitmap(Bitmap.createBitmap(getResources().getDisplayMetrics(), + width, height, Bitmap.Config.ARGB_8888)); } return null; } diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 50c34076a267..cd35002d3a1d 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -12402,7 +12402,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (bitmap != null) bitmap.recycle(); try { - bitmap = Bitmap.createBitmap(width, height, quality); + bitmap = Bitmap.createBitmap(mResources.getDisplayMetrics(), + width, height, quality); bitmap.setDensity(getResources().getDisplayMetrics().densityDpi); if (autoScale) { mDrawingCache = bitmap; @@ -12494,7 +12495,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, width = (int) ((width * scale) + 0.5f); height = (int) ((height * scale) + 0.5f); - Bitmap bitmap = Bitmap.createBitmap(width > 0 ? width : 1, height > 0 ? height : 1, quality); + Bitmap bitmap = Bitmap.createBitmap(mResources.getDisplayMetrics(), + width > 0 ? width : 1, height > 0 ? height : 1, quality); if (bitmap == null) { throw new OutOfMemoryError(); } diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java index 00d4fc76a219..dae9265ab1fb 100644 --- a/core/java/android/view/ViewDebug.java +++ b/core/java/android/view/ViewDebug.java @@ -546,7 +546,7 @@ public class ViewDebug { (view != null && view.getResources() != null) ? view.getResources().getDisplayMetrics() : null; final Bitmap bitmap = metrics != null ? - Bitmap.createBitmap(metrics.widthPixels, + Bitmap.createBitmap(metrics, metrics.widthPixels, metrics.heightPixels, Bitmap.Config.RGB_565) : null; final Canvas canvas = bitmap != null ? new Canvas(bitmap) : null; return new Object[] { @@ -706,7 +706,8 @@ public class ViewDebug { Log.w("View", "Failed to create capture bitmap!"); // Send an empty one so that it doesn't get stuck waiting for // something. - b = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); + b = Bitmap.createBitmap(root.getResources().getDisplayMetrics(), + 1, 1, Bitmap.Config.ARGB_8888); } BufferedOutputStream out = null; diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index 9522a1bd5642..407bae5da2cf 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -483,7 +483,7 @@ public interface WindowManagerPolicy { * Called by window manager once it has the initial, default native * display dimensions. */ - public void setInitialDisplaySize(Display display, int width, int height); + public void setInitialDisplaySize(Display display, int width, int height, int density); /** * Check permissions when adding a window. diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java index 293eda182559..68536604bf67 100644 --- a/core/java/android/widget/StackView.java +++ b/core/java/android/widget/StackView.java @@ -1412,8 +1412,8 @@ public class StackView extends AdapterViewAnimator { return null; } - Bitmap bitmap = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), - Bitmap.Config.ARGB_8888); + Bitmap bitmap = Bitmap.createBitmap(v.getResources().getDisplayMetrics(), + v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888); mCanvas.setBitmap(bitmap); float rotationX = v.getRotationX(); diff --git a/core/java/android/widget/package.html b/core/java/android/widget/package.html index 7d94a4b71f84..91d327c4951b 100644 --- a/core/java/android/widget/package.html +++ b/core/java/android/widget/package.html @@ -1,11 +1,16 @@ <HTML> <BODY> +<p> The widget package contains (mostly visual) UI elements to use -on your Application screen. You can design your own <p> +on your Application screen. You can also design your own. +</p> + +<p> To create your own widget, extend {@link android.view.View} or a subclass. To use your widget in layout XML, there are two additional files for you to create. Here is a list of files you'll need to create to implement a custom widget: +</p> <ul> <li><b>Java implementation file</b> - This is the file that implements the behavior of the widget. If you can instantiate the object from layout XML, @@ -19,14 +24,16 @@ another in their layout XML.</li> res/layout/ that describes the layout of your widget. You could also do this in code in your Java file.</li> </ul> + +<p> ApiDemos sample application has an example of creating a custom layout XML tag, LabelView. See the following files that demonstrate implementing and using -a custom widget:</p> +a custom widget: +</p> <ul> - <li><strong>LabelView.java</strong> - The implentation file</li> + <li><strong>LabelView.java</strong> - The implementation file</li> <li><strong>res/values/attrs.xml</strong> - Definition file</li> - <li><strong>res/layout/custom_view_1.xml</strong> - Layout -file</li> + <li><strong>res/layout/custom_view_1.xml</strong> - Layout file</li> </ul> </BODY> </HTML> diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 998c037fc23a..6ad67c3673ee 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -384,7 +384,12 @@ public class ZygoteInit { Log.v(TAG, "Preloading resource #" + Integer.toHexString(id)); } if (id != 0) { - mResources.getColorStateList(id); + if (mResources.getColorStateList(id) == null) { + throw new IllegalArgumentException( + "Unable to find preloaded color resource #0x" + + Integer.toHexString(id) + + " (" + ar.getString(i) + ")"); + } } } return N; @@ -407,11 +412,11 @@ public class ZygoteInit { Log.v(TAG, "Preloading resource #" + Integer.toHexString(id)); } if (id != 0) { - Drawable dr = mResources.getDrawable(id); - if ((dr.getChangingConfigurations()&~ActivityInfo.CONFIG_FONT_SCALE) != 0) { - Log.w(TAG, "Preloaded drawable resource #0x" + if (mResources.getDrawable(id) == null) { + throw new IllegalArgumentException( + "Unable to find preloaded drawable resource #0x" + Integer.toHexString(id) - + " (" + ar.getString(i) + ") that varies with configuration!!"); + + " (" + ar.getString(i) + ")"); } } } diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp index 3cd28b113a72..3ad6406ea383 100644 --- a/core/jni/android_view_Surface.cpp +++ b/core/jni/android_view_Surface.cpp @@ -717,6 +717,14 @@ static void Surface_setWindowCrop(JNIEnv* env, jobject thiz, jobject crop) } } +static void Surface_setDisplayId(JNIEnv* env, jobject thiz, jint displayId) +{ + const sp<SurfaceControl>& surface(getSurfaceControl(env, thiz)); + if (surface == 0) return; + + // TODO(mathias): Everything. +} + // ---------------------------------------------------------------------------- static void Surface_copyFrom( @@ -855,6 +863,7 @@ static JNINativeMethod gSurfaceMethods[] = { {"writeToParcel", "(Landroid/os/Parcel;I)V", (void*)Surface_writeToParcel }, {"isConsumerRunningBehind", "()Z", (void*)Surface_isConsumerRunningBehind }, {"setWindowCrop", "(Landroid/graphics/Rect;)V", (void*)Surface_setWindowCrop }, + {"setDisplayId", "(I)V", (void*)Surface_setDisplayId }, }; void nativeClassInit(JNIEnv* env, jclass clazz) diff --git a/core/res/res/drawable-nodpi/background_holo_dark.png b/core/res/res/drawable-nodpi/background_holo_dark.png Binary files differdeleted file mode 100644 index 85bd6f7e404b..000000000000 --- a/core/res/res/drawable-nodpi/background_holo_dark.png +++ /dev/null diff --git a/core/res/res/drawable-nodpi/background_holo_light.png b/core/res/res/drawable-nodpi/background_holo_light.png Binary files differdeleted file mode 100644 index 5fb4a9dc0b1f..000000000000 --- a/core/res/res/drawable-nodpi/background_holo_light.png +++ /dev/null diff --git a/core/res/res/drawable/background_holo_dark.xml b/core/res/res/drawable/background_holo_dark.xml new file mode 100644 index 000000000000..7cfae4dc740e --- /dev/null +++ b/core/res/res/drawable/background_holo_dark.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2012 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. +--> + +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <gradient + android:startColor="#ff000000" + android:endColor="#ff272d33" + android:angle="270" /> +</shape> diff --git a/core/res/res/drawable/background_holo_light.xml b/core/res/res/drawable/background_holo_light.xml new file mode 100644 index 000000000000..4e863ea2b205 --- /dev/null +++ b/core/res/res/drawable/background_holo_light.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2012 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. +--> + +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <gradient + android:startColor="#ffe8e8e8" + android:endColor="#ffffffff" + android:angle="270" /> +</shape> diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 476f7b0b9603..9602e6bb93fc 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Laat die program toe om WAP-boodskappe te ontvang en te verwerk. Hierdie toestemming sluit ook in dat boodskappe wat na jou toestel gestuur is, gemonitor of uitgevee kan word, sonder dat jy dit gesien het."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"haal lopende programme op"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Laat die program toe om inligting oor die huidig- en onlangslopende take op te haal. Dit kan moontlik die program toelaat om inligting oor watter programme op die toestel gebruik word, te ontdek."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"haal besonderhede van lopende programme op"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Laat die program toe om inligting op te haal oor huidige en onlangse lopende take. Kwaadwillige programme kan dalk private inligting oor ander programme ontdek."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"herrangskik lopende programme"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Stelsel"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-oudio"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Klaar"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Media-uitvoer"</string> </resources> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 0a490eb4260e..ec1c4bc264f0 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"መተግበሪያው የWAP መልእክቶችን እንዲያነብ እና እንዲያካሂድ ይፈቅዳል። ይህ ፈቃድ የተላኩልህን መልእክቶች ላንተ ሳያሳይህ የመቆጣጠር ወይም የመሰረዝ ብቃትን ያጠቃልላል።"</string> <string name="permlab_getTasks" msgid="6466095396623933906">"አሂድ መተግበሪያዎችን ሰርስረህ አውጣ"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"መተግበሪያው በአሁኑ ጊዜና በቅርቡ እየተካሄዱ ስላሉ ተግባሮችን መረጃ ሰርስሮ እንዲያወጣ ይፈቅድለታል። ይህ መተግበሪያው በመሳሪያው ላይ የትኛዎቹ መተግበሪያዎች ጥቅም ላይ ስለመዋላቸው መረጃ እንዲያገኝ ሊፈቅድለት ይችላል።"</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"እየሄዱ ስላሉ የመተግበሪያዎች ዝርዝሮች አምጣ"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"መተግበሪያው በአሁኑ ጊዜ እየተካሄዱ ስላሉና በቅርብ ጊዜ ስለተካሄዱ ተግባሮች መረጃ ዝርዝር እንዲያወጣ ይፈቅድለታል። ተንኮል-አዘል መተግበሪያዎች ስለ ሌሎች መተግበሪያዎች የግል መረጃ ሊያገኙ ይችላሉ።"</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"አሂድ ትግበራዎችን ድጋሚ ደርድር"</string> @@ -1150,7 +1158,7 @@ <string name="permission_request_notification_title" msgid="6486759795926237907">"ፈቃድ ተጠይቋል"</string> <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">\n" ለ<xliff:g id="ACCOUNT">%s</xliff:g> መለያ ፈቃድ ተጠይቋል"</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> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"ስርዓት"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"የብሉቱዝ ድምጽ"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"ተከናውኗል"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"የሚዲያ ውጽዓት"</string> </resources> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index cae9a5bca8a3..0f3f4228ea77 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"للسماح للتطبيق بتلقي رسائل WAP ومعالجتها. ويتضمن هذا الإذن إمكانية مراقبة الرسائل التي يتم إرسالها إليك أو حذفها بدون عرضها لك."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"استرداد التطبيقات التي قيد التشغيل"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"للسماح للتطبيق باسترداد معلومات حول المهام التي يجري تشغيلها حاليًا والتي تم تشغيلها مؤخرًا. وقد يسمح هذا للتطبيق باكتشاف معلومات حول التطبيقات المستخدمة على الجهاز."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"استرداد تفاصيل التطبيقات قيد التشغيل"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"يسمح للتطبيق باسترداد معلومات تفصيلية حول المهام قيد التشغيل حاليًا ومؤخرًا. قد تكتشف التطبيقات الضارة معلومات خاصة حول التطبيقات الأخرى."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"إعادة ترتيب التطبيقات قيد التشغيل"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"النظام"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"صوت بلوتوث"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"تم"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 1f7c0436a19d..d4a2b558ad50 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Дазваляе прыкладанням атрымліваць і апрацоўваць паведамленні WAP. Дзякуючы гэтаму дазволу можна кантраляваць або выдаляць паведамленні, пасланыя вам, не паказваючы іх."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"атрымаць запушчаныя прыкладанні"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Дазваляе прыкладанню атрымлiваць звесткi пра прыкладаннi, запушчаныя зараз i нядаўна. Прыкладанне можа знайсцi iнфармацыю пра тое, якiя прыкладаннi выкарыстоўваюцца на прыладзе."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"атрымаць падрабязныя дадзеныя пра запушчаныя прыкладаннi"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Дазваляе прыкладанню атрымліваць падрабязную інфармацыю пра бягучыя і нядаўна запушчаныя задачы. Шкоднасныя прыкладанні могуць атрымліваць асабістую інфармацыю пра іншыя прыкладаннi."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"змяніць парадак запушчаных прыкладанняў"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Сістэма"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-аўдыё"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Гатова"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 0645d78fd5e0..05ca9812a5b4 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Разрешава на приложението да получава и обработва WAP съобщения. Това разрешение включва възможността да наблюдава или изтрива изпратените до вас, без да ви ги покаже."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"извличане на изпълняваните приложения"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Разрешава на приложението да извлича информация за задачите, изпълнявани понастоящем и неотдавна. Това може да му позволи да открива данни за това, кои приложения се използват на устройството."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"извличане на подробности за изпълняваните прилож."</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Разрешава на приложението да извлича подробна информация за задачите, изпълнявани понастоящем и неотдавна. Злонамерените приложения могат да открият поверителна информация за други приложения."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"пренареждане на изпълняваните приложения"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Звук през Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 95f894451818..c5cb2e09757f 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Permet que l\'aplicació rebi i processi missatges WAP. Aquest permís inclou la capacitat de controlar o de suprimir missatges que s\'han enviat al teu dispositiu sense mostrar-te\'ls."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"recupera les aplicacions en execució"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Permet que l\'aplicació recuperi informació sobre les tasques que s\'executen actualment i les que s\'han executat recentment. Aquesta acció pot permetre que l\'aplicació descobreixi informació sobre les aplicacions que s\'utilitzen al dispositiu."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"recupera els detalls d\'aplicacions en execució"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Permet que l\'aplicació recuperi informació detallada sobre les tasques que s\'estan executant actualment i que s\'han executat recentment. Les aplicacions malicioses poden descobrir informació privada sobre altres aplicacions."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"canvia l\'ordre de les aplicacions en execució"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Àudio per Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fet"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 190eb62976b5..6773a07cc0f1 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Umožňuje aplikaci přijmout a zpracovat zprávy WAP. Toto oprávnění umožňuje sledovat přijaté zprávy nebo je smazat, aniž by se vám zobrazily."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"načtení spuštěných aplikací"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Umožňuje aplikaci získat informace o aktuálně a naposledy spuštěných úlohách. Aplikace s tímto oprávněním může odhalit informace o aplikacích, které se v zařízení používají."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"získání podrobností o spuštěných aplikacích"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Umožňuje aplikaci získat podrobné informace o aktuálně a naposledy spuštěných úlohách. Škodlivé aplikace mohou odhalit soukromé informace o ostatních aplikacích."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"změna uspořádání spuštěných aplikací"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Systém"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth Audio"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Hotovo"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Výstup médií"</string> </resources> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 89f2e1ed2e99..94d923fbf650 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Tillader, at appen kan modtage og behandle WAP-beskeder. Denne tilladelse omfatter muligheden for at overvåge eller slette de beskeder, der sendes til dig, uden at vise dem til dig."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"hente kørende apps"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Tillader, at appen kan hente oplysninger om nuværende og seneste opgaver. Med denne tilladelse kan appen finde oplysninger om, hvilke applikationer der bruges på enheden."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"hente oplysninger om apps, der kører"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Tillader, at appen kan hente oplysninger om aktuelle og seneste opgaver. Ondsindede apps kan muligvis finde personlige oplysninger om andre apps."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"omorganisere kørende apps"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-lyd"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Udfør"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Medieudgang"</string> </resources> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 02017c4d437f..af976d2e796f 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Ermöglicht der App, WAP-Nachrichten zu empfangen und zu verarbeiten. Mit der Berechtigung können Nachrichten, die an Sie gesendet wurden, überwacht und gelöscht werden, bevor sie Ihnen angezeigt werden."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"aktive Apps abrufen"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Ermöglicht der App, Informationen zu aktuellen und kürzlich ausgeführten Aufgaben abzurufen. Damit kann die App möglicherweise ermitteln, welche Apps auf Ihrem Gerät zum Einsatz kommen."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"Details zu ausgeführten Apps abrufen"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Ermöglicht der App, detaillierte Informationen zu aktuellen und kürzlich ausgeführten Aufgaben abzurufen. Schädliche Apps können so geheime Informationen zu anderen Apps erhalten."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"Aktive Apps neu ordnen"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-Audio"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fertig"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Medienausgabe"</string> </resources> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 311631784818..440c3a5e4b5a 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Επιτρέπει στην εφαρμογή τη λήψη και την επεξεργασία μηνυμάτων WAP. Αυτό σημαίνει ότι η εφαρμογή θα μπορούσε να παρακολουθήσει ή να διαγράψει τα μηνύματα που αποστέλλονται στη συσκευή σας χωρίς αυτά να εμφανιστούν σε εσάς."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"ανάκτηση εκτελούμενων εφαρμογών"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Επιτρέπει στην εφαρμογή την ανάκτηση πληροφοριών σχετικά με τρέχουσες και πρόσφατα εκτελούμενες εργασίες. Αυτό μπορεί να δίνει τη δυνατότητα στην εφαρμογή να ανακαλύπτει πληροφορίες σχετικά με το ποιες εφαρμογές χρησιμοποιούνται στη συσκευή."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"ανάκτηση λεπτομερειών σχετικά με τις εκτελούμενες εφαρμογές"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Επιτρέπει στην εφαρμογή την ανάκτηση λεπτομερών πληροφοριών σχετικά με τις τρέχουσες εκτελούμενες εργασίες και τις εργασίες που έχουν εκτελεστεί πρόσφατα. Τυχόν κακόβουλες εφαρμογές ενδέχεται να ανακαλύψουν ιδιωτικές πληροφορίες σχετικά με άλλες εφαρμογές."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"αναδιάταξη εκτελούμενων εφαρμογών"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Σύστημα"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Ήχος Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Τέλος"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Έξοδος μέσων"</string> </resources> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index e6e85ed53274..e6fbf30faabb 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Allows the app to receive and process WAP messages. This permission includes the ability to monitor or delete messages sent to you without showing them to you."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"retrieve running apps"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Allows the app to retrieve information about currently and recently running tasks. This may allow the app to discover information about which applications are used on the device."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"retrieve details of running apps"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Allows the app to retrieve detailed information about currently and recently running tasks. Malicious apps may discover private information about other apps."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"re-order running apps"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Done"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Media output"</string> </resources> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index b1cf6bd25e71..2ed7e4df19f4 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Permite que la aplicación reciba y procese mensajes WAP, lo que significa que podría controlar o eliminar mensajes enviados al usuario sin mostrártelos."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"recuperar aplicaciones en ejecución"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Permite que la aplicación recupere información sobre las tareas que se estén ejecutando en ese momento o que se hayan ejecutado recientemente. La aplicación puede utilizar este permiso para descubrir cuáles son las aplicaciones que se utilizan en el dispositivo."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"recuperar información sobre las aplicaciones en ejecución"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Permite que la aplicación recupere información detallada sobre tareas en ejecución y recientemente ejecutadas. Las aplicaciones malintencionadas pueden hallar información privada sobre otras aplicaciones."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"reorganizar aplicaciones en ejecución"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Listo"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index c7650561ad85..18fc0930d335 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Permite que la aplicación reciba y procese mensajes WAP, lo que significa que podría utilizar este permiso para controlar o eliminar mensajes enviados al usuario sin mostrárselos."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"recuperar aplicaciones en ejecución"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Permite que aplicación recupere información sobre tareas que se están ejecutando en ese momento o que se han ejecutado recientemente. La aplicación puede utilizar este permiso para descubrir cuáles son las aplicaciones que se utilizan en el dispositivo."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"recuperar información de aplicaciones en ejecución"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Permite que la aplicación recupere información sobre tareas que se están ejecutando en este momento o que se han ejecutado recientemente. Las aplicaciones malintencionadas pueden usar este servicio para acceder a información privada sobre otras aplicaciones."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"reorganizar aplicaciones en ejecución"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fin"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Salida multimedia"</string> </resources> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 4228f282a392..2c3427940f75 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Võimaldab rakendusel vastu võtta ja töödelda WAP-sõnumeid. See luba hõlmab võimet jälgida või kustutada teile saadetud sõnumeid neid teile näitamata."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"Käitatud rakenduste toomine"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Võimaldab rakendusel tuua teavet praegu ja hiljuti käitatud ülesannete kohta. See võib lubada rakendusel avastada teavet selle kohta, milliseid rakendusi seadmes kasutatakse."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"töötavate rakenduste üksikasjade toomine"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Võimaldab rakendusel tuua üksikasjalikku teavet praegu töötavate ja hiljuti käitatud ülesannete kohta. Pahatahtlikud rakendused võivad tuvastada privaatset teavet muude rakenduste kohta."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"käitatud rakenduste ümberjärjestamine"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Süsteem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-heli"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Valmis"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index e49748907014..25ac147fe87f 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"به برنامه اجازه میدهد پیامهای WAP را دریافت و پردازش کند. این مجوز میتواند پیامهای ارسالی به شما را بدون نمایش آنها به شما حذف یا کنترل کند."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"بازیابی برنامههای در حال اجرا"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"به برنامه امکان میدهد اطلاعات مربوط به کارهای در حال اجرای اخیر و کنونی را بازیابی کند. این ممکن است به برنامه امکان دهد به اطلاعات مربوط به برنامههایی که در دستگاه استفاده میشوند دست یابد."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"بازیابی جزئیات برنامههای در حال اجرا"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"به برنامه اجازه میدهد تا اطلاعات مفصلی مربوط به کارهایی که در حال حاضر و اخیراً اجرا میشوند را بازیابی کند. برنامههای مخرب میتوانند اطلاعات شخصی مربوط به برنامههای دیگر را پیدا کنند."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"تنظیم مجدد ترتیب برنامههای در حال اجرا"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"سیستم"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"بلوتوثهای صوتی"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"انجام شد"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index edf133a703cd..530be729a7d4 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Antaa sovelluksen vastaanottaa ja käsitellä WAP-viestejä. Sovellus voi valvoa tai poistaa laitteeseesi lähetettyjä viestejä näyttämättä niitä sinulle."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"käynnissä olevien sovellusten noutaminen"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Antaa sovelluksen noutaa tietoja käynnissä olevista ja äskettäin suoritetuista tehtävistä. Sovellus voi saada tietoja laitteella käytetyistä sovelluksista."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"hae tiedot suoritettavista sovelluksista"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Antaa sovellukselle oikeuden noutaa käynnissä oleviin ja käynnissä olleisiin tehtäviin liittyviä tietoja. Haitalliset sovellukset saattavat saada näin muihin sovelluksiin liittyviä yksityisiä tietoja."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"käynnissä olevien sovellusten järjesteleminen"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Järjestelmä"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ääni"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Valmis"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Median äänentoisto"</string> </resources> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 58ae36194e03..786989e46961 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Permet à l\'application de recevoir et de traiter les messages WAP. Cette autorisation lui donne la possibilité de surveiller ou supprimer les messages envoyés à votre appareil sans vous les montrer."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"récupérer les applications en cours d\'exécution"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Permet à l\'application de récupérer des informations sur des tâches en cours d\'exécution et récemment exécutées. L\'application est ainsi susceptible de d\'obtenir des informations sur les applications utilisées sur l\'appareil."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"récupérer les détails des applications en cours d\'exécution"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Permet à l\'application de récupérer des informations détaillées sur les tâches en cours d\'exécution ou récemment exécutées. Des applications malveillantes peuvent utiliser cette fonctionnalité pour obtenir des informations confidentielles relatives à d\'autres applications."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"réorganiser les applications en cours d\'exécution"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Système"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"OK"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Sortie multimédia"</string> </resources> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 093d62ac5eff..dca6c1e5e706 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"एप्लिकेशन को WAP संदेशों को प्राप्त और संसाधित करने देता है. इस अनुमति में आपको भेजे गए संदेशों की निगरानी आपको दिखाए बिना करने और हटाने की क्षमता शामिल है."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"चल रहे एप्लिकेशन पुनर्प्राप्त करें"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"एप्लिकेशन को वर्तमान में और हाल ही में चल रहे कार्यों के बारे में जानकारी को पुन: प्राप्त करने देता है. इससे एप्लिकेशन उपकरण पर उपयोग किए गए एप्लिकेशन के बारे में जानकारी खोज सकता है."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"चल रहे एप्लिकेशन के विवरण प्राप्त करें"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"एप्लिकेशन को वर्तमान में और हाल ही में चल रहे कार्यों की जानकारी प्राप्त करने देता है. दुर्भावनापूर्ण एप्लिकेशन अन्य एप्लिकेशन के बारे में निजी जानकारी खोज सकते हैं."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"चल रहे एप्लिकेशन पुन: क्रमित करें"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"सिस्टम"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth ऑडियो"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"पूर्ण"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 41f34f6a2dd7..de5a636d0e6b 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Aplikaciji omogućuje primanje i obradu WAP poruka. Ta dozvola uključuje mogućnost nadziranja ili brisanja vama poslanih poruka, a da vam ih ne prikaže."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"dohvaćanje pokrenutih aplikacija"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Aplikaciji omogućuje dohvaćanje informacija o trenutačnim i nedavnim tekućim zadacima. To aplikaciji može omogućiti otkrivanje informacija o tome koje se aplikacije upotrebljavaju na uređaju."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"dohvaćanje pojedinosti o pokrenutim aplikacijama"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Aplikaciji omogućuje dohvaćanje detaljnih informacija o trenutačno i nedavno pokrenutim zadacima. Zlonamjerne aplikacije mogu otkriti privatne informacije o drugim aplikacijama."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"promjena redoslijeda pokrenutih aplikacija"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sustav"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth zvuk"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gotovo"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index f4526fa2917b..304d05fe8bba 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Lehetővé teszi az alkalmazás számára, hogy WAP-üzeneteket fogadjon és dolgozzon fel. Ez azt is jelenti, hogy az alkalmazás megfigyelheti vagy törölheti a beérkező üzeneteket anélkül, hogy Ön látná azokat."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"futó alkalmazások lekérése"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Lehetővé teszi az alkalmazás számára a jelenleg futó és nemrég befejezett feladatokkal kapcsolatos információk lekérését. Ezáltal az alkalmazás engedélyt kap az eszközön használt alkalmazásokkal kapcsolatos információk felderítésére."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"futó alkalmazások részleteinek lekérése"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Lehetővé teszi az alkalmazás számára a jelenleg és a nemrég futó feladatok részletes adatainak lekérését. A rosszindulatú alkalmazások más alkalmazásokkal kapcsolatos privát adatokhoz férhetnek hozzá."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"futó alkalmazások átrendezése"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Rendszer"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth hang"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Kész"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Médiakimenet"</string> </resources> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index be91c498b977..f7b744f930da 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Memungkinkan aplikasi menerima dan memproses pesan WAP. Izin ini mencakup kemampuan untuk memantau atau menghapus pesan yang dikirim kepada Anda tanpa menunjukkannya kepada Anda."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"mengambil apl yang berjalan"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Memungkinkan aplikasi mengambil informasi tentang tugas yang dijalankan saat ini dan baru-baru ini. Izin ini memungkinkan aplikasi menemukan informasi tentang aplikasi mana yang digunakan pada perangkat."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"mengambil detail aplikasi yang sedang berjalan"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Izinkan aplikasi mengambil informasi mendetail tentang tugas yang saat ini dan baru-baru ini dijalankan. Aplikasi berbahaya dapat menemukan informasi pribadi tentang aplikasi lain."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"menyusun ulang apl yang berjalan"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Selesai"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index c492e2d3e979..feb2f7153c1f 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Consente all\'applicazione di ricevere ed elaborare messaggi WAP. Questa autorizzazione include la facoltà di monitorare o eliminare i messaggi che ti vengono inviati senza mostrarteli."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"recupero applicazioni in esecuzione"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Consente all\'applicazione di recuperare informazioni sulle attività attualmente e recentemente in esecuzione. Ciò potrebbe consentire all\'applicazione di scoprire informazioni sulle applicazioni in uso sul dispositivo."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"recupero dettagli applicazioni in esecuzione"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Consente all\'applicazione di recuperare informazioni dettagliate sulle attività attualmente e recentemente in esecuzione. Le applicazioni dannose potrebbero scoprire informazioni riservate su altre applicazioni."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"riordinamento applicazioni in esecuzione"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fine"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Uscita media"</string> </resources> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index f5a7e813798c..10b2d913a909 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"מאפשר ליישום לקבל ולעבד הודעות WAP. אישור זה כולל את היכולת לעקוב אחר הודעות שנשלחו אליך ולמחוק אותן מבלי להציג לך אותן."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"אחזור יישומים פעילים"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"מאפשר ליישום לאחזר מידע לגבי משימות הפועלות כרגע ושפעלו לאחרונה. ייתכן שהדבר יתיר ליישום לגלות מידע לגבי היישומים שבהם נעשה שימוש במכשיר."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"אחזור פרטי יישומים פועלים"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"מאפשר ליישום לאחזר מידע מפורט על המשימות הנוכחיות הפועלות ועל משימות שפעלו לאחרונה. יישומים זדוניים עלולים לגלות מידע אישי על יישומים אחרים."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"סידור מחדש של יישומים פעילים"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"מערכת"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"אודיו Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"סיום"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 048cd499da21..8ae04cfc9205 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"WAPメッセージの受信と処理をアプリに許可します。これにより、アプリが端末に届いたメッセージを表示することなく監視または削除できるようになります。"</string> <string name="permlab_getTasks" msgid="6466095396623933906">"実行中のアプリの取得"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"現在実行中または最近実行したタスクに関する情報の取得をアプリに許可します。これにより、その端末でどのアプリを使用しているかをアプリから識別できるようになる可能性があります。"</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"実行中のアプリの詳細の取得"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"現在実行中のタスクまたは最近実行したタスクに関する情報の取得をアプリに許可します。この許可を悪意のあるアプリに利用されると、他のアプリに関する非公開情報が読み取られる恐れがあります。"</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"実行中のアプリの順序変更"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"システム"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth音声"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完了"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 1fbf600689cd..1a85a9bb5b8c 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"앱이 WAP 메시지를 수신하고 처리할 수 있도록 허용합니다. 이는 앱이 사용자에게 표시하지 않고 기기로 전송된 메시지를 모니터링 또는 삭제할 수도 있다는 것을 의미합니다."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"실행 중인 앱 검색"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"앱이 현재 실행 중이거나 최근에 실행된 작업에 대한 정보를 검색할 수 있도록 허용합니다. 이 경우 앱이 기기에서 사용되는 다른 앱에 대한 정보를 검색할 수 있습니다."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"실행 중인 앱 세부정보 검색"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"앱이 현재 실행 중이거나 최근에 실행된 작업에 대한 상세한 정보를 검색할 수 있도록 허용합니다. 이 경우 악성 앱이 다른 앱에 대한 개인 정보를 검색할 수 있습니다."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"실행 중인 앱 순서 재지정"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"시스템"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"블루투스 오디오"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"완료"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index 9db7a4dd316b..8c3a55b5710b 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Leidžiama programai gauti ir apdoroti WAP pranešimus. Šis leidimas apima galimybę stebėti ar ištrinti jums siunčiamus pranešimus jums jų neparodžius."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"nuskaityti vykdomas programas"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Leidžiama programai nuskaityti informaciją apie šiuo ir pastaruoju metu vykdomas užduotis. Taip programa gali atrasti informacijos, kokios programos naudojamos įrenginyje."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"nuskaityti veikiančių programų išsamią informaciją"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Leidžiama programai nuskaityti išsamią informaciją apie šiuo ir pastaruoju metu vykdomas užduotis. Kenkėjiškos programos gali surasti privačios informacijos apie kitas programas."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"pertvarkyti vykdomas programas"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"„Bluetooth“ garsas"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Atlikta"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index fd24d2ab4cce..f0df7d33ea74 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Ļauj lietotnei saņemt un apstrādāt WAP ziņojumus. Šī atļauja ietver iespēju pārraudzīt vai dzēst jums nosūtītos ziņojumus, neparādot tos jums."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"izgūt izmantotās lietotnes"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Ļauj lietotnei izgūt informāciju par pašreiz un nesen darbinātajiem uzdevumiem. Tādējādi lietotne var atklāt informāciju par ierīcē izmantotajām lietojumprogrammām."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"Informācijas izguve par izmantotajām lietotnēm"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Ļauj lietotnei izgūt informāciju par šobrīd un nesen veiktajiem uzdevumiem. Ļaunprātīgas lietotnes var atklāt privātu informāciju par citām lietotnēm."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"pārkārtot izmantotās lietotnes"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistēma"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gatavs"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index 1719049ea2f7..201d8712341e 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Membenarkan apl menerima dan memproses mesej WAP. Kebenaran ini termasuk keupayaan untuk memantau atau memadam mesej yang dihantar kepada anda tanpa menunjukkannya kepada anda."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"dapatkan semula apl yang sedang dijalankan"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Membenarkan apl mengambil maklumat tentang tugasan yang sedang dan baru berjalan. Ini boleh membenarkan apl untuk menemui maklumat tentang apl mana yang digunakan pada peranti."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"dapatkan butiran apl yang berjalan"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Membenarkan apl untuk mendapatkan maklumat terperinci tentang tugasan yang sedang dan baru berjalan. Apl hasad boleh mendapat maklumat peribadi tentang apl lain."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"susun semula tertib apl yang dijalankan"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Selesai"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index cafdcd3e8024..1df92e8ca803 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Lar appen motta og behandle WAP-meldinger. Dette betyr at appen kan overvåke eller slette meldinger som er sendt til deg uten at du har sett dem."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"hente apper som kjører"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Lar appen hente informasjon om oppgaver som kjører og som nylig har kjørt. Dette kan tillate appen å oppdage informasjon om hvilke apper som brukes på enheten."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"hente informasjon om apper som kjører"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Tillater at appen henter ut informasjon om oppgaver som kjører eller nylig har kjørt. Skadelige apper kan bruke dette til å oppdage privat informasjon om andre apper."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"Endre rekkefølge på apper som kjører"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-lyd"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fullført"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Medieutdata"</string> </resources> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 04765cf948f4..0ab17e1af96a 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Hiermee kan de app WAP-berichten ontvangen en verwerken. Dit betekent dat de app berichten die naar uw apparaat zijn verzonden, kan bijhouden of verwijderen zonder deze aan u weer te geven."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"actieve apps ophalen"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Hiermee kan de app informatie ophalen over actieve en recent uitgevoerde taken. Zo kan de app informatie vinden over welke apps op het apparaat worden gebruikt."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"details van actieve apps ophalen"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Hiermee kan de app gedetailleerde informatie over huidige en recent uitgevoerde taken ophalen. Schadelijke apps kunnen op deze manier mogelijk privé-informatie over andere apps achterhalen."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"actieve apps opnieuw rangschikken"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Systeem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-audio"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gereed"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Media-uitvoer"</string> </resources> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 89875e188ee9..71247cda63b7 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Pozwala aplikacji na odbieranie i przetwarzanie wiadomości WAP. To oznacza, że aplikacja będzie mogła bez Twojej wiedzy monitorować i usuwać wiadomości wysyłane do Twojego urządzenia."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"pobieranie uruchomionych aplikacji"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Pozwala aplikacji na pobieranie informacji o aktualnie i niedawno działających zadaniach. Dzięki temu aplikacja może uzyskać informacje o tym, które aplikacje są używane na urządzeniu."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"Pobieraj informacje o uruchomionych aplikacjach"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Zezwala aplikacji na pobieranie informacji o obecnie i ostatnio uruchomionych zadaniach. Złośliwe aplikacje mogą uzyskać dostęp do prywatnych informacji na temat innych aplikacji."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"zmienianie kolejności uruchomionych aplikacji"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Dźwięk Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gotowe"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 2a1d15aabd55..6f26a3a92fae 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Permite que a aplicação receba e processe mensagens WAP. Esta autorização inclui a capacidade de monitorizar ou eliminar mensagens enviadas para si sem as apresentar."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"obter aplicações em execução"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Permite que a aplicação recupere informações acerca de tarefas executadas atual e recentemente. Isto pode permitir que a aplicação descubra informações acerca de quais as aplicações utilizadas no dispositivo."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"obter detalhes das aplicações em execução"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Permite à aplicação obter informações detalhadas sobre tarefas atualmente em execução e recentemente executadas. As aplicações maliciosas poderão descobrir informações privadas de outras aplicações."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"reordenar as aplicações em execução"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Áudio Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Concluído"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index df745883d1c5..d9615656b019 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Permite que o aplicativo receba e processe mensagens WAP. Esta permissão inclui a capacidade de monitorar ou excluir mensagens enviadas para você sem mostrá-las para você."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"recuperar aplicativos em execução"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Permite que o aplicativo obtenha informações sobre tarefas em execução atuais e recentes. Pode permitir que o aplicativo descubra informações sobre os aplicativos usados no dispositivo."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"recuperar detalhes dos aplicativos em execução"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Permite que o aplicativo recupere informações detalhadas sobre tarefas executadas atual e recentemente. Aplicativos maliciosos podem descobrir informações privadas sobre outros aplicativos."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"reordenar os aplicativos em execução"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Áudio Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Concluído"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml index a9eafdb68cef..90c891631ff8 100644 --- a/core/res/res/values-rm/strings.xml +++ b/core/res/res/values-rm/strings.xml @@ -289,6 +289,14 @@ <skip /> <!-- no translation found for permdesc_getTasks (7454215995847658102) --> <skip /> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <!-- no translation found for permlab_getDetailedTasks (6229468674753529501) --> <skip /> <!-- no translation found for permdesc_getDetailedTasks (153824741440717599) --> @@ -2050,4 +2058,6 @@ <skip /> <!-- no translation found for media_route_chooser_grouping_done (7966438307723317169) --> <skip /> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 537cb205c531..a3c2688db5c0 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Permite aplicaţiei să primească şi să proceseze mesaje WAP. Această permisiune include capacitatea de a monitoriza sau şterge mesajele care v-au fost trimise fără a vi le arăta."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"preluare aplicaţii care rulează"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Permite aplicaţiei să preia informaţiile despre activităţile care rulează în prezent şi care au rulat recent. În acest fel, aplicaţia poate descoperi informaţii despre aplicaţiile care sunt utilizate pe dispozitiv."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"preia detalii despre aplicaţiile care rulează"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Permite aplicaţiei să preia informaţii detaliate despre activităţile rulate curent şi recent. Aplicaţiile rău intenţionate pot să descopere informaţii private despre alte aplicaţii."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"reordonare aplicaţii care rulează"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Terminat"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index f11a38a615c5..28871abe54dc 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Приложение сможет получать и обрабатывать WAP-сообщения. Это значит, что оно сможет отслеживать и удалять отправленные на ваше устройство сообщения, не показывая их."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"Получение данных о запущенных приложениях"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Приложение сможет получать информацию о недавно запущенных и выполняемых задачах, а следовательно, и о приложениях, используемых на устройстве."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"получение сведений о работающих приложениях"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Приложение сможет получать подробные сведения о недавно запущенных и выполняемых задачах. При этом конфиденциальная информация о других приложениях не будет защищена от вредоносных программ."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"Упорядочивание запущенных приложений"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Воспроизведение звука через Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 3488b618427d..85451e21d6b3 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Umožňuje aplikácii prijímať a spracovávať správy WAP. Toto povolenie zahŕňa možnosť sledovať vaše správy alebo ich odstrániť bez toho, aby sa vám zobrazili."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"načítať spustené aplikácie"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Umožňuje aplikácii načítať informácie o aktuálne či nedávno spustených úlohách. Toto povolenie môže aplikácii umožniť objaviť informácie o tom, ktoré aplikácie sa na zariadení používajú."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"načítať podrobnosti o spustených aplikáciách"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Umožňuje aplikácii načítať podrobné informácie o aktuálnych a nedávno spustených úlohách. Škodlivé aplikácie môžu odhaliť súkromné informácie o iných aplikáciách."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"zmeniť poradie spustených aplikácií"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Systém"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Hotovo"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index b25e3d4fd8be..fd060e4ab91e 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Aplikaciji omogoča prejemanje in obdelavo sporočil WAP. S tem lahko aplikacija nadzoruje ali izbriše sporočila, poslana v napravo, ne da bi vam jih pokazala."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"dobivanje programov, ki se izvajajo"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Aplikaciji omogoča prejemanje podatkov o trenutnih in nedavno izvajajočih se opravilih. S tem lahko aplikacija odkrije podatke o aplikacijah, ki se uporabljajo v napravi."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"prejemanje podrobnosti o aplikacijah, ki se izvajajo"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Aplikaciji omogoča, da dobi podatke o trenutnih in nedavno izvajajočih se opravilih. Zlonamerne aplikacije lahko odkrijejo zasebne podatke o drugih aplikacijah."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"preurejanje programov, ki se izvajajo"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Zvok prek Bluetootha"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Končano"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 01959681772c..d5a8b79056b0 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Дозвољава апликацији да прима и обрађује WAP поруке. Ова дозвола укључује могућност праћења или брисања порука које вам се шаљу, а које вам се не приказују."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"преузимање покренутих апликација"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Дозвољава апликацији да преузима информације о актуелним и недавно покренутим задацима. Ово може да омогући апликацији да открије информације о томе које се апликације користе на уређају."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"преузимање детаља о покренутим апликацијама"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Дозвољава апликацији да преузима детаљне информације о актуелним и недавно покренутим задацима. Злонамерне апликације могу да открију приватне информације о другим апликацијама."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"промена редоследа покренутих апликација"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Систем"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth аудио"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 31d633978bce..3f82636f54d5 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Tillåter att appen tar emot och hanterar WAP-meddelanden. Med den här behörigheten kan appen övervaka eller ta bort meddelanden som skickats till dig utan att visa dem för dig."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"hämta appar som körs"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Tillåter att appen hämtar information om nyligen körda och pågående aktiviteter. Detta kan innebära att appen tillåts ta reda på vilka appar som används på enheten."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"hämta information om aktiva appar"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Tillåter att appen hämtar detaljerad information om uppgifter som körs och har körts. Skadliga appar kan upptäcka personliga uppgifter om andra appar."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"byt ordning på appar som körs"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ljud"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Klar"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Medieuppspelning"</string> </resources> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 6fb20ddac27b..90290b862532 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Inaruhusu programu kupokea na kuchakata ujumbe wa WAP. Idhini hii inajumuisha uwezo wa kuchunguza na kufuta ujumbe uliotumwa kwako bila ya kukuonyesha."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"rudisha programu zinazoendeshwa"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Inaruhusu programu kurudisha taarifa kuhusu kazi zinazoendeshwa sasa na hivi karibuni. Hii inaweza kuruhusu programu kugundua taarifa kuhusu ni programu zipi zinazotumika kwenye kifaa."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"epua maelezo ya programu zinazoendeshwa"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Huruhusu programu kuepua maelezo tondoti kuhusu kazi za sasa na zinazoendelea hivi karibuni. Programu hasidi huenda zikagundua maelezo ya kibinafsi kuhusu programu zingine."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"Agiza tena programu za kuendeshwa"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Mfumo"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Sauti ya Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Kwisha"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Towe ya midia"</string> </resources> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 32f6aead786f..b9b5b1367561 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"อนุญาตให้แอปพลิเคชันรับและประมวลผลข้อความ WAP การอนุญาตนี้รวมถึงความสามารถในการตรวจสอบหรือลบข้อความที่ส่งมาให้คุณโดยไม่ต้องแสดงให้คุณเห็น"</string> <string name="permlab_getTasks" msgid="6466095396623933906">"เรียกแอปพลิเคชันที่ทำงานอยู่"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"อนุญาตให้แอปพลิเคชันเรียกดูข้อมูลเกี่ยวกับงานที่ดำเนินการอยู่ในขณะนี้และเมื่อเร็วๆ นี้ ซึ่งอาจทำให้แอปพลิเคชันสามารถค้นข้อมูลได้ว่าอุปกรณ์นี้ใช้แอปพลิเคชันใดบ้าง"</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"ดึงรายละเอียดของแอปที่ทำงานอยู่"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"อนุญาตให้แอปพลิเคชันดึงข้อมูลเกี่ยวกับงานที่กำลังเรียกใช้อยู่ในปัจจุบันและงานล่าสุด แอปพลิเคชันที่เป็นอันตรายอาจค้นพบข้อมูลเฉพาะตัวเกี่ยวกับแอปพลิเคชันอื่นๆ"</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"จัดลำดับแอปพลิเคชันที่ทำงานอยู่ใหม่"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"ระบบ"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"เสียงบลูทูธ"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"เสร็จสิ้น"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 1d33c75ca843..9c6527866ef0 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Pinapayagan ang app na tumanggap at magproseso ng mga mensaheng WAP. Kabilang sa pahintulot na ito ang kakayahang sumubaybay o magtanggal ang app ng mga mensaheng ipinapadala sa iyo nang hindi ipinapakita ang mga ito sa iyo."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"bawiin ang tumatakbong apps"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Pinapayagan ang app na kumuha ng impormasyon tungkol sa mga kasalukuyan at kamakailang gumaganang gawain. Maaari nitong payagan ang app na tumuklas ng impormasyon tungkol sa kung aling mga application ang ginagamit sa device."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"bawiin ang mga detalye ng gumaganang apps"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Binibigyang-daan ang app na bawiin ang detalyadong impormasyon tungkol sa mga kasalukuyan at kamakailang gumaganang gawain. Maaaring makatuklas ang nakakahamak na apps ng pribadong impormasyon tungkol sa iba pang apps."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"muling isaayos ang tumatakbong apps"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio sa Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Tapos na"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 75c3e3199dd3..c0abba179ebd 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Uygulamaya WAP mesajlarını alma ve işleme izni verir. Buna, size gönderilen mesajları takip edip size göstermeden silebilme izni de dahildir."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"çalışan uygulamaları al"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Uygulamaya o anda ve son çalışan görevler hakkında bilgi alma izni verir. Bu izin, uygulamanın cihaz tarafından kullanılan uygulamalar hakkında bilgi elde etmesine olanak sağlayabilir."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"çalışan uygulamaların ayrıntılarını al"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Uygulamaya, şu anda çalışmakta olan ve son çalışan işlemler hakkında ayrıntılı bilgi alma izni verir. Kötü amaçlı uygulamalar diğer uygulamalar hakkında gizli bilgileri ele geçirebilir."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"çalışan uygulamaları yeniden sırala"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth ses"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Tamamlandı"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 0fe2afe657df..b54bb79c0fbc 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Дозволяє програмі отримувати й обробляти WAP-повідомлення. Це означає, що програма може відстежувати чи видаляти повідомлення, надіслані на ваш пристрій, навіть не показуючи їх вам."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"отримувати запущені програми"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Дозволяє програмі отримувати інформацію про поточні й останні запущені завдання. Це може дозволити програмі виявляти інформацію про програми, які використовуються на пристрої."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"отримувати дані про запущені програми"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Дозволяє програмі отримувати інформацію про поточні й останні запущені завдання. Шкідливі програми можуть виявляти особисту інформацію про інші програми."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"змінювати порядок запущених програм"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Аудіо Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 5a4e23631b02..0d361b4074e4 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Cho phép ứng dụng nhận và xử lý tin nhắn WAP. Quyền này bao gồm khả năng giám sát hoặc xóa tin nhắn được gửi cho bạn mà không hiển thị chúng cho bạn."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"truy xuất các ứng dụng đang chạy"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Cho phép ứng dụng truy xuất thông tin về các công việc đã và đang chạy gần đây. Việc này có thể cho phép ứng dụng phát hiện thông tin về những ứng dụng nào đã được sử dụng trên thiết bị."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"truy xuất chi tiết về các ứng dụng đang chạy"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Cho phép ứng dụng truy xuất thông tin chi tiết về các tác vụ đã và đang chạy gần đây. Ứng dụng độc hại có thể phát hiện thông tin riêng tư về các ứng dụng khác."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"sắp xếp lại những ứng dụng đang chạy"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Hệ thống"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Âm thanh Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Xong"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 2657d9279c83..4e3fdec81096 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"允许该应用接收和处理 WAP 消息。此权限包括监视发送给您的消息或删除发送给您的消息而不向您显示的功能。"</string> <string name="permlab_getTasks" msgid="6466095396623933906">"检索正在运行的应用"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"允许该应用检索近期运行的和当前正在运行的任务的相关信息。此权限可让该应用了解设备上使用了哪些应用。"</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"检索正在运行的应用的详细信息"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"允许该应用检索当前正在运行和近期运行的任务的详细信息。恶意应用可能会发现有关其他应用的私密信息。"</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"对正在运行的应用重新排序"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"系统"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"蓝牙音频"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完成"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 8a8cb8e683ac..bd3c038c4fb2 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"允許應用程式接收和處理 WAP 訊息。這項權限也能讓應用程式監控訊息,或在您閱讀訊息前擅自刪除訊息。"</string> <string name="permlab_getTasks" msgid="6466095396623933906">"擷取執行中的應用程式"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"允許應用程式擷取最近執行工作的資訊。這項設定可讓應用程式找出裝置所用程式的相關資訊。"</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"擷取執行中應用程式的詳細資訊"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"允許應用程式擷取目前及最近所執行任務的詳細資訊。請注意,惡意應用程式可能會找出其他應用程式的不公開資訊。"</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"重新排序正在執行的應用程式"</string> @@ -1301,4 +1309,6 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"系統"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"藍牙音訊"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完成"</string> + <!-- no translation found for media_route_button_content_description (5758553567065145276) --> + <skip /> </resources> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 7c9a500abe96..7475d801c58a 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -217,6 +217,14 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Ivumela uhlelo lokusebenza ukuthola nokucubungula imilayezo ye-WAP. Le mvume ifaka phakathi amandla okungamela noma okwesusa imilayezo ethunyelwe kuwe ngaphandle kokukubonisa."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"thola izinsiza ezisebenzayo"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Ivumela uhlelo lokusebenza ukubuyisa ulwazi mayelana nemisebenzi yamanje neyakamuva. Lokhu kungavumela uhlelo lokusebenza ukuthola ulwazi mayelana nokuthi iziphi izinhlelo zokusebenza ezisetshenziswa kudivayisi."</string> + <!-- no translation found for permlab_interactAcrossUsers (7114255281944211682) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsers (364670963623385786) --> + <skip /> + <!-- no translation found for permlab_interactAcrossUsersFull (2567734285545074105) --> + <skip /> + <!-- no translation found for permdesc_interactAcrossUsersFull (376841368395502366) --> + <skip /> <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"thola kabusha imininingwane yezinhlelo zokusebenza ezisebenzayo"</string> <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Ivumela uhlelo lokusebenza ukuthola kabusha ulwazi mayelana nezinto ezenzeka manje nezisanda kwenzeka. Izinhlelo zokusebenza ezingalungile zingathola imininingwane eyimfihlo mayelana nezinye izinhlelo zokusebenza."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"misa kabusha izinsiza ezisebenzayo"</string> @@ -1301,4 +1309,5 @@ <string name="default_audio_route_category_name" msgid="3722811174003886946">"Isistimu"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Umsindo we-Bluetooth"</string> <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Qedile"</string> + <string name="media_route_button_content_description" msgid="5758553567065145276">"Okukhiphayo kwemidiya"</string> </resources> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 39129e5dfe41..b752471069b7 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -852,7 +852,7 @@ <string name="config_wimaxStateTrackerClassname" translatable="false"></string> <!-- enable screen saver feature --> - <bool name="config_enableDreams">false</bool> + <bool name="config_enableDreams">true</bool> <!-- Name of screensaver components to look for if none has been chosen by the user --> <string name="config_defaultDreamComponent" translatable="false">com.google.android.deskclock/com.android.deskclock.Screensaver</string> diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index c91c2f1ee6a3..128adcbf53a2 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -63,7 +63,7 @@ public final class Bitmap implements Parcelable { private boolean mRecycled; // Package-scoped for fast access. - int mDensity = sDefaultDensity = getDefaultDensity(); + int mDensity = getDefaultDensity(); private static volatile Matrix sScaleMatrix; @@ -85,7 +85,7 @@ public final class Bitmap implements Parcelable { sDefaultDensity = DisplayMetrics.DENSITY_DEVICE; return sDefaultDensity; } - + /** * @noinspection UnusedDeclaration */ @@ -625,6 +625,22 @@ public final class Bitmap implements Parcelable { /** * Returns a mutable bitmap with the specified width and height. Its + * initial density is determined from the given {@link DisplayMetrics}. + * + * @param display Display metrics for the display this bitmap will be + * drawn on. + * @param width The width of the bitmap + * @param height The height of the bitmap + * @param config The bitmap config to create. + * @throws IllegalArgumentException if the width or height are <= 0 + */ + public static Bitmap createBitmap(DisplayMetrics display, int width, + int height, Config config) { + return createBitmap(display, width, height, config, true); + } + + /** + * Returns a mutable bitmap with the specified width and height. Its * initial density is as per {@link #getDensity}. * * @param width The width of the bitmap @@ -637,10 +653,33 @@ public final class Bitmap implements Parcelable { * @throws IllegalArgumentException if the width or height are <= 0 */ private static Bitmap createBitmap(int width, int height, Config config, boolean hasAlpha) { + return createBitmap(null, width, height, config, hasAlpha); + } + + /** + * Returns a mutable bitmap with the specified width and height. Its + * initial density is determined from the given {@link DisplayMetrics}. + * + * @param display Display metrics for the display this bitmap will be + * drawn on. + * @param width The width of the bitmap + * @param height The height of the bitmap + * @param config The bitmap config to create. + * @param hasAlpha If the bitmap is ARGB_8888 this flag can be used to mark the + * bitmap as opaque. Doing so will clear the bitmap in black + * instead of transparent. + * + * @throws IllegalArgumentException if the width or height are <= 0 + */ + private static Bitmap createBitmap(DisplayMetrics display, int width, int height, + Config config, boolean hasAlpha) { if (width <= 0 || height <= 0) { throw new IllegalArgumentException("width and height must be > 0"); } Bitmap bm = nativeCreate(null, 0, width, width, height, config.nativeInt, true); + if (display != null) { + bm.mDensity = display.densityDpi; + } if (config == Config.ARGB_8888 && !hasAlpha) { nativeErase(bm.mNativeBitmap, 0xff000000); nativeSetHasAlpha(bm.mNativeBitmap, hasAlpha); @@ -673,6 +712,31 @@ public final class Bitmap implements Parcelable { */ public static Bitmap createBitmap(int colors[], int offset, int stride, int width, int height, Config config) { + return createBitmap(null, colors, offset, stride, width, height, config); + } + + /** + * Returns a immutable bitmap with the specified width and height, with each + * pixel value set to the corresponding value in the colors array. Its + * initial density is determined from the given {@link DisplayMetrics}. + * + * @param display Display metrics for the display this bitmap will be + * drawn on. + * @param colors Array of {@link Color} used to initialize the pixels. + * @param offset Number of values to skip before the first color in the + * array of colors. + * @param stride Number of colors in the array between rows (must be >= + * width or <= -width). + * @param width The width of the bitmap + * @param height The height of the bitmap + * @param config The bitmap config to create. If the config does not + * support per-pixel alpha (e.g. RGB_565), then the alpha + * bytes in the colors[] will be ignored (assumed to be FF) + * @throws IllegalArgumentException if the width or height are <= 0, or if + * the color array's length is less than the number of pixels. + */ + public static Bitmap createBitmap(DisplayMetrics display, int colors[], + int offset, int stride, int width, int height, Config config) { checkWidthHeight(width, height); if (Math.abs(stride) < width) { @@ -687,8 +751,12 @@ public final class Bitmap implements Parcelable { if (width <= 0 || height <= 0) { throw new IllegalArgumentException("width and height must be > 0"); } - return nativeCreate(colors, offset, stride, width, height, + Bitmap bm = nativeCreate(colors, offset, stride, width, height, config.nativeInt, false); + if (display != null) { + bm.mDensity = display.densityDpi; + } + return bm; } /** @@ -707,7 +775,29 @@ public final class Bitmap implements Parcelable { * the color array's length is less than the number of pixels. */ public static Bitmap createBitmap(int colors[], int width, int height, Config config) { - return createBitmap(colors, 0, width, width, height, config); + return createBitmap(null, colors, 0, width, width, height, config); + } + + /** + * Returns a immutable bitmap with the specified width and height, with each + * pixel value set to the corresponding value in the colors array. Its + * initial density is determined from the given {@link DisplayMetrics}. + * + * @param display Display metrics for the display this bitmap will be + * drawn on. + * @param colors Array of {@link Color} used to initialize the pixels. + * This array must be at least as large as width * height. + * @param width The width of the bitmap + * @param height The height of the bitmap + * @param config The bitmap config to create. If the config does not + * support per-pixel alpha (e.g. RGB_565), then the alpha + * bytes in the colors[] will be ignored (assumed to be FF) + * @throws IllegalArgumentException if the width or height are <= 0, or if + * the color array's length is less than the number of pixels. + */ + public static Bitmap createBitmap(DisplayMetrics display, int colors[], + int width, int height, Config config) { + return createBitmap(display, colors, 0, width, width, height, config); } /** diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java index 540acfa6a2e0..4bc5a5a6a38c 100644 --- a/graphics/java/android/graphics/drawable/Drawable.java +++ b/graphics/java/android/graphics/drawable/Drawable.java @@ -778,7 +778,8 @@ public abstract class Drawable { // to the compatibility density only to have them scaled back up when // drawn to the screen. if (opts == null) opts = new BitmapFactory.Options(); - opts.inScreenDensity = res.getDisplayMetrics().noncompatDensityDpi; + opts.inScreenDensity = res != null + ? res.getDisplayMetrics().noncompatDensityDpi : DisplayMetrics.DENSITY_DEVICE; Bitmap bm = BitmapFactory.decodeResourceStream(res, value, is, pad, opts); if (bm != null) { byte[] np = bm.getNinePatchChunk(); diff --git a/libs/androidfw/AssetManager.cpp b/libs/androidfw/AssetManager.cpp index 8d59d8e9d088..8bd805cc9934 100644 --- a/libs/androidfw/AssetManager.cpp +++ b/libs/androidfw/AssetManager.cpp @@ -98,6 +98,24 @@ namespace { return path; } + + /* + * Like strdup(), but uses C++ "new" operator instead of malloc. + */ + static char* strdupNew(const char* str) + { + char* newStr; + int len; + + if (str == NULL) + return NULL; + + len = strlen(str); + newStr = new char[len+1]; + memcpy(newStr, str, len+1); + + return newStr; + } } /* diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk index a54c188124d0..1947c32d15f5 100644 --- a/libs/hwui/Android.mk +++ b/libs/hwui/Android.mk @@ -11,6 +11,7 @@ ifeq ($(USE_OPENGL_RENDERER),true) Caches.cpp \ DisplayListLogBuffer.cpp \ DisplayListRenderer.cpp \ + Dither.cpp \ FboCache.cpp \ GradientCache.cpp \ LayerCache.cpp \ diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp index 258ced03899d..aa2bc3f67419 100644 --- a/libs/hwui/Caches.cpp +++ b/libs/hwui/Caches.cpp @@ -252,6 +252,7 @@ void Caches::flush(FlushMode mode) { dropShadowCache.clear(); gradientCache.clear(); fontRenderer->clear(); + dither.clear(); // fall through case kFlushMode_Moderate: fontRenderer->flush(); diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h index 4cbac413b01a..ad1098c9b550 100644 --- a/libs/hwui/Caches.h +++ b/libs/hwui/Caches.h @@ -38,6 +38,7 @@ #include "TextDropShadowCache.h" #include "FboCache.h" #include "ResourceCache.h" +#include "Dither.h" namespace android { namespace uirenderer { @@ -250,6 +251,7 @@ public: TextDropShadowCache dropShadowCache; FboCache fboCache; ResourceCache resourceCache; + Dither dither; GammaFontRenderer* fontRenderer; diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp index 76321be271d3..95fc2c5b797d 100644 --- a/libs/hwui/DisplayListRenderer.cpp +++ b/libs/hwui/DisplayListRenderer.cpp @@ -595,10 +595,13 @@ void DisplayList::output(OpenGLRenderer& renderer, uint32_t level) { break; case DrawText: { getText(&text); - int count = getInt(); - int positionsCount = 0; + int32_t count = getInt(); + float x = getFloat(); + float y = getFloat(); + int32_t positionsCount = 0; float* positions = getFloats(positionsCount); SkPaint* paint = getPaint(renderer); + float length = getFloat(); ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], text.text(), text.length(), count, paint); } diff --git a/libs/hwui/Dither.cpp b/libs/hwui/Dither.cpp new file mode 100755 index 000000000000..5817977bad57 --- /dev/null +++ b/libs/hwui/Dither.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2012 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. + */ + +#include "Caches.h" +#include "Dither.h" + +namespace android { +namespace uirenderer { + +/////////////////////////////////////////////////////////////////////////////// +// Defines +/////////////////////////////////////////////////////////////////////////////// + +// Must be a power of two +#define DITHER_KERNEL_SIZE 4 + +/////////////////////////////////////////////////////////////////////////////// +// Lifecycle +/////////////////////////////////////////////////////////////////////////////// + +void Dither::bindDitherTexture() { + if (!mInitialized) { + const uint8_t pattern[] = { + 0, 8, 2, 10, + 12, 4, 14, 6, + 3, 11, 1, 9, + 15, 7, 13, 5 + }; + + glGenTextures(1, &mDitherTexture); + glBindTexture(GL_TEXTURE_2D, mDitherTexture); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, DITHER_KERNEL_SIZE, DITHER_KERNEL_SIZE, 0, + GL_ALPHA, GL_UNSIGNED_BYTE, &pattern); + + mInitialized = true; + } else { + glBindTexture(GL_TEXTURE_2D, mDitherTexture); + } +} + +void Dither::clear() { + if (mInitialized) { + glDeleteTextures(1, &mDitherTexture); + } +} + +/////////////////////////////////////////////////////////////////////////////// +// Program management +/////////////////////////////////////////////////////////////////////////////// + +void Dither::setupProgram(Program* program, GLuint* textureUnit) { + GLuint textureSlot = (*textureUnit)++; + Caches::getInstance().activeTexture(textureSlot); + + bindDitherTexture(); + + glUniform1i(program->getUniform("ditherSampler"), textureSlot); + glUniform1f(program->getUniform("ditherSize"), 1.0f / DITHER_KERNEL_SIZE); +} + +}; // namespace uirenderer +}; // namespace android diff --git a/libs/hwui/Dither.h b/libs/hwui/Dither.h new file mode 100755 index 000000000000..34cf9bf6a4b7 --- /dev/null +++ b/libs/hwui/Dither.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2012 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. + */ + +#ifndef ANDROID_HWUI_DITHER_H +#define ANDROID_HWUI_DITHER_H + +#include <GLES2/gl2.h> + +#include "Program.h" + +namespace android { +namespace uirenderer { + +/** + * Handles dithering for programs. + */ +class Dither { +public: + Dither(): mInitialized(false), mDitherTexture(0) { } + + void clear(); + void setupProgram(Program* program, GLuint* textureUnit); + +private: + void bindDitherTexture(); + + bool mInitialized; + GLuint mDitherTexture; +}; + +}; // namespace uirenderer +}; // namespace android + +#endif // ANDROID_HWUI_DITHER_H diff --git a/libs/hwui/GammaFontRenderer.h b/libs/hwui/GammaFontRenderer.h index c4a50bed3ad2..5c1860ea5c8e 100644 --- a/libs/hwui/GammaFontRenderer.h +++ b/libs/hwui/GammaFontRenderer.h @@ -103,6 +103,7 @@ public: void clear() { delete mRenderer; + mRenderer = NULL; } void flush() { diff --git a/libs/hwui/ProgramCache.cpp b/libs/hwui/ProgramCache.cpp index d601f01dce64..0e77cb23df81 100644 --- a/libs/hwui/ProgramCache.cpp +++ b/libs/hwui/ProgramCache.cpp @@ -75,9 +75,11 @@ const char* gVS_Header_Varyings_HasGradient[6] = { // Linear "varying highp vec2 linear;\n", "varying highp float linear;\n", + // Circular "varying highp vec2 circular;\n", "varying highp vec2 circular;\n", + // Sweep "varying highp vec2 sweep;\n", "varying highp vec2 sweep;\n", @@ -92,9 +94,11 @@ const char* gVS_Main_OutGradient[6] = { // Linear " linear = vec2((screenSpace * position).x, 0.5);\n", " linear = (screenSpace * position).x;\n", + // Circular " circular = (screenSpace * position).xy;\n", " circular = (screenSpace * position).xy;\n", + // Sweep " sweep = (screenSpace * position).xy;\n", " sweep = (screenSpace * position).xy;\n", @@ -137,19 +141,24 @@ const char* gFS_Uniforms_TextureSampler = "uniform sampler2D sampler;\n"; const char* gFS_Uniforms_ExternalTextureSampler = "uniform samplerExternalOES sampler;\n"; +#define FS_UNIFORMS_DITHER \ + "uniform float ditherSize;\n" \ + "uniform sampler2D ditherSampler;\n" +#define FS_UNIFORMS_GRADIENT \ + "uniform vec4 startColor;\n" \ + "uniform vec4 endColor;\n" const char* gFS_Uniforms_GradientSampler[6] = { // Linear - "uniform sampler2D gradientSampler;\n", - "uniform vec4 startColor;\n" - "uniform vec4 endColor;\n", + FS_UNIFORMS_DITHER "uniform sampler2D gradientSampler;\n", + FS_UNIFORMS_DITHER FS_UNIFORMS_GRADIENT, + // Circular - "uniform sampler2D gradientSampler;\n", - "uniform vec4 startColor;\n" - "uniform vec4 endColor;\n", + FS_UNIFORMS_DITHER "uniform sampler2D gradientSampler;\n", + FS_UNIFORMS_DITHER FS_UNIFORMS_GRADIENT, + // Sweep - "uniform sampler2D gradientSampler;\n", - "uniform vec4 startColor;\n" - "uniform vec4 endColor;\n", + FS_UNIFORMS_DITHER "uniform sampler2D gradientSampler;\n", + FS_UNIFORMS_DITHER FS_UNIFORMS_GRADIENT }; const char* gFS_Uniforms_BitmapSampler = "uniform sampler2D bitmapSampler;\n"; @@ -176,6 +185,11 @@ const char* gFS_Main_PointBitmapTexCoords = " highp vec2 outBitmapTexCoords = outPointBitmapTexCoords + " "((gl_PointCoord - vec2(0.5, 0.5)) * textureDimension * vec2(pointSize, pointSize));\n"; +#define FS_MAIN_DITHER \ + "texture2D(ditherSampler, gl_FragCoord.xy * ditherSize).a * ditherSize * ditherSize" +const char* gFS_Main_AddDitherToGradient = + " gradientColor += " FS_MAIN_DITHER ";\n"; + // Fast cases const char* gFS_Fast_SingleColor = "\nvoid main(void) {\n" @@ -207,18 +221,18 @@ const char* gFS_Fast_SingleModulateA8Texture_ApplyGamma = "}\n\n"; const char* gFS_Fast_SingleGradient[2] = { "\nvoid main(void) {\n" - " gl_FragColor = texture2D(gradientSampler, linear);\n" + " gl_FragColor = " FS_MAIN_DITHER " + texture2D(gradientSampler, linear);\n" "}\n\n", "\nvoid main(void) {\n" - " gl_FragColor = mix(startColor, endColor, clamp(linear, 0.0, 1.0));\n" + " gl_FragColor = " FS_MAIN_DITHER " + mix(startColor, endColor, clamp(linear, 0.0, 1.0));\n" "}\n\n" }; const char* gFS_Fast_SingleModulateGradient[2] = { "\nvoid main(void) {\n" - " gl_FragColor = color.a * texture2D(gradientSampler, linear);\n" + " gl_FragColor " FS_MAIN_DITHER " + color.a * texture2D(gradientSampler, linear);\n" "}\n\n", "\nvoid main(void) {\n" - " gl_FragColor = color.a * mix(startColor, endColor, clamp(linear, 0.0, 1.0));\n" + " gl_FragColor " FS_MAIN_DITHER " + color.a * mix(startColor, endColor, clamp(linear, 0.0, 1.0));\n" "}\n\n" }; @@ -254,16 +268,21 @@ const char* gFS_Main_FetchA8Texture[2] = { }; const char* gFS_Main_FetchGradient[6] = { // Linear - " vec4 gradientColor = texture2D(gradientSampler, linear);\n", - " vec4 gradientColor = mix(startColor, endColor, clamp(linear, 0.0, 1.0));\n", + " highp vec4 gradientColor = texture2D(gradientSampler, linear);\n", + + " highp vec4 gradientColor = mix(startColor, endColor, clamp(linear, 0.0, 1.0));\n", + // Circular - " vec4 gradientColor = texture2D(gradientSampler, vec2(length(circular), 0.5));\n", - " vec4 gradientColor = mix(startColor, endColor, clamp(length(circular), 0.0, 1.0));\n", + " highp vec4 gradientColor = texture2D(gradientSampler, vec2(length(circular), 0.5));\n", + + " highp vec4 gradientColor = mix(startColor, endColor, clamp(length(circular), 0.0, 1.0));\n", + // Sweep " highp float index = atan(sweep.y, sweep.x) * 0.15915494309; // inv(2 * PI)\n" - " vec4 gradientColor = texture2D(gradientSampler, vec2(index - floor(index), 0.5));\n", + " highp vec4 gradientColor = texture2D(gradientSampler, vec2(index - floor(index), 0.5));\n", + " highp float index = atan(sweep.y, sweep.x) * 0.15915494309; // inv(2 * PI)\n" - " vec4 gradientColor = mix(startColor, endColor, clamp(index - floor(index), 0.0, 1.0));\n" + " highp vec4 gradientColor = mix(startColor, endColor, clamp(index - floor(index), 0.0, 1.0));\n" }; const char* gFS_Main_FetchBitmap = " vec4 bitmapColor = texture2D(bitmapSampler, outBitmapTexCoords);\n"; @@ -651,6 +670,7 @@ String8 ProgramCache::generateFragmentShader(const ProgramDescription& descripti } if (description.hasGradient) { shader.append(gFS_Main_FetchGradient[gradientIndex(description)]); + shader.append(gFS_Main_AddDitherToGradient); } if (description.hasBitmap) { if (description.isPoint) { diff --git a/libs/hwui/SkiaShader.cpp b/libs/hwui/SkiaShader.cpp index 71e173954474..8916efd0f75b 100644 --- a/libs/hwui/SkiaShader.cpp +++ b/libs/hwui/SkiaShader.cpp @@ -250,6 +250,8 @@ void SkiaLinearGradientShader::setupProgram(Program* program, const mat4& modelV bindUniformColor(program->getUniform("endColor"), mColors[1]); } + Caches::getInstance().dither.setupProgram(program, textureUnit); + mat4 screenSpace; computeScreenSpaceMatrix(screenSpace, modelView); glUniformMatrix4fv(program->getUniform("screenSpace"), 1, GL_FALSE, &screenSpace.data[0]); @@ -375,6 +377,8 @@ void SkiaSweepGradientShader::setupProgram(Program* program, const mat4& modelVi bindUniformColor(program->getUniform("endColor"), mColors[1]); } + Caches::getInstance().dither.setupProgram(program, textureUnit); + mat4 screenSpace; computeScreenSpaceMatrix(screenSpace, modelView); glUniformMatrix4fv(program->getUniform("screenSpace"), 1, GL_FALSE, &screenSpace.data[0]); diff --git a/packages/SystemUI/res/layout-port/status_bar_recent_item.xml b/packages/SystemUI/res/layout/status_bar_recent_item.xml index ca72530956cb..50643abf61b1 100644 --- a/packages/SystemUI/res/layout-port/status_bar_recent_item.xml +++ b/packages/SystemUI/res/layout/status_bar_recent_item.xml @@ -38,7 +38,7 @@ android:fadingEdgeLength="@dimen/status_bar_recents_text_fading_edge_length" android:scrollHorizontally="true" android:layout_alignParentLeft="true" - android:layout_alignTop="@id/app_icon" + android:layout_alignTop="@+id/app_icon" android:paddingTop="2dp" android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" android:singleLine="true" @@ -71,7 +71,7 @@ android:background="@drawable/recents_callout_line" /> - <ImageView android:id="@+id/app_icon" + <ImageView android:id="@id/app_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/app_label" diff --git a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml b/packages/SystemUI/res/layout/status_bar_recent_panel.xml index a7e5db19ef51..a7e5db19ef51 100644 --- a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml +++ b/packages/SystemUI/res/layout/status_bar_recent_panel.xml diff --git a/packages/SystemUI/res/layout-port/status_bar_search_panel.xml b/packages/SystemUI/res/layout/status_bar_search_panel.xml index b871bef1ac19..b871bef1ac19 100644 --- a/packages/SystemUI/res/layout-port/status_bar_search_panel.xml +++ b/packages/SystemUI/res/layout/status_bar_search_panel.xml diff --git a/packages/SystemUI/res/values-port/config.xml b/packages/SystemUI/res/values-port/config.xml deleted file mode 100644 index bbae18d27318..000000000000 --- a/packages/SystemUI/res/values-port/config.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 2011, 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. -*/ ---> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> -<resources> - <!-- Whether we're using the tablet-optimized recents interface (we use this - value at runtime for some things) --> - <integer name="status_bar_recents_bg_gradient_degrees">90</integer> -</resources> - diff --git a/packages/SystemUI/res/values-port/dimens.xml b/packages/SystemUI/res/values-port/dimens.xml deleted file mode 100644 index de7b836ce3f9..000000000000 --- a/packages/SystemUI/res/values-port/dimens.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - * Copyright (c) 2006, 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> - <!-- Recent Applications parameters --> - <!-- How far the thumbnail for a recent app appears from left edge --> - <dimen name="status_bar_recents_thumbnail_left_margin">20dp</dimen> - <!-- Padding for text descriptions --> - <dimen name="status_bar_recents_text_description_padding">8dp</dimen> - <!-- Width of application label text --> - <dimen name="status_bar_recents_app_label_width">88dip</dimen> - <!-- Left margin of application label text --> - <dimen name="status_bar_recents_app_label_left_margin">0dip</dimen> - <!-- Margin between recents container and glow on the right --> - <dimen name="status_bar_recents_right_glow_margin">100dip</dimen> - <!-- Padding between recents items --> - <dimen name="status_bar_recents_item_padding">0dip</dimen> - <!-- Where to place the app icon over the thumbnail --> - <dimen name="status_bar_recents_app_icon_left_margin">0dp</dimen> - <dimen name="status_bar_recents_app_icon_top_margin">8dp</dimen> -</resources> diff --git a/packages/SystemUI/res/values-port/strings.xml b/packages/SystemUI/res/values-port/strings.xml deleted file mode 100644 index 67364a4cc61d..000000000000 --- a/packages/SystemUI/res/values-port/strings.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/** - * Copyright (c) 2010, 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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> -</resources> diff --git a/packages/SystemUI/res/values-port/arrays.xml b/packages/SystemUI/res/values/arrays.xml index cd6aaf604a24..cd6aaf604a24 100644 --- a/packages/SystemUI/res/values-port/arrays.xml +++ b/packages/SystemUI/res/values/arrays.xml diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 66add1aacb08..1cd7904d0ffd 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -68,5 +68,9 @@ <!-- The length of the vibration when the notificaiotn pops open. --> <integer name="one_finger_pop_duration_ms">10</integer> + + <!-- Whether we're using the tablet-optimized recents interface (we use this + value at runtime for some things) --> + <integer name="status_bar_recents_bg_gradient_degrees">90</integer> </resources> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 6fc79c59bd5f..8204e95ef87b 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -39,6 +39,20 @@ <dimen name="status_bar_recents_scroll_fading_edge_length">10dip</dimen> <!-- Margin between recents container and glow on the right --> <dimen name="status_bar_recents_right_glow_margin">100dip</dimen> + <!-- How far the thumbnail for a recent app appears from left edge --> + <dimen name="status_bar_recents_thumbnail_left_margin">20dp</dimen> + <!-- Padding for text descriptions --> + <dimen name="status_bar_recents_text_description_padding">8dp</dimen> + <!-- Width of application label text --> + <dimen name="status_bar_recents_app_label_width">88dip</dimen> + <!-- Left margin of application label text --> + <dimen name="status_bar_recents_app_label_left_margin">0dip</dimen> + <!-- Padding between recents items --> + <dimen name="status_bar_recents_item_padding">0dip</dimen> + <!-- Where to place the app icon over the thumbnail --> + <dimen name="status_bar_recents_app_icon_left_margin">0dp</dimen> + <dimen name="status_bar_recents_app_icon_top_margin">8dp</dimen> + <!-- Amount to offset bottom of notification peek window from top of status bar. --> <dimen name="peek_window_y_offset">-12dp</dimen> diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml index 8ebbc520197d..4a732008137a 100644 --- a/packages/SystemUI/res/values/ids.xml +++ b/packages/SystemUI/res/values/ids.xml @@ -18,4 +18,5 @@ <resources> <item type="id" name="expandable_tag" /> <item type="id" name="user_expanded_tag" /> + <item type="id" name="user_lock_tag" /> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java index 6aa7dcded78b..674d9a3e0aac 100644 --- a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java +++ b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java @@ -39,7 +39,8 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener { View getChildAtRawPosition(float x, float y); View getChildAtPosition(float x, float y); boolean canChildBeExpanded(View v); - boolean setUserExpandedChild(View v, boolean userxpanded); + boolean setUserExpandedChild(View v, boolean userExpanded); + boolean setUserLockedChild(View v, boolean userLocked); } private static final String TAG = "ExpandHelper"; @@ -433,7 +434,7 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener { final int y = (int) ev.getY(); View underPointer = findView(x, y); if (isFinished && underPointer != null && underPointer != mCurrView) { - setGlow(0f); + finishScale(false); initScale(underPointer); mInitialTouchY = ev.getY(); mHasPopped = false; @@ -458,6 +459,7 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener { private boolean initScale(View v) { if (v != null) { if (DEBUG) Slog.d(TAG, "scale begins on view: " + v); + mCallback.setUserLockedChild(v, true); setView(v); setGlow(GLOW_BASE); mScaler.setView(v); @@ -479,21 +481,26 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener { } private void finishScale(boolean force) { + float currentHeight = mScaler.getHeight(); + float targetHeight = mSmallSize; float h = mScaler.getHeight(); final boolean wasClosed = (mOldHeight == mSmallSize); if (wasClosed) { - h = (force || h > mSmallSize) ? mNaturalHeight : mSmallSize; + targetHeight = (force || currentHeight > mSmallSize) ? mNaturalHeight : mSmallSize; } else { - h = (force || h < mNaturalHeight) ? mSmallSize : mNaturalHeight; + targetHeight = (force || currentHeight < mNaturalHeight) ? mSmallSize : mNaturalHeight; } if (mScaleAnimation.isRunning()) { mScaleAnimation.cancel(); } - mScaleAnimation.setFloatValues(h); - mScaleAnimation.setupStartValues(); - mScaleAnimation.start(); setGlow(0f); mCallback.setUserExpandedChild(mCurrView, h == mNaturalHeight); + if (targetHeight != currentHeight) { + mScaleAnimation.setFloatValues(targetHeight); + mScaleAnimation.setupStartValues(); + mScaleAnimation.start(); + } + mCallback.setUserLockedChild(mCurrView, false); if (DEBUG) Slog.d(TAG, "scale was finished on view: " + mCurrView); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index b392648b6864..ea5089d0f666 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -780,16 +780,20 @@ public abstract class BaseStatusBar extends SystemUI implements int N = mNotificationData.size(); for (int i = 0; i < N; i++) { NotificationData.Entry entry = mNotificationData.get(i); - if (i == (N-1)) { - if (DEBUG) Slog.d(TAG, "expanding top notification at " + i); - expandView(entry, true); - } else { - if (!entry.userExpanded()) { - if (DEBUG) Slog.d(TAG, "collapsing notification at " + i); - expandView(entry, false); + if (!entry.userLocked()) { + if (i == (N-1)) { + if (DEBUG) Slog.d(TAG, "expanding top notification at " + i); + expandView(entry, true); } else { - if (DEBUG) Slog.d(TAG, "ignoring user-modified notification at " + i); + if (!entry.userExpanded()) { + if (DEBUG) Slog.d(TAG, "collapsing notification at " + i); + expandView(entry, false); + } else { + if (DEBUG) Slog.d(TAG, "ignoring user-modified notification at " + i); + } } + } else { + if (DEBUG) Slog.d(TAG, "ignoring notification being held by user at " + i); } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java index dfd8cf8a4689..c82f25008f2d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java @@ -71,6 +71,18 @@ public class NotificationData { public boolean setUserExpanded(boolean userExpanded) { return NotificationData.setUserExpanded(row, userExpanded); } + /** + * Return whether the entry is being touched by the user. + */ + public boolean userLocked() { + return NotificationData.getUserLocked(row); + } + /** + * Set the flag indicating that this is being touched by the user. + */ + public boolean setUserLocked(boolean userLocked) { + return NotificationData.setUserLocked(row, userLocked); + } } private final ArrayList<Entry> mEntries = new ArrayList<Entry>(); private final Comparator<Entry> mEntryCmp = new Comparator<Entry>() { @@ -197,4 +209,18 @@ public class NotificationData { public static boolean setUserExpanded(View row, boolean userExpanded) { return writeBooleanTag(row, R.id.user_expanded_tag, userExpanded); } + + /** + * Return whether the entry is being touched by the user. + */ + public static boolean getUserLocked(View row) { + return readBooleanTag(row, R.id.user_lock_tag); + } + + /** + * Set whether the entry is being touched by the user. + */ + public static boolean setUserLocked(View row, boolean userLocked) { + return writeBooleanTag(row, R.id.user_lock_tag, userLocked); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java index 8711a8d4f802..8365d08f0a87 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -577,18 +577,26 @@ public class NetworkController extends BroadcastReceiver { } break; case TelephonyManager.NETWORK_TYPE_CDMA: - // display 1xRTT for IS95A/B - mDataIconList = TelephonyIcons.DATA_1X[mInetCondition]; - mDataTypeIconId = R.drawable.stat_sys_data_connected_1x; - mContentDescriptionDataType = mContext.getString( - R.string.accessibility_data_connection_cdma); - break; + if (!mShowAtLeastThreeGees) { + // display 1xRTT for IS95A/B + mDataIconList = TelephonyIcons.DATA_1X[mInetCondition]; + mDataTypeIconId = R.drawable.stat_sys_data_connected_1x; + mContentDescriptionDataType = mContext.getString( + R.string.accessibility_data_connection_cdma); + break; + } else { + // fall through + } case TelephonyManager.NETWORK_TYPE_1xRTT: - mDataIconList = TelephonyIcons.DATA_1X[mInetCondition]; - mDataTypeIconId = R.drawable.stat_sys_data_connected_1x; - mContentDescriptionDataType = mContext.getString( - R.string.accessibility_data_connection_cdma); - break; + if (!mShowAtLeastThreeGees) { + mDataIconList = TelephonyIcons.DATA_1X[mInetCondition]; + mDataTypeIconId = R.drawable.stat_sys_data_connected_1x; + mContentDescriptionDataType = mContext.getString( + R.string.accessibility_data_connection_cdma); + break; + } else { + // fall through + } case TelephonyManager.NETWORK_TYPE_EVDO_0: //fall through case TelephonyManager.NETWORK_TYPE_EVDO_A: case TelephonyManager.NETWORK_TYPE_EVDO_B: diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java index 61e5ab63d6e8..9fee49ba8719 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java @@ -161,6 +161,10 @@ public class NotificationRowLayout return NotificationData.setUserExpanded(v, userExpanded); } + public boolean setUserLockedChild(View v, boolean userLocked) { + return NotificationData.setUserLocked(v, userLocked); + } + public void onChildDismissed(View v) { final View veto = v.findViewById(R.id.veto); if (veto != null && veto.getVisibility() != View.GONE && mRemoveViews) { diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index 97b4cb5a8188..5d4159a57831 100755 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -361,6 +361,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean mScreenOnEarly = false; boolean mScreenOnFully = false; boolean mOrientationSensorEnabled = false; + int mLastSensorRotation = -1; int mCurrentAppOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; boolean mHasSoftInput = false; @@ -964,7 +965,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } - public void setInitialDisplaySize(Display display, int width, int height) { + public void setInitialDisplaySize(Display display, int width, int height, int density) { mDisplay = display; int shortSize, longSize; @@ -1018,11 +1019,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { com.android.internal.R.dimen.navigation_bar_width); // SystemUI (status bar) layout policy - DisplayMetrics metrics = new DisplayMetrics(); - mDisplay.getMetrics(metrics); - int shortSizeDp = shortSize - * DisplayMetrics.DENSITY_DEFAULT - / metrics.densityDpi; + int shortSizeDp = shortSize * DisplayMetrics.DENSITY_DEFAULT / density; if (shortSizeDp < 600) { // 0-599dp: "phone" UI with a separate status & navigation bar @@ -1052,12 +1049,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { // The system bar is always at the bottom. If you are watching // a video in landscape, we don't need to hide it if we can still // show a 16:9 aspect ratio with it. - int longSizeDp = longSize - * DisplayMetrics.DENSITY_DEFAULT - / DisplayMetrics.DENSITY_DEVICE; + int longSizeDp = longSize * DisplayMetrics.DENSITY_DEFAULT / density; int barHeightDp = mNavigationBarHeightForRotation[mLandscapeRotation] - * DisplayMetrics.DENSITY_DEFAULT - / DisplayMetrics.DENSITY_DEVICE; + * DisplayMetrics.DENSITY_DEFAULT / density; int aspect = ((shortSizeDp-barHeightDp) * 16) / longSizeDp; // We have computed the aspect ratio with the bar height taken // out to be 16:aspect. If this is less than 9, then hiding @@ -1132,7 +1126,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { com.android.internal.R.bool.config_enableDreams); mScreenSaverEnabledByUser = 0 != Settings.Secure.getInt(resolver, - Settings.Secure.SCREENSAVER_ENABLED, 1); + Settings.Secure.SCREENSAVER_ENABLED, 0); if (SEPARATE_TIMEOUT_FOR_SCREEN_SAVER) { mScreenSaverTimeout = Settings.Secure.getInt(resolver, @@ -3728,7 +3722,16 @@ public class PhoneWindowManager implements WindowManagerPolicy { synchronized (mLock) { int sensorRotation = mOrientationListener.getProposedRotation(); // may be -1 if (sensorRotation < 0) { - sensorRotation = lastRotation; + // Sensor is disabled, device probably just turned off. + if (mLastSensorRotation >= 0) { + sensorRotation = mLastSensorRotation; + } else { + // Sensor has never been enabled. Last resort is to use lastRotation. + sensorRotation = lastRotation; + } + } else { + // Valid sensor data, save it away. + mLastSensorRotation = sensorRotation; } final int preferredRotation; @@ -4076,7 +4079,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (dm == null) return; try { - if (localLOGV) Log.v(TAG, "startScreenSaver: awakening..."); + if (!dm.isDreaming()) return; + + if (localLOGV) Log.v(TAG, "stopScreenSaver: awakening..."); dm.awaken(); } catch (RemoteException ex) { diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 22acfbf03d13..dc0cb758ca5e 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -83,6 +83,7 @@ import com.android.internal.telephony.PhoneConstants; import com.android.server.am.BatteryStatsService; import com.android.server.connectivity.Tethering; import com.android.server.connectivity.Vpn; +import com.android.server.net.BaseNetworkObserver; import com.google.android.collect.Lists; import com.google.android.collect.Sets; import dalvik.system.DexClassLoader; @@ -524,6 +525,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { try { nmService.registerObserver(mTethering); nmService.registerObserver(mVpn); + nmService.registerObserver(mDataActivityObserver); } catch (RemoteException e) { loge("Error registering observer :" + e); } @@ -535,13 +537,6 @@ public class ConnectivityService extends IConnectivityManager.Stub { mSettingsObserver = new SettingsObserver(mHandler, EVENT_APPLY_GLOBAL_HTTP_PROXY); mSettingsObserver.observe(mContext); - INetworkManagementEventObserver netdObserver = new NetdObserver(); - try { - mNetd.registerObserver(netdObserver); - } catch (RemoteException e) { - loge("Error registering observer :" + e); - } - loadGlobalProxy(); } @@ -922,18 +917,13 @@ public class ConnectivityService extends IConnectivityManager.Stub { return tracker != null && tracker.setRadio(turnOn); } - private class NetdObserver extends INetworkManagementEventObserver.Stub { + private INetworkManagementEventObserver mDataActivityObserver = new BaseNetworkObserver() { + @Override public void interfaceClassDataActivityChanged(String label, boolean active) { int deviceType = Integer.parseInt(label); sendDataActivityBroadcast(deviceType, active); } - - public void interfaceStatusChanged(String iface, boolean up) {} - public void interfaceLinkStateChanged(String iface, boolean up) {} - public void interfaceAdded(String iface) {} - public void interfaceRemoved(String iface) {} - public void limitReached(String limitName, String iface) {} - } + }; /** * Used to notice when the calling process dies so we can self-expire diff --git a/services/java/com/android/server/DockObserver.java b/services/java/com/android/server/DockObserver.java index e7dac7230194..8bac52c760af 100644 --- a/services/java/com/android/server/DockObserver.java +++ b/services/java/com/android/server/DockObserver.java @@ -29,9 +29,12 @@ import android.media.RingtoneManager; import android.net.Uri; import android.os.Handler; import android.os.Message; +import android.os.RemoteException; +import android.os.ServiceManager; import android.os.SystemClock; import android.os.UEventObserver; import android.provider.Settings; +import android.service.dreams.IDreamManager; import android.util.Log; import android.util.Slog; @@ -194,7 +197,29 @@ class DockObserver extends UEventObserver { } } - mContext.sendStickyBroadcast(intent); + IDreamManager mgr = IDreamManager.Stub.asInterface(ServiceManager.getService("dreams")); + if (mgr != null) { + // dreams feature enabled + boolean undocked = mDockState == Intent.EXTRA_DOCK_STATE_UNDOCKED; + if (undocked) { + try { + if (mgr.isDreaming()) { + mgr.awaken(); + } + } catch (RemoteException e) { + Slog.w(TAG, "Unable to awaken!", e); + } + } else { + try { + mgr.dream(); + } catch (RemoteException e) { + Slog.w(TAG, "Unable to dream!", e); + } + } + } else { + // dreams feature not enabled, send legacy intent + mContext.sendStickyBroadcast(intent); + } } break; } diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java index 1498a115534d..198ba8b84946 100644 --- a/services/java/com/android/server/LocationManagerService.java +++ b/services/java/com/android/server/LocationManagerService.java @@ -1804,9 +1804,8 @@ public class LocationManagerService extends ILocationManager.Stub implements Run mNetworkState = LocationProvider.TEMPORARILY_UNAVAILABLE; } - final ConnectivityManager connManager = (ConnectivityManager) context - .getSystemService(Context.CONNECTIVITY_SERVICE); - final NetworkInfo info = connManager.getActiveNetworkInfo(); + final NetworkInfo info = intent.getParcelableExtra( + ConnectivityManager.EXTRA_NETWORK_INFO); // Notify location providers of current network state synchronized (mLock) { diff --git a/services/java/com/android/server/connectivity/Vpn.java b/services/java/com/android/server/connectivity/Vpn.java index b12d5976bf91..d788eba9de44 100644 --- a/services/java/com/android/server/connectivity/Vpn.java +++ b/services/java/com/android/server/connectivity/Vpn.java @@ -53,6 +53,8 @@ import java.io.OutputStream; import java.nio.charset.Charsets; import java.util.Arrays; +import libcore.io.IoUtils; + /** * @hide */ @@ -228,11 +230,7 @@ public class Vpn extends INetworkManagementEventObserver.Stub { mConnection = connection; mInterface = interfaze; } catch (RuntimeException e) { - try { - tun.close(); - } catch (Exception ex) { - // ignore - } + IoUtils.closeQuietly(tun); throw e; } Log.i(TAG, "Established by " + config.user + " on " + mInterface); @@ -442,11 +440,7 @@ public class Vpn extends INetworkManagementEventObserver.Stub { // We assume that everything is reset after stopping the daemons. interrupt(); for (LocalSocket socket : mSockets) { - try { - socket.close(); - } catch (Exception e) { - // ignore - } + IoUtils.closeQuietly(socket); } } diff --git a/services/java/com/android/server/display/DisplayManagerService.java b/services/java/com/android/server/display/DisplayManagerService.java index b9c9ffde91aa..468bf21f8fd7 100644 --- a/services/java/com/android/server/display/DisplayManagerService.java +++ b/services/java/com/android/server/display/DisplayManagerService.java @@ -62,6 +62,9 @@ public final class DisplayManagerService extends IDisplayManager.Stub { /** All the DisplayInfos in the system indexed by deviceId */ private final SparseArray<DisplayInfo> mDisplayInfos = new SparseArray<DisplayInfo>(); + private final ArrayList<DisplayCallback> mCallbacks = + new ArrayList<DisplayManagerService.DisplayCallback>(); + public DisplayManagerService() { mHeadless = SystemProperties.get(SYSTEM_HEADLESS).equals("1"); registerDefaultDisplayAdapter(); @@ -131,8 +134,20 @@ public final class DisplayManagerService extends IDisplayManager.Stub { * @param adapter The wrapper for information associated with the physical display. */ public void registerDisplayAdapter(DisplayAdapter adapter) { + + int displayId; + DisplayCallback[] callbacks; + synchronized (mLock) { - int displayId = mDisplayIdSeq++; + displayId = mDisplayIdSeq; + do { + // Find the next unused displayId. (Pretend like it might ever wrap around). + mDisplayIdSeq++; + if (mDisplayIdSeq < 0) { + mDisplayIdSeq = Display.DEFAULT_DISPLAY + 1; + } + } while (mDisplayInfos.get(mDisplayIdSeq) != null); + adapter.setDisplayId(displayId); createDisplayInfoLocked(displayId, adapter); @@ -142,6 +157,11 @@ public final class DisplayManagerService extends IDisplayManager.Stub { mLogicalToPhysicals.put(displayId, list); mDisplayAdapters.add(adapter); + callbacks = mCallbacks.toArray(new DisplayCallback[mCallbacks.size()]); + } + + for (int i = callbacks.length - 1; i >= 0; i--) { + callbacks[i].displayAdded(displayId); } // TODO: Notify SurfaceFlinger of new addition. @@ -188,7 +208,6 @@ public final class DisplayManagerService extends IDisplayManager.Stub { list = new ArrayList<DisplayAdapter>(); mLogicalToPhysicals.put(displayId, list); } - list.add(adapter); adapter.setDisplayId(displayId); } @@ -219,6 +238,20 @@ public final class DisplayManagerService extends IDisplayManager.Stub { // TODO: Notify SurfaceFlinger of removal. } + public void registerDisplayCallback(final DisplayCallback callback) { + synchronized (mLock) { + if (!mCallbacks.contains(callback)) { + mCallbacks.add(callback); + } + } + } + + public void unregisterDisplayCallback(final DisplayCallback callback) { + synchronized (mLock) { + mCallbacks.remove(callback); + } + } + /** * Create a new logical DisplayInfo and fill it in with information from the physical display. * @param displayId The logical identifier. @@ -288,11 +321,17 @@ public final class DisplayManagerService extends IDisplayManager.Stub { DisplayDeviceInfo info = new DisplayDeviceInfo(); for (DisplayAdapter adapter : mDisplayAdapters) { - pw.println("Display for adapter " + adapter.getName()); + pw.println("Display for adapter " + adapter.getName() + + " assigned to Display " + adapter.getDisplayId()); DisplayDevice device = adapter.getDisplayDevice(); pw.print(" "); device.getInfo(info); pw.println(info); } } + + public interface DisplayCallback { + public void displayAdded(int displayId); + public void displayRemoved(int displayId); + } } diff --git a/services/java/com/android/server/net/NetworkAlertObserver.java b/services/java/com/android/server/net/BaseNetworkObserver.java index 9e181c57484a..8b2aa5db81a0 100644 --- a/services/java/com/android/server/net/NetworkAlertObserver.java +++ b/services/java/com/android/server/net/BaseNetworkObserver.java @@ -19,29 +19,39 @@ package com.android.server.net; import android.net.INetworkManagementEventObserver; /** + * Base {@link INetworkManagementEventObserver} that provides no-op + * implementations which can be overridden. + * * @hide */ -public abstract class NetworkAlertObserver extends INetworkManagementEventObserver.Stub { +public class BaseNetworkObserver extends INetworkManagementEventObserver.Stub { @Override public void interfaceStatusChanged(String iface, boolean up) { - // ignored; interface changes come through ConnectivityService + // default no-op } @Override public void interfaceRemoved(String iface) { - // ignored; interface changes come through ConnectivityService + // default no-op } @Override public void interfaceLinkStateChanged(String iface, boolean up) { - // ignored; interface changes come through ConnectivityService + // default no-op } @Override public void interfaceAdded(String iface) { - // ignored; interface changes come through ConnectivityService + // default no-op } + + @Override public void interfaceClassDataActivityChanged(String label, boolean active) { - // ignored; interface changes come through ConnectivityService + // default no-op + } + + @Override + public void limitReached(String limitName, String iface) { + // default no-op } } diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java index 3eb29db230f3..7e5f8cff7182 100644 --- a/services/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java @@ -570,7 +570,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { /** * Observer that watches for {@link INetworkManagementService} alerts. */ - private INetworkManagementEventObserver mAlertObserver = new NetworkAlertObserver() { + private INetworkManagementEventObserver mAlertObserver = new BaseNetworkObserver() { @Override public void limitReached(String limitName, String iface) { // only someone like NMS should be calling us diff --git a/services/java/com/android/server/net/NetworkStatsService.java b/services/java/com/android/server/net/NetworkStatsService.java index ba122ecdf231..ffe2a3d4a170 100644 --- a/services/java/com/android/server/net/NetworkStatsService.java +++ b/services/java/com/android/server/net/NetworkStatsService.java @@ -763,7 +763,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { /** * Observer that watches for {@link INetworkManagementService} alerts. */ - private INetworkManagementEventObserver mAlertObserver = new NetworkAlertObserver() { + private INetworkManagementEventObserver mAlertObserver = new BaseNetworkObserver() { @Override public void limitReached(String limitName, String iface) { // only someone like NMS should be calling us diff --git a/services/java/com/android/server/power/PowerManagerService.java b/services/java/com/android/server/power/PowerManagerService.java index 453c7a475b0a..cb6db3cec828 100644 --- a/services/java/com/android/server/power/PowerManagerService.java +++ b/services/java/com/android/server/power/PowerManagerService.java @@ -424,6 +424,11 @@ public class PowerManagerService extends IPowerManager.Stub forceUserActivityLocked(); } } + + // stop the screensaver if we're now unplugged + if (mPolicy != null) { + mPolicy.stopScreenSaver(); + } } } } @@ -1826,7 +1831,7 @@ public class PowerManagerService extends IPowerManager.Stub final boolean stateChanged = mPowerState != newState; if (stateChanged && reason == WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT) { - if (mPolicy != null && mPolicy.isScreenSaverEnabled()) { + if (mPolicy != null && mPolicy.isScreenSaverEnabled() && mIsPowered) { if (DEBUG) { Slog.d(TAG, "setPowerState: running screen saver instead of turning off screen"); } @@ -1922,6 +1927,13 @@ public class PowerManagerService extends IPowerManager.Stub } else { err = 0; } + + // stop the screensaver if user turned screen off + if (stateChanged && reason == WindowManagerPolicy.OFF_BECAUSE_OF_USER) { + if (mPolicy != null) { + mPolicy.stopScreenSaver(); + } + } } } else if (stateChanged) { // Screen on/off didn't change, but lights may have. diff --git a/services/java/com/android/server/wm/DisplayContent.java b/services/java/com/android/server/wm/DisplayContent.java index 2305c8870a56..a8854cfe7995 100644 --- a/services/java/com/android/server/wm/DisplayContent.java +++ b/services/java/com/android/server/wm/DisplayContent.java @@ -56,8 +56,10 @@ class DisplayContent { final Object mDisplaySizeLock = new Object(); int mInitialDisplayWidth = 0; int mInitialDisplayHeight = 0; + int mInitialDisplayDensity = 0; int mBaseDisplayWidth = 0; int mBaseDisplayHeight = 0; + int mBaseDisplayDensity = 0; final DisplayManagerService mDisplayManager; final DisplayInfo mDisplayInfo = new DisplayInfo(); @@ -82,16 +84,14 @@ class DisplayContent { public void dump(PrintWriter pw) { pw.print(" Display: mDisplayId="); pw.println(mDisplayId); pw.print(" init="); pw.print(mInitialDisplayWidth); pw.print("x"); - pw.print(mInitialDisplayHeight); + pw.print(mInitialDisplayHeight); pw.print(" "); pw.print(mInitialDisplayDensity); + pw.print("dpi"); if (mInitialDisplayWidth != mBaseDisplayWidth - || mInitialDisplayHeight != mBaseDisplayHeight) { + || mInitialDisplayHeight != mBaseDisplayHeight + || mInitialDisplayDensity != mBaseDisplayDensity) { pw.print(" base="); pw.print(mBaseDisplayWidth); pw.print("x"); pw.print(mBaseDisplayHeight); - } - if (mInitialDisplayWidth != mDisplayInfo.logicalWidth - || mInitialDisplayHeight != mDisplayInfo.logicalHeight) { - pw.print(" init="); pw.print(mInitialDisplayWidth); - pw.print("x"); pw.print(mInitialDisplayHeight); + pw.print(" "); pw.print(mBaseDisplayDensity); pw.print("dpi"); } pw.print(" cur="); pw.print(mDisplayInfo.logicalWidth); diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index e763a56d6fd4..5b04810ef637 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -6568,6 +6568,7 @@ public class WindowManagerService extends IWindowManager.Stub displayInfo.rotation = mRotation; displayInfo.logicalWidth = dw; displayInfo.logicalHeight = dh; + displayInfo.logicalDensityDpi = displayContent.mBaseDisplayDensity; displayInfo.appWidth = appWidth; displayInfo.appHeight = appHeight; displayInfo.getLogicalMetrics(mRealDisplayMetrics, null); @@ -6594,7 +6595,7 @@ public class WindowManagerService extends IWindowManager.Stub config.compatScreenWidthDp = (int)(config.screenWidthDp / mCompatibleScreenScale); config.compatScreenHeightDp = (int)(config.screenHeightDp / mCompatibleScreenScale); config.compatSmallestScreenWidthDp = computeCompatSmallestWidth(rotated, dm, dw, dh); - config.densityDpi = mDisplayMetrics.densityDpi; + config.densityDpi = displayContent.mBaseDisplayDensity; // Update the configuration based on available input devices, lid switch, // and platform configuration. @@ -6902,8 +6903,8 @@ public class WindowManagerService extends IWindowManager.Stub info.width, info.height); mInputManager.setDisplayOrientation(Display.DEFAULT_DISPLAY, mDisplay.getRotation(), Surface.ROTATION_0); - mPolicy.setInitialDisplaySize(mDisplay, - displayContent.mInitialDisplayWidth, displayContent.mInitialDisplayHeight); + mPolicy.setInitialDisplaySize(mDisplay, displayContent.mInitialDisplayWidth, + displayContent.mInitialDisplayHeight, displayContent.mInitialDisplayDensity); } } @@ -6917,8 +6918,10 @@ public class WindowManagerService extends IWindowManager.Stub mDisplayManager.getDisplayInfo(displayId, displayInfo); displayContent.mInitialDisplayWidth = displayInfo.logicalWidth; displayContent.mInitialDisplayHeight = displayInfo.logicalHeight; + displayContent.mInitialDisplayDensity = displayInfo.logicalDensityDpi; displayContent.mBaseDisplayWidth = displayContent.mInitialDisplayWidth; displayContent.mBaseDisplayHeight = displayContent.mInitialDisplayHeight; + displayContent.mBaseDisplayDensity = displayContent.mInitialDisplayDensity; } } @@ -6928,7 +6931,7 @@ public class WindowManagerService extends IWindowManager.Stub } synchronized (mWindowMap) { - readForcedDisplaySizeLocked(getDisplayContent(displayId)); + readForcedDisplaySizeAndDensityLocked(getDisplayContent(displayId)); } } @@ -7590,24 +7593,49 @@ public class WindowManagerService extends IWindowManager.Stub } } - private void readForcedDisplaySizeLocked(final DisplayContent displayContent) { - final String str = Settings.Secure.getString(mContext.getContentResolver(), + private void readForcedDisplaySizeAndDensityLocked(final DisplayContent displayContent) { + boolean changed = false; + final String sizeStr = Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.DISPLAY_SIZE_FORCED); - if (str == null || str.length() == 0) { - return; + if (sizeStr != null && sizeStr.length() > 0) { + final int pos = sizeStr.indexOf(','); + if (pos > 0 && sizeStr.lastIndexOf(',') == pos) { + int width, height; + try { + width = Integer.parseInt(sizeStr.substring(0, pos)); + height = Integer.parseInt(sizeStr.substring(pos+1)); + synchronized(displayContent.mDisplaySizeLock) { + if (displayContent.mBaseDisplayWidth != width + || displayContent.mBaseDisplayHeight != height) { + changed = true; + Slog.i(TAG, "FORCED DISPLAY SIZE: " + width + "x" + height); + displayContent.mBaseDisplayWidth = width; + displayContent.mBaseDisplayHeight = height; + } + } + } catch (NumberFormatException ex) { + } + } } - final int pos = str.indexOf(','); - if (pos <= 0 || str.lastIndexOf(',') != pos) { - return; + final String densityStr = Settings.Secure.getString(mContext.getContentResolver(), + Settings.Secure.DISPLAY_DENSITY_FORCED); + if (densityStr != null && densityStr.length() > 0) { + int density; + try { + density = Integer.parseInt(densityStr); + synchronized(displayContent.mDisplaySizeLock) { + if (displayContent.mBaseDisplayDensity != density) { + changed = true; + Slog.i(TAG, "FORCED DISPLAY DENSITY: " + density); + displayContent.mBaseDisplayDensity = density; + } + } + } catch (NumberFormatException ex) { + } } - int width, height; - try { - width = Integer.parseInt(str.substring(0, pos)); - height = Integer.parseInt(str.substring(pos+1)); - } catch (NumberFormatException ex) { - return; + if (changed) { + reconfigureDisplayLocked(displayContent); } - setForcedDisplaySizeLocked(displayContent, width, height); } private void setForcedDisplaySizeLocked(DisplayContent displayContent, int width, int height) { @@ -7617,8 +7645,49 @@ public class WindowManagerService extends IWindowManager.Stub displayContent.mBaseDisplayWidth = width; displayContent.mBaseDisplayHeight = height; } + reconfigureDisplayLocked(displayContent); + } + + public void clearForcedDisplaySize(int displayId) { + synchronized(mWindowMap) { + final DisplayContent displayContent = getDisplayContent(displayId); + setForcedDisplaySizeLocked(displayContent, displayContent.mInitialDisplayWidth, + displayContent.mInitialDisplayHeight); + Settings.Secure.putString(mContext.getContentResolver(), + Settings.Secure.DISPLAY_SIZE_FORCED, ""); + } + } + + public void setForcedDisplayDensity(int displayId, int density) { + synchronized(mWindowMap) { + final DisplayContent displayContent = getDisplayContent(displayId); + setForcedDisplayDensityLocked(displayContent, density); + Settings.Secure.putString(mContext.getContentResolver(), + Settings.Secure.DISPLAY_SIZE_FORCED, Integer.toString(density)); + } + } + + private void setForcedDisplayDensityLocked(DisplayContent displayContent, int density) { + Slog.i(TAG, "Using new display density: " + density); + + synchronized(displayContent.mDisplaySizeLock) { + displayContent.mBaseDisplayDensity = density; + } + reconfigureDisplayLocked(displayContent); + } + + public void clearForcedDisplayDensity(int displayId) { + synchronized(mWindowMap) { + final DisplayContent displayContent = getDisplayContent(displayId); + setForcedDisplayDensityLocked(displayContent, displayContent.mInitialDisplayDensity); + Settings.Secure.putString(mContext.getContentResolver(), + Settings.Secure.DISPLAY_DENSITY_FORCED, ""); + } + } + + private void reconfigureDisplayLocked(DisplayContent displayContent) { mPolicy.setInitialDisplaySize(mDisplay, displayContent.mBaseDisplayWidth, - displayContent.mBaseDisplayHeight); + displayContent.mBaseDisplayHeight, displayContent.mBaseDisplayDensity); mLayoutNeeded = true; @@ -7642,16 +7711,6 @@ public class WindowManagerService extends IWindowManager.Stub performLayoutAndPlaceSurfacesLocked(); } - public void clearForcedDisplaySize(int displayId) { - synchronized(mWindowMap) { - final DisplayContent displayContent = getDisplayContent(displayId); - setForcedDisplaySizeLocked(displayContent, displayContent.mInitialDisplayWidth, - displayContent.mInitialDisplayHeight); - Settings.Secure.putString(mContext.getContentResolver(), - Settings.Secure.DISPLAY_SIZE_FORCED, ""); - } - } - public boolean hasSystemNavBar() { return mPolicy.hasSystemNavBar(); } diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java index f1c69f200858..d931426a3bed 100644 --- a/services/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/java/com/android/server/wm/WindowStateAnimator.java @@ -474,6 +474,7 @@ class WindowStateAnimator { private final Point mSize = new Point(); private final Rect mWindowCrop = new Rect(); private boolean mShown = false; + private int mDisplayId; private String mName = "Not named"; public SurfaceTrace(SurfaceSession s, @@ -481,6 +482,7 @@ class WindowStateAnimator { OutOfResourcesException { super(s, pid, displayId, w, h, format, flags); mSize.set(w, h); + mDisplayId = displayId; Slog.v(SURFACE_TAG, "ctor: " + this + ". Called by " + Debug.getCallers(3)); } @@ -548,6 +550,13 @@ class WindowStateAnimator { } @Override + public void setDisplayId(int displayId) { + super.setDisplayId(displayId); + mDisplayId = displayId; + Slog.v(SURFACE_TAG, "setDisplayId: " + this + ". Called by " + Debug.getCallers(3)); + } + + @Override public void hide() { super.hide(); mShown = false; @@ -588,7 +597,7 @@ class WindowStateAnimator { @Override public String toString() { return "Surface " + Integer.toHexString(System.identityHashCode(this)) + " " - + mName + ": shown=" + mShown + " layer=" + mLayer + + mName + " (" + mDisplayId + "): shown=" + mShown + " layer=" + mLayer + " alpha=" + mSurfaceTraceAlpha + " " + mPosition.x + "," + mPosition.y + " " + mSize.x + "x" + mSize.y + " crop=" + mWindowCrop.toShortString(); diff --git a/telephony/java/com/android/internal/telephony/AdnRecord.aidl b/telephony/java/com/android/internal/telephony/AdnRecord.aidl deleted file mode 100644 index b4a1a298aefd..000000000000 --- a/telephony/java/com/android/internal/telephony/AdnRecord.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* -** Copyright 2007, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -package com.android.internal.telephony; - -parcelable AdnRecord; - diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/GradientStopsActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/GradientStopsActivity.java index ed00ecd645fe..a73eab579d12 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/GradientStopsActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/GradientStopsActivity.java @@ -19,6 +19,7 @@ package com.android.test.hwui; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.Shader; @@ -111,6 +112,14 @@ public class GradientStopsActivity extends Activity { canvas.translate(0.0f, 75.0f); canvas.drawRect(0.0f, 0.0f, 768.0f, 50.0f, paint); + + gradient = new LinearGradient(0.0f, 0.0f, 512.0f, 0.0f, + colors, null, Shader.TileMode.CLAMP); + + paint.setShader(gradient); + + canvas.translate(0.0f, 75.0f); + canvas.drawRect(0.0f, 0.0f, 512.0f, 50.0f, paint); } } } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java index 67e51fa19501..f548b469474a 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java @@ -94,7 +94,11 @@ public class BridgeWindowManager implements IWindowManager { @Override public void clearForcedDisplaySize(int displayId) throws RemoteException { // TODO Auto-generated method stub + } + @Override + public void clearForcedDisplayDensity(int displayId) throws RemoteException { + // TODO Auto-generated method stub } @Override @@ -327,7 +331,11 @@ public class BridgeWindowManager implements IWindowManager { @Override public void setForcedDisplaySize(int displayId, int arg0, int arg1) throws RemoteException { // TODO Auto-generated method stub + } + @Override + public void setForcedDisplayDensity(int displayId, int density) throws RemoteException { + // TODO Auto-generated method stub } @Override |