diff options
83 files changed, 978 insertions, 1110 deletions
diff --git a/api/current.txt b/api/current.txt index 6bb40e18ba51..d61f0d2108b0 100644 --- a/api/current.txt +++ b/api/current.txt @@ -9432,6 +9432,8 @@ package android.graphics { method public void moveTo(float, float); method public void offset(float, float, android.graphics.Path); method public void offset(float, float); + method public boolean op(android.graphics.Path, android.graphics.Path.Op); + method public boolean op(android.graphics.Path, android.graphics.Path, android.graphics.Path.Op); method public void quadTo(float, float, float, float); method public void rCubicTo(float, float, float, float, float, float); method public void rLineTo(float, float); @@ -9463,6 +9465,16 @@ package android.graphics { enum_constant public static final android.graphics.Path.FillType WINDING; } + public static final class Path.Op extends java.lang.Enum { + method public static android.graphics.Path.Op valueOf(java.lang.String); + method public static final android.graphics.Path.Op[] values(); + enum_constant public static final android.graphics.Path.Op DIFFERENCE; + enum_constant public static final android.graphics.Path.Op INTERSECT; + enum_constant public static final android.graphics.Path.Op REVERSE_DIFFERENCE; + enum_constant public static final android.graphics.Path.Op UNION; + enum_constant public static final android.graphics.Path.Op XOR; + } + public class PathDashPathEffect extends android.graphics.PathEffect { ctor public PathDashPathEffect(android.graphics.Path, float, float, android.graphics.PathDashPathEffect.Style); } @@ -21746,8 +21758,11 @@ package android.renderscript { public final class ScriptIntrinsicColorMatrix extends android.renderscript.ScriptIntrinsic { method public static android.renderscript.ScriptIntrinsicColorMatrix create(android.renderscript.RenderScript, android.renderscript.Element); + method public static android.renderscript.ScriptIntrinsicColorMatrix create(android.renderscript.RenderScript); method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation); method public android.renderscript.Script.KernelID getKernelID(); + method public void setAdd(android.renderscript.Float4); + method public void setAdd(float, float, float, float); method public void setColorMatrix(android.renderscript.Matrix4f); method public void setColorMatrix(android.renderscript.Matrix3f); method public void setGreyscale(); diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 8bbe6c826b76..1dbe34e20115 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -355,11 +355,17 @@ public class ConnectivityManager { */ public static final int TYPE_WIFI_P2P = 13; + /** + * The network to use for initially attaching to the network + * {@hide} + */ + public static final int TYPE_MOBILE_IA = 14; + /** {@hide} */ - public static final int MAX_RADIO_TYPE = TYPE_WIFI_P2P; + public static final int MAX_RADIO_TYPE = TYPE_MOBILE_IA; /** {@hide} */ - public static final int MAX_NETWORK_TYPE = TYPE_WIFI_P2P; + public static final int MAX_NETWORK_TYPE = TYPE_MOBILE_IA; /** * If you want to set the default network preference,you can directly @@ -436,6 +442,8 @@ public class ConnectivityManager { return "MOBILE_CBS"; case TYPE_WIFI_P2P: return "WIFI_P2P"; + case TYPE_MOBILE_IA: + return "MOBILE_IA"; default: return Integer.toString(type); } @@ -458,6 +466,7 @@ public class ConnectivityManager { case TYPE_MOBILE_FOTA: case TYPE_MOBILE_IMS: case TYPE_MOBILE_CBS: + case TYPE_MOBILE_IA: return true; default: return false; @@ -489,6 +498,7 @@ public class ConnectivityManager { case TYPE_MOBILE_MMS: case TYPE_MOBILE_SUPL: case TYPE_MOBILE_HIPRI: + case TYPE_MOBILE_IA: return true; default: return false; diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java index 5a1daed9511a..e8c6dafb104f 100644 --- a/core/java/android/net/MobileDataStateTracker.java +++ b/core/java/android/net/MobileDataStateTracker.java @@ -51,8 +51,8 @@ import java.io.PrintWriter; public class MobileDataStateTracker implements NetworkStateTracker { private static final String TAG = "MobileDataStateTracker"; - private static final boolean DBG = false; - private static final boolean VDBG = false; + private static final boolean DBG = true; + private static final boolean VDBG = true; private PhoneConstants.DataState mMobileDataState; private ITelephony mPhoneService; @@ -597,6 +597,8 @@ public class MobileDataStateTracker implements NetworkStateTracker { return PhoneConstants.APN_TYPE_IMS; case ConnectivityManager.TYPE_MOBILE_CBS: return PhoneConstants.APN_TYPE_CBS; + case ConnectivityManager.TYPE_MOBILE_IA: + return PhoneConstants.APN_TYPE_IA; default: sloge("Error mapping networkType " + netType + " to apnType."); return null; diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java index e59f5b136165..d87a36e63a85 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -825,6 +825,14 @@ public final class ContactsContract { public static final String STARRED = "starred"; /** + * The position at which the contact is pinned. If {@link PinnedPositions.UNPINNED}, + * the contact is not pinned. Also see {@link PinnedPositions}. + * <P>Type: INTEGER </P> + * @hide + */ + public static final String PINNED = "pinned"; + + /** * URI for a custom ringtone associated with the contact. If null or missing, * the default ringtone is used. * <P>Type: TEXT (URI to the ringtone)</P> @@ -7714,6 +7722,107 @@ public final class ContactsContract { } /** + * <p> + * API allowing applications to send pinning information for specified contacts to the + * Contacts Provider. + * </p> + * + * <p> + * This pinning information can be used by individual applications to customize how + * they order particular pinned contacts. For example, a Dialer application could + * use pinned information to order user-pinned contacts in a top row of favorites. + * </p> + * + * <p> + * It is possible for two or more contacts to occupy the same pinned position (due + * to aggregation and sync), so this pinning information should be used on a best-effort + * basis to order contacts in-application rather than an absolute guide on where a contact + * should be positioned. Contacts returned by the ContactsProvider will not be ordered based + * on this information, so it is up to the client application to reorder these contacts within + * their own UI adhering to (or ignoring as appropriate) information stored in the pinned + * column. + * </p> + * + * <p> + * By default, unpinned contacts will have a pinned position of + * {@link PinnedPositions#UNPINNED}, or {@link Integer#MAX_VALUE} (2^31 - 1). Client-provided + * pinned positions can be positive integers that range anywhere from 0 to + * {@link PinnedPositions#UNPINNED}. + * </p> + * + * <p> + * When using {@link PinnedPositions#UPDATE_URI} to update the pinned positions of + * certain contacts, it may make sense for your application to star any pinned contacts + * by default. To specify this behavior, set the boolean query parameter + * {@link PinnedPositions#STAR_WHEN_PINNING} to true to force all pinned and unpinned + * contacts to be automatically starred and unstarred. + * </p> + * @hide + */ + public static final class PinnedPositions { + + /** + * <p> + * This URI allows applications to update pinned positions for a provided set of contacts. + * </p> + * + * <p> + * The list of contactIds to pin and their corresponding pinned positions should be + * provided in key-value pairs stored in a {@link ContentValues} object where the key + * is a valid contactId, while each pinned position is a positive integer. + * </p> + * + * <p> + * Example: + * <pre> + * ContentValues values = new ContentValues(); + * values.put("10", 20); + * values.put("12", 2); + * values.put("15", PinnedPositions.UNPINNED); + * int count = resolver.update(PinnedPositions.UPDATE_URI, values, null, null); + * </pre> + * + * This pins the contact with id 10 at position 20, the contact with id 12 at position 2, + * and unpins the contact with id 15. + * </p> + */ + public static final Uri UPDATE_URI = Uri.withAppendedPath(AUTHORITY_URI, + "pinned_position_update"); + + /** + * Default value for the pinned position of an unpinned contact. Also equal to + * {@link Integer#MAX_VALUE}. + */ + public static final int UNPINNED = 0x7FFFFFFF; + + /** + * <p> + * A boolean query parameter that can be used with {@link #UPDATE_URI}. + * If "1" or "true", any contact that is pinned or unpinned will be correspondingly + * starred or unstarred. Otherwise, starring information will not be affected by pinned + * updates. This is false by default. + * </p> + * + * <p> + * Example: + * <pre> + * ContentValues values = new ContentValues(); + * values.put("10", 20); + * values.put("15", PinnedPositions.UNPINNED); + * int count = resolver.update(ContactsContract.PinnedPositions.UPDATE_URI.buildUpon() + * .appendQueryParameter(PinnedPositions.FORCE_STAR_WHEN_PINNING, "true").build(), + * values, null, null); + * </pre> + * + * This will pin the contact with id 10 at position 20 and star it automatically if not + * already starred, and unpin the contact with id 15, and unstar it automatically if not + * already unstarred. + * </p> + */ + public static final String STAR_WHEN_PINNING = "star_when_pinning"; + } + + /** * Helper methods to display QuickContact dialogs that allow users to pivot on * a specific {@link Contacts} entry. */ diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java index b031765e4f7e..53abf196a699 100644 --- a/core/java/android/webkit/WebViewFactory.java +++ b/core/java/android/webkit/WebViewFactory.java @@ -28,13 +28,13 @@ import android.util.Log; * @hide */ public final class WebViewFactory { - public static final boolean DEFAULT_TO_EXPERIMENTAL_WEBVIEW = false; + private static final boolean DEFAULT_TO_EXPERIMENTAL_WEBVIEW = false; private static final String EXPERIMENTAL_PROPERTY_DEFAULT_OFF = "persist.sys.webview.exp"; private static final String EXPERIMENTAL_PROPERTY_DEFAULT_ON = "persist.sys.webview.exp_on"; // Modify the persisted property name when the experiment is on-by-default, so that any user // setting override lives in a different property namespace. - public static final String WEBVIEW_EXPERIMENTAL_PROPERTY = DEFAULT_TO_EXPERIMENTAL_WEBVIEW ? + private static final String WEBVIEW_EXPERIMENTAL_PROPERTY = DEFAULT_TO_EXPERIMENTAL_WEBVIEW ? EXPERIMENTAL_PROPERTY_DEFAULT_ON : EXPERIMENTAL_PROPERTY_DEFAULT_OFF; private static final String FORCE_PROVIDER_PROPERTY = "webview.force_provider"; diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 9842aba2885d..d8a2edaff2c4 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -923,9 +923,9 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te * the choice mode has not been set to {@link #CHOICE_MODE_NONE}. * * @return A SparseBooleanArray which will return true for each call to - * get(int position) where position is a position in the list, - * or <code>null</code> if the choice mode is set to - * {@link #CHOICE_MODE_NONE}. + * get(int position) where position is a checked position in the + * list and false otherwise, or <code>null</code> if the choice + * mode is set to {@link #CHOICE_MODE_NONE}. */ public SparseBooleanArray getCheckedItemPositions() { if (mChoiceMode != CHOICE_MODE_NONE) { diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java index 789d263a85c4..eec15a996c08 100644 --- a/core/java/android/widget/Spinner.java +++ b/core/java/android/widget/Spinner.java @@ -937,6 +937,9 @@ public class Spinner extends AbsSpinner implements OnClickListener { } public void show(int textDirection, int textAlignment) { + if (mListAdapter == null) { + return; + } AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); if (mPrompt != null) { builder.setTitle(mPrompt); diff --git a/core/jni/android/graphics/Path.cpp b/core/jni/android/graphics/Path.cpp index eb9e004c9861..ab7f1dc2469c 100644 --- a/core/jni/android/graphics/Path.cpp +++ b/core/jni/android/graphics/Path.cpp @@ -25,6 +25,7 @@ #include <android_runtime/AndroidRuntime.h> #include "SkPath.h" +#include "pathops/SkPathOps.h" #include <Caches.h> @@ -67,8 +68,7 @@ public: return obj->getFillType(); } - static void setFillType(JNIEnv* env, jobject clazz, SkPath* path, - SkPath::FillType ft) { + static void setFillType(JNIEnv* env, jobject clazz, SkPath* path, SkPath::FillType ft) { path->setFillType(ft); } @@ -200,7 +200,7 @@ public: } static void addRoundRectXY(JNIEnv* env, jobject clazz, SkPath* obj, jobject rect, - jfloat rx, jfloat ry, SkPath::Direction dir) { + jfloat rx, jfloat ry, SkPath::Direction dir) { SkRect rect_; GraphicsJNI::jrectf_to_rect(env, rect, &rect_); SkScalar rx_ = SkFloatToScalar(rx); @@ -209,7 +209,7 @@ public: } static void addRoundRect8(JNIEnv* env, jobject, SkPath* obj, jobject rect, - jfloatArray array, SkPath::Direction dir) { + jfloatArray array, SkPath::Direction dir) { SkRect rect_; GraphicsJNI::jrectf_to_rect(env, rect, &rect_); AutoJavaFloatArray afa(env, array, 8); @@ -261,7 +261,10 @@ public: static void transform__Matrix(JNIEnv* env, jobject clazz, SkPath* obj, SkMatrix* matrix) { obj->transform(*matrix); } - + + static jboolean op(JNIEnv* env, jobject clazz, SkPath* p1, SkPath* p2, SkPathOp op, SkPath* r) { + return Op(*p1, *p2, op, r); + } }; static JNINativeMethod methods[] = { @@ -301,7 +304,8 @@ static JNINativeMethod methods[] = { {"native_offset","(IFF)V", (void*) SkPathGlue::offset__FF}, {"native_setLastPoint","(IFF)V", (void*) SkPathGlue::setLastPoint}, {"native_transform","(III)V", (void*) SkPathGlue::transform__MatrixPath}, - {"native_transform","(II)V", (void*) SkPathGlue::transform__Matrix} + {"native_transform","(II)V", (void*) SkPathGlue::transform__Matrix}, + {"native_op","(IIII)Z", (void*) SkPathGlue::op} }; int register_android_graphics_Path(JNIEnv* env) { diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index c99fcf55ac83..0414b018573c 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Dit laat die houer toe om aan die topvlak-koppelvlak van \'n legstuk-diens te bind. Dit moet nooit vir normale programme nodig wees nie."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"skakel met \'n toestel-admin"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Laat die houer toe om bedoelings na \'n toesteladministrateur te stuur. Dit moet nooit vir normale programme nodig wees nie."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"voeg \'n toesteladministrateur by of verwyder een"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Laat die houer aktiewe toesteladministrateurs byvoeg of verwyder. Behoort nooit nodig te wees vir normale programme nie."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"verander skermoriëntasie"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Laat die program toe om die skerm se rotasie te eniger tyd te verander. Dit moet nooit vir normale programme nodig wees nie."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"verander wyserspoed"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index ac6f57f4536a..f4f8881794c6 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"ያዡ ግቤት ስልቱን ወደ ከፍተኛ-ደረጃ ፍርግም አገልግሎት ለመጠረዝ ይፈቅዳሉ። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"ከመሣሪያ አስተዳደር ጋር ተገናኝ"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"ያዡ በይነመረብን ለመሣሪያ አስተዳዳሪ ለመላክ ይፈቅዳሉ። ለመደበኛ መተግበሪያዎች በፍፁም አያስፈልግም።"</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"የመሣሪያ አስተዳዳሪ ያክሉ ወይም ያስወግዱ"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"ያዢው ንቁ የመሣሪያ አስተዳዳሪዎች እንዲያክል ወይም እንዲያስወግድ ያስችለዋል። ለመደበኛ መተግበሪያዎች ጭራሽ ሊያስፈልግ አይገባም።"</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"የማያ ገፀ አቀማመጥን ለውጥ"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"በማንኛውም ጊዜ የማሳያውን መሽከርከር ለመለወጥ ለመተግበሪያው ይፈቅዳሉ፡፡ ለተለመዱ መተግበሪያዎች አያስፈልግም፡፡"</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"የጠቋሚ ፍጥነት ለውጥ"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 6bcfde8a6890..63c8f74f8e44 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة الأداة. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"التفاعل مع مشرف الجهاز"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"للسماح للمالك بإرسال الأهداف إلى أحد مشرفي الجهاز. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"إضافة مشرف جهاز أو إزالته"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"للسماح بحامل البطاقة بإضافة مشرفي أجهزة نشطين أو إزالتهم. لا يلزم ذلك أبدًا للتطبيقات العادية."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"تغيير اتجاه الشاشة"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"للسماح للتطبيق بتغيير تدوير الشاشة في أي وقت. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"تغيير سرعة المؤشر"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index bcc803ee2956..32c786cb15d1 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Разрешава на притежателя да се обвърже с интерфейса от най-високото ниво на услуга за приспособления. Нормалните приложения би трябвало никога да не се нуждаят от това."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"взаимодействие с администратор на устройството"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Разрешава на притежателя да изпраща намерения до администратор на устройството. Нормалните приложения би трябвало никога да не се нуждаят от това."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"добавяне или премахване на администратор на устройства"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Разрешава на притежателя да добавя или премахва администратори на активни устройства. Нормалните приложения би трябвало никога да не се нуждаят от това."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"промяна на ориентацията на екрана"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Разрешава на приложението да променя ориентацията на екрана по всяко време. Нормалните приложения би трябвало никога да не се нуждаят от това."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"промяна на скоростта на курсор"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 76f243e879b7..782d27ec96e7 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permet que el titular vinculi a la interfície de nivell superior d\'un servei de widget. No s\'hauria de necessitar mai per a les aplicacions normals."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interactuar amb un administrador del dispositiu"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permet que el titular enviï intents a un administrador del sistema. No s\'hauria de necessitar mai per a les aplicacions normals."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"afegeix un administrador al dispositiu o suprimeix-lo"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permet que el titular afegeixi administradors actius al dispositiu o en suprimeixi. No s\'hauria de necessitar per a les aplicacions normals."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"canviar l\'orientació de la pantalla"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Permet que l\'aplicació canviï el gir de la pantalla en qualsevol moment. No s\'hauria de necessitar mai per a les aplicacions normals."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"canvi de velocitat del punter"</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 8e28050eb007..aa74e3c61c00 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Umožňuje držiteli navázat se na nejvyšší úroveň služby widgetu. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"komunikovat se správcem zařízení"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Umožňuje držiteli oprávnění odesílat informace správci zařízení. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"přidat nebo odebrat správce zařízení"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Opravňuje držitele přidávat nebo odebírat aktivní správce zařízení. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"změna orientace obrazovky"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Umožňuje aplikaci kdykoli změnit otočení obrazovky. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"změna rychlosti kurzoru"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 088f2ac8a2a4..a18b4dfd3374 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Tillader, at brugeren kan forpligte sig til en grænseflade for en widgettjeneste på øverste niveau. Bør aldrig være nødvendigt til almindelige apps."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"kommunikere med en enhedsadministrator"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Tillader, at brugeren kan sende hensigter til en enhedsadministrator. Dette bør aldrig være nødvendigt for almindelige apps."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"tilføje eller fjerne en enhedsadministrator"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Tillader, at man tilføjer eller fjerner aktive enhedsadministratorer. Dette burde aldrig være nødvendigt til normale apps."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"skift skærmretning"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Tillader, at appen kan ændre skærmretningen på et hvilket som helst tidspunkt. Bør aldrig være nødvendigt for almindelige apps."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"ændre markørens hastighed"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 17f96cfaa6c3..3597f9425612 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Ermöglicht dem Halter, sich an die Oberfläche eines Widget-Dienstes auf oberster Ebene zu binden. Sollte nie für normale Apps benötigt werden."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"Interaktion mit einem Geräteadministrator"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Ermöglicht dem Halter, Intents an einen Geräteadministrator zu senden. Sollte nie für normale Apps benötigt werden."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"Geräteadministrator hinzufügen oder entfernen"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Ermöglicht dem Inhaber, aktive Geräteadministratoren hinzuzufügen oder zu entfernen. Sollte für normale Apps nie benötigt werden."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"Bildschirmausrichtung ändern"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Ermöglicht der App, die Bildschirmdrehung jederzeit zu ändern. Sollte nie für normale Apps benötigt werden."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"Zeigergeschwindigkeit ändern"</string> @@ -652,13 +650,13 @@ <string name="policylab_watchLogin" msgid="914130646942199503">"Versuche zum Entsperren des Displays überwachen"</string> <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Anzahl der falsch eingegebenen Passwörter beim Entsperren des Displays überwachen und Tablet sperren oder alle Daten auf dem Tablet löschen, wenn zu häufig ein falsches Passwort eingegeben wird"</string> <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Anzahl der falsch eingegebenen Passwörter beim Entsperren des Bildschirms überwachen und Telefon sperren oder alle Daten auf dem Telefon löschen, wenn zu häufig ein falsches Passwort eingegeben wird"</string> - <string name="policylab_resetPassword" msgid="2620077191242688955">"Passwort zum Entsperren des Displays ändern"</string> - <string name="policydesc_resetPassword" msgid="605963962301904458">"Passwort zum Entsperren des Bildschirms ändern"</string> + <string name="policylab_resetPassword" msgid="2620077191242688955">"Passwort zum Entsperren des Bildschirms ändern"</string> + <string name="policydesc_resetPassword" msgid="605963962301904458">"Ändern Sie das Passwort zum Entsperren des Bildschirms."</string> <string name="policylab_forceLock" msgid="2274085384704248431">"Display sperren"</string> <string name="policydesc_forceLock" msgid="1141797588403827138">"Legen Sie fest, wie und wann der Bildschirm gesperrt wird."</string> <string name="policylab_wipeData" msgid="3910545446758639713">"Alle Daten löschen"</string> <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Auf Werkseinstellungen zurücksetzen und Daten auf dem Tablet ohne Warnung löschen"</string> - <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Auf Werkseinstellungen zurücksetzen und Daten auf dem Telefon ohne Warnung löschen"</string> + <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Setzen Sie das Telefon auf Werkseinstellungen zurück. Dabei werden alle Daten ohne Warnung gelöscht."</string> <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Den globalen Proxy des Geräts festlegen"</string> <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Den bei aktivierter Richtlinie zu verwendenden globalen Proxy des Geräts festlegen. Nur der erste Geräteadministrator kann den gültigen globalen Proxy festlegen."</string> <string name="policylab_expirePassword" msgid="885279151847254056">"Ablauf von Sperr-Passwort festlegen"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index bc379c58c78b..de2f25523af5 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας υπηρεσίας γραφικών στοιχείων. Δεν απαιτείται για κανονικές εφαρμογές."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"επικοινωνία με έναν διαχειριστή συσκευής"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Επιτρέπει στον κάτοχο την αποστολή στόχων σε έναν διαχειριστή συσκευής. Δεν είναι απαραίτητο για συνήθεις εφαρμογές."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"προσθήκη ή κατάργηση ενός διαχειριστή συσκευής"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Επιτρέπει στον κάτοχο να προσθέτει ή να καταργεί ενεργούς διαχειριστές συσκευών. Δεν θα πρέπει να ζητείται ποτέ για κανονικές εφαρμογές."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"αλλαγή προσανατολισμού οθόνης"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Επιτρέπει στην εφαρμογή την αλλαγή της περιστροφής της οθόνης ανά πάσα στιγμή. Δεν απαιτείται για συνήθεις εφαρμογές."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"αλλαγή ταχύτητας δείκτη"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 0222b1bc0c9b..4abcade0152e 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Allows the holder to bind to the top-level interface of a widget service. Should never be needed for normal apps."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interact with device admin"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Allows the holder to send intents to a device administrator. Should never be needed for normal apps."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"add or remove a device admin"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Allows the holder to add or remove active device administrators. Should never be needed for normal apps."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"change screen orientation"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Allows the app to change the rotation of the screen at any time. Should never be needed for normal apps."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"change pointer speed"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index cde265f1b506..d93d5daa1b21 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permite al propietario vincularse a la interfaz de nivel superior del servicio de widget. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interactuar con un administrador de dispositivos"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permite enviar intentos a un administrador de dispositivos. Las aplicaciones normales no deberían necesitar este permiso."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"agregar o eliminar un administrador de dispositivos"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permite al propietario agregar o eliminar administradores de dispositivos activos. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"cambiar la orientación de la pantalla"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Permite que la aplicación cambie la rotación de la pantalla en cualquier momento. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"cambiar velocidad del puntero"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 0c45c10e2ff9..3e0eb842f293 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permite enlazar con la interfaz de nivel superior de un servicio de widget. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interactuar con el administrador de un dispositivo"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permite que se envíen intentos a un administrador de dispositivos. Las aplicaciones normales nunca deberían necesitar este permiso."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"añadir o eliminar un administrador de dispositivos"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permite añadir o eliminar administradores de dispositivos activos. No debe ser necesario para aplicaciones normales."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"cambiar orientación de la pantalla"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Permite que la aplicación cambie la rotación de la pantalla en cualquier momento. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"cambiar velocidad del puntero"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 4332cabf5ec4..31ccf4721825 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Lubab omanikul siduda vidina teenuse ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"seadme administraatoriga suhtlemine"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Võimaldab omanikul saata kavatsusi seadme administraatorile. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"seadme administraatori lisamine või eemaldamine"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Võimaldab omanikul lisada või eemaldada aktiivseid seadme administraatoreid. Tavarakenduste puhul ei tohiks see kunagi vajalik olla."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"muuda ekraani paigutust"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Võimaldab rakendusel muuta ekraani pööramist mis tahes ajal. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"kursorikiiruse muutmine"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index e5c230f276ed..8ea169ffcbc8 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"به دارنده اجازه میدهد که به رابط سطح بالای سرویس ابزارک متصل شود. هرگز برای برنامههای معمولی مورد نیاز نیست."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"تعامل با یک سرپرست دستگاه"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"به دارنده اجازه میدهد اهداف خود را به سرپرست دستگاه ارسال کند. برنامههای معمولی هیچگاه به این ویژگی نیازی ندارند."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"اضافه یا حذف سرپرست دستگاه"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"به دارنده اجازه میدهد سرپرستان دستگاه فعال را اضافه یا حذف کند.هرگز نباید برای برنامههای عادی مورد نیاز باشد."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"تغییر جهت صفحه"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"به برنامه اجازه میدهد تا چرخش صفحه را هر وقت بخواهد تغییر دهد. برای برنامههای عادی نیاز نیست."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"تغییر سرعت اشارهگر"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 7badf3197cb4..d4f992214a37 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Antaa sovelluksen sitoutua widget-palvelun ylemmän tason käyttöliittymään. Ei tavallisten sovelluksien käyttöön."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"kommunikoi laitteen järjestelmänvalvojan kanssa"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Antaa sovelluksen lähettää aikomuksia laitteen järjestelmänvalvojalle. Ei tavallisten sovellusten käyttöön."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"lisää tai poista laitteen järjestelmänvalvoja"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Haltija voi lisätä tai poistaa aktiivisen laitteen järjestelmänvalvojia. Tätä ei pitäisi tarvita tavallisille sovelluksille."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"muuta näytön suuntaa"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Antaa sovelluksen muuttaa näytön kiertoa milloin tahansa. Ei tavallisten sovellusten käyttöön."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"muuta osoittimen nopeutta"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index e0025397dfdc..ab3748c2fb96 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un service widget. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interagir avec l\'administrateur du périphérique"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permet à l\'application autorisée d\'envoyer des intentions à l\'administrateur de l\'appareil. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"ajouter ou supprimer un administrateur de l\'appareil"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permet à l\'application autorisée d\'ajouter ou de supprimer des administrateurs actifs de l\'appareil. Les applications standards ne devraient pas nécessiter cette autorisation."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"Changement d\'orientation de l\'écran"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Permet à l\'application de changer l\'orientation de l\'écran à tout moment. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"changer la vitesse du pointeur"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index a91c0aadcfa6..249623ebcebd 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"धारक को किसी विजेट सेवा के शीर्ष-स्तर इंटरफ़ेस से आबद्ध होने देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"किसी उपकरण व्यवस्थापक के साथ सहभागिता करें"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"धारक को किसी उपकरण व्यवस्थापक को उद्देश्य भेजने देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"उपकरण व्यवस्थापक को जोड़ें या निकालें"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"धारक को सक्रिय डिवाइस व्यवस्थापकों को जोड़ने या निकालने देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"स्क्रीन अभिविन्यास बदलें"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"एप्लिकेशन को किसी भी समय स्क्रीन का रोटेशन बदलने देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"सूचक गति बदलें"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 836906afe120..31e127178ab9 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Nositelju omogućuje vezanje uz sučelje najviše razine usluge widgeta. Ne bi smjelo biti potrebno za normalne aplikacije."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interakcija s administratorom uređaja"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Nositelju omogućuje slanje namjera administratoru uređaja. Ne bi smjelo biti potrebno za normalne aplikacije."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"dodavanje ili uklanjanje administratora uređaja"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Omogućuje nositelju dodavanje ili uklanjanje administratora aktivnih uređaja. Nikada ne bi trebalo biti potrebno za uobičajene aplikacije."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"promjena orijentacije zaslona"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Omogućuje aplikaciji promjenu rotacije zaslona u bilo kojem trenutku. Ne bi smjelo biti potrebno za normalne aplikacije."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"promjena brzine pokazivača"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 5836c2286ec8..590cd50a68d1 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Lehetővé teszi a használó számára, hogy csatlakozzon egy modulszolgáltatás legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szüksége."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"az eszközkezelő használata"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Lehetővé teszi a tulajdonos számára, hogy célokat küldjön egy eszközkezelőnek. A normál alkalmazásoknak erre soha nincs szüksége."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"eszközrendszergazda hozzáadása vagy eltávolítása"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Lehetővé teszi a tulajdonos számára, hogy aktív eszközrendszergazdákat adjon meg vagy távolítson el. A normál alkalmazásoknál erre soha nincs szükség."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"képernyő irányának módosítása"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Lehetővé teszi az alkalmazás számára a képernyő elforgatásának bármikori módosítását. A normál alkalmazásoknak erre soha nincs szüksége."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"mutató sebességének módosítása"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index e77dd175cc7e..c03ff0ca9c84 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi dari suatu layanan widget. Tidak pernah diperlukan oleh apl normal."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"berinteraksi dengan admin perangkat"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Mengizinkan pemegang mengirimkan tujuan kepada administrator perangkat. Tidak pernah diperlukan oleh apl normal."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"menambah atau menghapus admin perangkat"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Memungkinkan pemegang menambahkan atau menghapus administrator perangkat aktif. Tidak pernah dibutuhkan oleh aplikasi normal."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"ubah orientasi layar"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Mengizinkan apl mengubah rotasi layar kapan saja. Tidak pernah dibutuhkan oleh apl normal."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"ubah kecepatan penunjuk"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 015618105d41..cc09561d15f2 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Consente l\'associazione all\'interfaccia principale di un servizio widget. Non dovrebbe mai essere necessario per le normali applicazioni."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interazione con un amministratore dispositivo"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Consente l\'invio di intent a un amministratore del dispositivo. L\'autorizzazione non dovrebbe mai essere necessaria per le normali applicazioni."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"aggiungere o rimuovere un amministratore del dispositivo"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Consente al titolare di aggiungere o rimuovere gli amministratori attivi del dispositivo. Non dovrebbe mai essere necessario per le normali applicazioni."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"modifica orientamento dello schermo"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Consente all\'applicazione di cambiare la rotazione dello schermo in qualsiasi momento. Non dovrebbe mai essere necessario per le normali applicazioni."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"cambio velocità del puntatore"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 30ee51b3a5f1..96d873eccba5 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"מאפשר למשתמש לבצע איגוד לממשק הרמה העליונה של שירות Widget. הרשאה זו לעולם אינה נחוצה ליישומים רגילים."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"קיים אינטראקציה עם מנהל המכשיר"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"מאפשר למשתמש לשלוח כוונות למנהל התקנים. הרשאה זו לעולם אינה נחוצה ליישומים רגילים."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"הוספה או הסרה של מנהלי מכשיר"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"מאפשרת לבעלים להוסיף או להסיר מנהלי מכשיר פעילים. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"שנה את כיוון המסך"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"מאפשר ליישום לשנות את הסיבוב של המסך בכל עת. הרשאה זו לעולם אינה נחוצה ליישומים רגילים."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"שינוי מהירות המצביע"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index a4c7acb92e7d..7b995bf3cda4 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"ウィジェットサービスのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"デバイス管理者との通信"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"デバイス管理者へのintentの送信を所有者に許可します。通常のアプリでは不要です。"</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"端末の管理者の追加または削除"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"有効な端末の管理者を追加または削除することを所有者に許可します。通常のアプリでは不要です。"</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"画面の向きの変更"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"いつでも画面の向きを変更することをアプリに許可します。通常のアプリでは不要です。"</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"ポインタの速度の変更"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index afee08997864..f897fc9b6b54 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"권한을 가진 프로그램이 위젯 서비스에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"기기 관리자와 상호 작용"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"권한을 가진 프로그램이 기기 관리자에게 인텐트를 보낼 수 있도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"기기 관리자 추가 또는 삭제"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"권한을 가진 프로그램이 활성화된 기기의 관리자를 추가 또는 삭제하도록 합니다. 일반 앱에는 필요하지 않습니다."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"화면 방향 변경"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"앱이 언제든지 화면 회전을 변경할 수 있도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"포인터 속도 변경"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index 8ed428d37ec1..2b7f59ce58a1 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Leidžiama savininkui susisaistyti su aukščiausio lygio valdiklio paslaugos sąsaja. Įprastoms programoms to neturėtų prireikti."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"sąveikauti su įrenginio administratoriumi"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Leidžiama savininkui siųsti tikslus įrenginio administratoriui. Įprastoms programoms to neturėtų prireikti."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"pridėti arba pašalinti įrenginio administratorių"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Savininkui leidžiama pridėti aktyvių įrenginio administratorių arba juos pašalinti. Neturėtų reikėti įprastoms programoms."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"keisti ekrano padėtį"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Leidžiama programai bet kada kaitalioti ekraną. Įprastoms programoms to neturėtų prireikti."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"keisti žymiklio greitį"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 82d003886938..c39e597294aa 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Ļauj īpašniekam izveidot saiti ar logrīka pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"mijiedarboties ar ierīces administratoru"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Ļauj īpašniekam nosūtīt informāciju par nodomiem ierīces administratoram. Parastajām lietotnēm tas nekad nav nepieciešams."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"pievienot vai noņemt ierīces administratoru"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Ļauj īpašniekam pievienot vai noņemt aktīvos ierīces administratorus. Nekad nav nepieciešama parastām lietotnēm."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"mainīt ekrāna orientāciju"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Ļauj lietotnei jebkurā laikā mainīt ekrāna pozīciju. Parastajām lietotnēm tas nekad nav nepieciešams."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"Rādītāja ātruma mainīšana"</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index db81e013f893..581e8cb0e9ba 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -279,8 +279,8 @@ <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Membenarkan apl memindahkan tugasan ke latar depan dan latar belakang. Apl boleh melakukan ini tanpa input anda."</string> <string name="permlab_removeTasks" msgid="6821513401870377403">"hentikan apl yang sedang dijalankan"</string> <string name="permdesc_removeTasks" msgid="1394714352062635493">"Membenarkan apl untuk mengalih keluar tugasan dan melupuskan aplnya. Apl hasad boleh mengganggu tingkah laku apl lain."</string> - <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"urus susunan aktiviti"</string> - <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"Membenarkan apl menambah, membuang dan mengubah suai susunan aktiviti tempat apl lain berjalan. Apl hasad boleh mengganggu tingkah laku apl lain."</string> + <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"urus tindanan aktiviti"</string> + <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"Membenarkan apl menambah, mengalih keluar dan mengubah suai tindanan aktiviti tempat apl lain berjalan. Apl hasad boleh mengganggu tingkah laku apl lain."</string> <string name="permlab_startAnyActivity" msgid="2918768238045206456">"mulakan sebarang aktiviti"</string> <string name="permdesc_startAnyActivity" msgid="997823695343584001">"Membenarkan apl untuk memulakan apa-apa aktiviti, tanpa mengira perlindungan kebenaran atau keadaan eksport."</string> <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"tetapkan keserasian skrin"</string> @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan widget. Tidak sekali-kali diperlukan untuk apl biasa."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"berinteraksi dengan pentadbir peranti"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Membenarkan pemegang menghantar tujuan kepada pentadbir peranti. Tidak sekali-kali diperlukan untuk apl biasa."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"tambah atau alih keluar pentadbir peranti"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Membenarkan pemegang menambah atau mengalih keluar pentadbir peranti aktif. Tidak sekali-kali diperlukan untuk apl biasa."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"tukar orientasi skrin"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Membenarkan apl untuk menukar putaran skrin pada bila-bila masa. Tidak sekali-kali diperlukan untuk apl biasa."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"tukar kelajuan penuding"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index be8745212a38..892abfcda176 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Lar innehaveren binde seg til det øverste nivået av grensesnittet for en modultjeneste. Skal aldri være nødvendig for vanlige apper."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"kommuniser med enhetsadministrator"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Lar innehaveren sende hensikter til en enhetsadministrator. Skal aldri være nødvendig for normale apper."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"legge til eller fjerne en enhetsadministrator"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Tillater innehaveren å legge til eller fjerne aktive enhetsadministratorer. Dette skal aldri være nødvendig for vanlige apper."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"snu skjermen"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Gir appen tillatelse til når som helst å endre rotasjonen av skjermen. Skal aldri være nødvendig for vanlige apper."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"endre pekerhastighet"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 12ec61fbe98b..9058386dc2b2 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Hiermee wordt de houder toegestaan verbinding te maken met de hoofdinterface van een widgetservice. Nooit vereist voor normale apps."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interactie met apparaatbeheer"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Hiermee kan de houder intenties verzenden naar een apparaatbeheerder. Nooit vereist voor normale apps."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"een apparaatbeheerder toevoegen of verwijderen"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Hiermee kan de rechtenhouder actieve apparaatbeheerders toevoegen of verwijderen. Nooit vereist voor normale apps."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"schermstand wijzigen"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Hiermee kan de app de rotatie van het scherm op elk moment wijzigen. Nooit vereist voor normale apps."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"aanwijzersnelheid wijzigen"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 64227ed926fa..5d92367c63b2 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi widżetów. Nie powinno być nigdy potrzebne w przypadku zwykłych aplikacji."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interakcja z administratorem urządzenia"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Zezwala na wysyłanie intencji do administratora urządzenia. Nie powinno być nigdy potrzebne w przypadku zwykłych aplikacji."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"dodaj lub usuń administratora urządzenia"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Umożliwia właścicielowi dodawanie i usuwanie aktywnych administratorów urządzenia. Ta opcja nie jest wykorzystywana w przypadku standardowych aplikacji."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"zmienianie orientacji ekranu"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Pozwala aplikacji na zmianę obrotu ekranu w dowolnym momencie. To uprawnienie nie powinno być potrzebne zwykłym aplikacjom."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"zmiana szybkości wskaźnika"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 35e10bc07972..c005ab503e17 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permite que o titular vincule a interface de nível superior de um serviço de widget. Nunca deverá ser necessário para aplicações normais."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interagir com um administrador do dispositivo"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permite ao titular enviar intenções para um administrador do aparelho. Nunca deverá ser necessário para aplicações normais."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"adicionar ou remover um administrador de dispositivos"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permite que o titular adicione ou remova administradores de dispositivos ativos. Nunca deverá ser necessário para aplicações normais."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"mudar orientação do ecrã"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Permite que a aplicação altere a rotação do ecrã em qualquer momento. Nunca deve ser necessário para aplicações normais."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"alterar a veloc. do ponteiro"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 5910c9b25508..f321d555b10a 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permite que o proprietário utilize a interface de nível superior de um serviço de widget. Nunca deve ser necessário para aplicativos normais."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interagir com o administrador de um dispositivo"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permite que o proprietário envie tentativas ao administrador de um aparelho. Nunca deve ser necessário para aplicativos normais."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"adicionar ou remover um administrador do dispositivo"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permite que o proprietário adicione ou remova administradores do dispositivo ativos. Não deve ser necessário para aplicativos comuns."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"alterar orientação da tela"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Permite que o aplicativo gire a tela a qualquer momento. Nunca deve ser necessário para aplicativos normais."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"alterar velocidade do ponteiro"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 46fa378cd7bb..72727ac1f5fa 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -279,10 +279,8 @@ <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Permite aplicaţiei să mute activităţile în prim-plan şi în fundal. Aplicaţia poate face acest lucru fără aportul dvs."</string> <string name="permlab_removeTasks" msgid="6821513401870377403">"oprire aplicaţii care rulează"</string> <string name="permdesc_removeTasks" msgid="1394714352062635493">"Permite aplicaţiei să elimine sarcini şi să închidă aplicaţiile corespunzătoare acestora. Aplicaţiile rău intenţionate pot perturba comportamentul altor aplicaţii."</string> - <!-- no translation found for permlab_manageActivityStacks (7391191384027303065) --> - <skip /> - <!-- no translation found for permdesc_manageActivityStacks (1615881933034084440) --> - <skip /> + <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"gestionarea grupurilor de activități"</string> + <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"Permite aplicației să adauge, să elimine și să modifice grupuri de activități în care rulează alte aplicații. Aplicațiile rău-intenționate pot perturba comportamentul altor aplicații."</string> <string name="permlab_startAnyActivity" msgid="2918768238045206456">"începe orice activitate"</string> <string name="permdesc_startAnyActivity" msgid="997823695343584001">"Permite aplicaţiei să înceapă orice activitate, indiferent de protecţia permisiunii şi de starea de export."</string> <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"setaţi compatibilitatea ecranului"</string> @@ -360,14 +358,10 @@ <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Permite proprietarului să se conecteze la interfaţa de nivel superior a unei metode de introducere. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string> <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"conectare la un serviciu de accesibilitate"</string> <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Permite proprietarului să se conecteze la interfaţa de nivel superior a unui serviciu de accesibilitate. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string> - <!-- no translation found for permlab_bindPrintService (8462815179572748761) --> - <skip /> - <!-- no translation found for permdesc_bindPrintService (7960067623209111135) --> - <skip /> - <!-- no translation found for permlab_accessAllPrintJobs (1120792468465711159) --> - <skip /> - <!-- no translation found for permdesc_accessAllPrintJobs (2978185311041864762) --> - <skip /> + <string name="permlab_bindPrintService" msgid="8462815179572748761">"conectarea la un serviciu de printare"</string> + <string name="permdesc_bindPrintService" msgid="7960067623209111135">"Permite proprietarului să se conecteze la interfața de nivel superior a unui serviciu de printare. Nu ar trebui să fie necesară pentru aplicațiile obișnuite."</string> + <string name="permlab_accessAllPrintJobs" msgid="1120792468465711159">"acces la toate procesele de printare"</string> + <string name="permdesc_accessAllPrintJobs" msgid="2978185311041864762">"Permite proprietarului să acceseze procesele de printare create de o altă aplicație. Nu ar trebui să fie necesară pentru aplicațiile obișnuite."</string> <string name="permlab_bindTextService" msgid="7358378401915287938">"conectare la un serviciu text"</string> <string name="permdesc_bindTextService" msgid="8151968910973998670">"Permite proprietarului să se conecteze la o interfaţă de nivel superior a unui serviciu text (de ex., SpellCheckerService). Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string> <string name="permlab_bindVpnService" msgid="4708596021161473255">"conectare la un serviciu VPN"</string> @@ -378,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permite proprietarului să se conecteze la interfaţa de nivel superior a unui serviciu widget. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interacţionare cu administratorul unui dispozitiv"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permite proprietarului să trimită intenţii către un administrator al dispozitivului. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"adăugarea sau eliminarea unui administrator de dispozitiv"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permite proprietarului să adauge sau să elimine administratorii activi ai dispozitivului. Nu ar trebui să fie necesară pentru aplicațiile obișnuite."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"modificare orientare ecran"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Permite aplicaţiei să modifice rotaţia ecranului în orice moment. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"modifică viteza indicatorului"</string> @@ -474,10 +466,8 @@ <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite aplicaţiei să utilizeze funcţiile de nivel redus SurfaceFlinger."</string> <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"citire zonă tampon de cadre"</string> <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permite aplicaţiei să citească conţinutul zonei-tampon a cadrului."</string> - <!-- no translation found for permlab_accessInputFlinger (5348635270689553857) --> - <skip /> - <!-- no translation found for permdesc_accessInputFlinger (2104864941201226616) --> - <skip /> + <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"acces la InputFlinger"</string> + <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Permite aplicației să utilizeze funcțiile de nivel redus InputFlinger."</string> <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configurează afişaje Wi-Fi"</string> <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Permite aplicaţiei să configureze şi să se conecteze la afişaje Wi-Fi."</string> <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"controlează afişaje Wi-Fi"</string> @@ -647,18 +637,14 @@ <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"Permite aplicaţiei să gestioneze politicile de reţea şi să definească regulile specifice aplicaţiilor."</string> <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"modificaţi modul de calcul al utilizării reţelei"</string> <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"Permite aplicaţiei să modifice modul în care este calculată utilizarea reţelei pentru aplicaţii. Nu se utilizează de aplicaţiile obişnuite."</string> - <!-- no translation found for permlab_markNetworkSocket (3658527214914959749) --> - <skip /> - <!-- no translation found for permdesc_markNetworkSocket (7655568433696356578) --> - <skip /> + <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"modificarea mărcilor socketurilor"</string> + <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"Permite aplicației să modifice mărcile socketurilor pentru rutare."</string> <string name="permlab_accessNotifications" msgid="7673416487873432268">"accesare notificări"</string> <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite aplicației să recupereze, să examineze și să șteargă notificări, inclusiv pe cele postate de alte aplicații."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"conectare la un serviciu de citire a notificărilor"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite proprietarului să se conecteze la interfața de nivel superior a unui serviciu de citire a notificărilor. În mod normal aplicațiile nu ar trebui să aibă nevoie de această permisiune."</string> - <!-- no translation found for permlab_invokeCarrierSetup (3699600833975117478) --> - <skip /> - <!-- no translation found for permdesc_invokeCarrierSetup (4159549152529111920) --> - <skip /> + <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"apelarea aplicației de configurare furnizată de operator"</string> + <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permite proprietarului să apeleze aplicația de configurare furnizată de operator. Nu ar trebui să fie necesară pentru aplicațiile obișnuite."</string> <string name="policylab_limitPassword" msgid="4497420728857585791">"Setaţi reguli pentru parolă"</string> <string name="policydesc_limitPassword" msgid="3252114203919510394">"Stabiliţi lungimea şi tipul de caractere permise în parolele pentru deblocarea ecranului."</string> <string name="policylab_watchLogin" msgid="914130646942199503">"Monitorizaţi încercările de deblocare a ecranului"</string> @@ -768,8 +754,7 @@ <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string> <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string> <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string> - <!-- no translation found for imProtocolGoogleTalk (493902321140277304) --> - <skip /> + <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Hangouts"</string> <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string> <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string> <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string> @@ -1531,102 +1516,56 @@ <string name="app_no_restricted_accounts" msgid="5739463249673727736">"Această aplicație nu acceptă conturi pentru profilurile cu permisiuni limitate"</string> <string name="app_not_found" msgid="3429141853498927379">"Nicio aplicație pentru gestionarea acestei acțiuni"</string> <string name="revoke" msgid="5404479185228271586">"Revocați"</string> - <!-- no translation found for mediaSize_iso_a0 (7875427489420821793) --> - <skip /> - <!-- no translation found for mediaSize_iso_a1 (3760734499050875356) --> - <skip /> - <!-- no translation found for mediaSize_iso_a2 (5973266378020144382) --> - <skip /> - <!-- no translation found for mediaSize_iso_a3 (1373407105687300884) --> - <skip /> - <!-- no translation found for mediaSize_iso_a4 (6689772807982597254) --> - <skip /> - <!-- no translation found for mediaSize_iso_a5 (5353549652015741040) --> - <skip /> - <!-- no translation found for mediaSize_iso_a6 (8585038048674911907) --> - <skip /> - <!-- no translation found for mediaSize_iso_a7 (6641836716963839119) --> - <skip /> - <!-- no translation found for mediaSize_iso_a8 (7571139437465693355) --> - <skip /> - <!-- no translation found for mediaSize_iso_a9 (1378455891957115079) --> - <skip /> - <!-- no translation found for mediaSize_iso_a10 (2480747457429475344) --> - <skip /> - <!-- no translation found for mediaSize_iso_b0 (3965935097661108039) --> - <skip /> - <!-- no translation found for mediaSize_iso_b1 (2505753285010115437) --> - <skip /> - <!-- no translation found for mediaSize_iso_b2 (8763874709859458453) --> - <skip /> - <!-- no translation found for mediaSize_iso_b3 (4210506688191764076) --> - <skip /> - <!-- no translation found for mediaSize_iso_b4 (5749404165888526034) --> - <skip /> - <!-- no translation found for mediaSize_iso_b5 (7640627414621904733) --> - <skip /> - <!-- no translation found for mediaSize_iso_b6 (7342988864712748544) --> - <skip /> - <!-- no translation found for mediaSize_iso_b7 (5069844065235382429) --> - <skip /> - <!-- no translation found for mediaSize_iso_b8 (7316818922278779774) --> - <skip /> - <!-- no translation found for mediaSize_iso_b9 (5414727094026532341) --> - <skip /> - <!-- no translation found for mediaSize_iso_b10 (5251253731832048185) --> - <skip /> - <!-- no translation found for mediaSize_iso_c0 (4003138342671964217) --> - <skip /> - <!-- no translation found for mediaSize_iso_c1 (1935188063393553008) --> - <skip /> - <!-- no translation found for mediaSize_iso_c2 (3197307969712069904) --> - <skip /> - <!-- no translation found for mediaSize_iso_c3 (4335826087321913508) --> - <skip /> - <!-- no translation found for mediaSize_iso_c4 (3745639598281015005) --> - <skip /> - <!-- no translation found for mediaSize_iso_c5 (8269457765822791013) --> - <skip /> - <!-- no translation found for mediaSize_iso_c6 (566666105260346930) --> - <skip /> - <!-- no translation found for mediaSize_iso_c7 (8678413180782608498) --> - <skip /> - <!-- no translation found for mediaSize_iso_c8 (8392376206627041730) --> - <skip /> - <!-- no translation found for mediaSize_iso_c9 (9191613372324845405) --> - <skip /> - <!-- no translation found for mediaSize_iso_c10 (7327709699184920822) --> - <skip /> - <!-- no translation found for mediaSize_na_letter (4191805615829472953) --> - <skip /> - <!-- no translation found for mediaSize_na_gvrnmt_letter (7853382192649405507) --> - <skip /> - <!-- no translation found for mediaSize_na_legal (6697982988283823150) --> - <skip /> - <!-- no translation found for mediaSize_na_junior_legal (3727743969902758948) --> - <skip /> - <!-- no translation found for mediaSize_na_ledger (281871464896601236) --> - <skip /> - <!-- no translation found for mediaSize_na_tabloid (5775966416333578127) --> - <skip /> - <!-- no translation found for write_fail_reason_cancelled (7091258378121627624) --> - <skip /> - <!-- no translation found for write_fail_reason_cannot_write (8132505417935337724) --> - <skip /> - <!-- no translation found for restr_pin_enter_pin (3395953421368476103) --> - <skip /> - <!-- no translation found for restr_pin_enter_old_pin (1462206225512910757) --> - <skip /> - <!-- no translation found for restr_pin_enter_new_pin (5959606691619959184) --> - <skip /> - <!-- no translation found for restr_pin_confirm_pin (8501523829633146239) --> - <skip /> - <!-- no translation found for restr_pin_create_pin (8017600000263450337) --> - <skip /> - <!-- no translation found for restr_pin_error_doesnt_match (2224214190906994548) --> - <skip /> - <!-- no translation found for restr_pin_error_too_short (8173982756265777792) --> - <skip /> - <!-- no translation found for restr_pin_countdown:one (4835639969503729874) --> - <!-- no translation found for restr_pin_countdown:other (8030607343223287654) --> + <string name="mediaSize_iso_a0" msgid="7875427489420821793">"ISO A0"</string> + <string name="mediaSize_iso_a1" msgid="3760734499050875356">"ISO A1"</string> + <string name="mediaSize_iso_a2" msgid="5973266378020144382">"ISO A2"</string> + <string name="mediaSize_iso_a3" msgid="1373407105687300884">"ISO A3"</string> + <string name="mediaSize_iso_a4" msgid="6689772807982597254">"ISO A4"</string> + <string name="mediaSize_iso_a5" msgid="5353549652015741040">"ISO A5"</string> + <string name="mediaSize_iso_a6" msgid="8585038048674911907">"ISO A6"</string> + <string name="mediaSize_iso_a7" msgid="6641836716963839119">"ISO A7"</string> + <string name="mediaSize_iso_a8" msgid="7571139437465693355">"ISO A8"</string> + <string name="mediaSize_iso_a9" msgid="1378455891957115079">"ISO A9"</string> + <string name="mediaSize_iso_a10" msgid="2480747457429475344">"ISO A10"</string> + <string name="mediaSize_iso_b0" msgid="3965935097661108039">"ISO B0"</string> + <string name="mediaSize_iso_b1" msgid="2505753285010115437">"ISO B1"</string> + <string name="mediaSize_iso_b2" msgid="8763874709859458453">"ISO B2"</string> + <string name="mediaSize_iso_b3" msgid="4210506688191764076">"ISO B3"</string> + <string name="mediaSize_iso_b4" msgid="5749404165888526034">"ISO B4"</string> + <string name="mediaSize_iso_b5" msgid="7640627414621904733">"ISO B5"</string> + <string name="mediaSize_iso_b6" msgid="7342988864712748544">"ISO B6"</string> + <string name="mediaSize_iso_b7" msgid="5069844065235382429">"ISO B7"</string> + <string name="mediaSize_iso_b8" msgid="7316818922278779774">"ISO B8"</string> + <string name="mediaSize_iso_b9" msgid="5414727094026532341">"ISO B9"</string> + <string name="mediaSize_iso_b10" msgid="5251253731832048185">"ISO B10"</string> + <string name="mediaSize_iso_c0" msgid="4003138342671964217">"ISO C0"</string> + <string name="mediaSize_iso_c1" msgid="1935188063393553008">"ISO C1"</string> + <string name="mediaSize_iso_c2" msgid="3197307969712069904">"ISO C2"</string> + <string name="mediaSize_iso_c3" msgid="4335826087321913508">"ISO C3"</string> + <string name="mediaSize_iso_c4" msgid="3745639598281015005">"ISO C4"</string> + <string name="mediaSize_iso_c5" msgid="8269457765822791013">"ISO C5"</string> + <string name="mediaSize_iso_c6" msgid="566666105260346930">"ISO C6"</string> + <string name="mediaSize_iso_c7" msgid="8678413180782608498">"ISO C7"</string> + <string name="mediaSize_iso_c8" msgid="8392376206627041730">"ISO C8"</string> + <string name="mediaSize_iso_c9" msgid="9191613372324845405">"ISO C9"</string> + <string name="mediaSize_iso_c10" msgid="7327709699184920822">"ISO C10"</string> + <string name="mediaSize_na_letter" msgid="4191805615829472953">"Letter"</string> + <string name="mediaSize_na_gvrnmt_letter" msgid="7853382192649405507">"Government Letter"</string> + <string name="mediaSize_na_legal" msgid="6697982988283823150">"Legal"</string> + <string name="mediaSize_na_junior_legal" msgid="3727743969902758948">"Junior Legal"</string> + <string name="mediaSize_na_ledger" msgid="281871464896601236">"Ledger"</string> + <string name="mediaSize_na_tabloid" msgid="5775966416333578127">"Tabloid"</string> + <string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Anulat"</string> + <string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Eroare la scrierea conținutului"</string> + <string name="restr_pin_enter_pin" msgid="3395953421368476103">"Introduceți codul PIN"</string> + <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Codul PIN actual"</string> + <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Codul PIN nou"</string> + <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Confirmați noul cod PIN"</string> + <string name="restr_pin_create_pin" msgid="8017600000263450337">"Creați un cod PIN pentru modificarea restricțiilor"</string> + <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Codurile PIN nu se potrivesc. Încercați din nou."</string> + <string name="restr_pin_error_too_short" msgid="8173982756265777792">"Codul PIN este prea scurt. Trebuie să aibă cel puțin 4 cifre."</string> + <plurals name="restr_pin_countdown"> + <item quantity="one" msgid="4835639969503729874">"PIN incorect. Reîncercați în 1 sec."</item> + <item quantity="other" msgid="8030607343223287654">"PIN incorect. Reîncercați în <xliff:g id="COUNT">%d</xliff:g> sec."</item> + </plurals> </resources> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index aa11bb716de4..b3f1f94acf88 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Приложение сможет подключаться к базовому интерфейсу службы виджетов. Это разрешение не используется обычными приложениями."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"Взаимодействие с администратором устройства"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Приложение сможет отправлять объекты intent администратору устройства. Это разрешение не используется обычными приложениями."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"Добавление/удаление администратора устройства"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Владелец сможет добавлять и удалять администраторов устройства (используется лишь в некоторых приложениях)."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"Изменение ориентации экрана"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Приложение сможет менять ориентацию экрана. Это разрешение не используется обычными приложениями."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"Изменение скорости указателя"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index e424e179e6a1..3ef8c86cd068 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania služby miniaplikácií. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"komunikovať so správcom zariadenia"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Umožňuje držiteľovi odosielať informácie správcovi zariadenia. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"pridanie alebo odstránenie správcu zariadenia"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Umožňuje držiteľovi pridať alebo odstrániť správcov aktívnych zariadení. Bežné aplikácie by toto povolenie nemali nikdy potrebovať."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"zmena orientácie obrazovky"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Umožňuje aplikácii kedykoľvek zmeniť otáčanie obrazovky. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"zmena rýchlosti ukazovateľa"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index ca56c7801766..d93be86da3dc 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Lastniku omogoča povezovanje z vmesnikom storitve pripomočka najvišje ravni. Tega ni treba nikoli uporabiti za navadne programe."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interakcija s skrbnikom naprave"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Omogoča lastniku, da pošlje namere skrbniku naprave. Nikoli se ne uporablja za navadne programe."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"dodajanje ali odstranjevanje skrbnikov naprave"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Imetniku omogoča, da doda ali odstrani aktivne skrbnike naprave. Normalne aplikacije tega načeloma ne potrebujejo."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"spreminjanje usmerjenosti zaslona"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Programu omogoča, da kadar koli zasuka zaslon. Ne uporabljajte za navadne programe."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"spreminjanje hitrosti kazalca"</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 39965849dbb5..2ae21039d827 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Дозвољава власнику да се обавеже на интерфејс услуге виџета највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"интеракција са администратором уређаја"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Омогућава да власник шаље своје намере администратору уређаја. Уобичајене апликације никада не би требало да је користе."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"додавање или уклањање администратора уређаја"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Дозвољава власнику да додаје или уклања активне администраторе уређаја. Уобичајене апликације никада не би требало да је користе."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"промена положаја екрана"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Дозвољава апликацији да у сваком тренутку промени ротацију екрана. Уобичајене апликације никада не би требало да је користе."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"промена брзине показивача"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 96729f4c3c31..4f370b45b008 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en widget. Ska inte behövas för vanliga appar."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"arbeta med en enhetsadministratör"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Tillåter att innehavaren skickar avsikter till en enhetsadministratör. Vanliga appar behöver aldrig göra detta."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"lägga till eller ta bort en enhetsadministratör"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Innehavaren får lägga till eller ta bort aktiva enhetsadministratörer. Detta ska normalt inte behövas för vanliga appar."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"ändra bildskärmens rikting"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Gör att appen när som helst kan ändra skärmläget. Behövs inte för vanliga appar."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"ändra markörens hastighet"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index d66a966e2179..cbbdbf910893 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Inaruhusu mmiliki kushurutisha kusano ya kiwango cha juu ya huduma ya wijeti. Haipaswi kuhitajika kwa programu za kawaida."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"jiunge na msimamizi wa kifaa"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Inamruhusu mmiliki kutuma malengo kwa msimamizi wa kifaa. Haipaswi kuhitajika kwa programu za kawaida."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"ongeza au ondoa msimamizi wa kifaa"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Inaruhusu mmiliki kuongeza au kuondoa wasimamizi wa kifaa waliopo. Kamwe kisihitajike kwa ajili ya programu za kawaida."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"badilisha uelekezo wa skrini"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Inaruhusu programu kubadilisha mzunguko wa skrini wakati wowote. Kamwe hazihitajiki kwa programu za kawaida."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"Badilisha kasi ya pointa"</string> @@ -1190,7 +1188,7 @@ <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Usiruhusu Kamwe"</string> <string name="sim_removed_title" msgid="6227712319223226185">"SIM kadi imeondolewa"</string> <string name="sim_removed_message" msgid="2333164559970958645">"mtandao wa simu hutapatika hadi uanzishe upya na SIM kadi halali iliyoingizwa."</string> - <string name="sim_done_button" msgid="827949989369963775">"Kwisha"</string> + <string name="sim_done_button" msgid="827949989369963775">"Nimemaliza"</string> <string name="sim_added_title" msgid="3719670512889674693">"SIM kadi imeongezwa"</string> <string name="sim_added_message" msgid="6599945301141050216">"Anzisha upya kifaa chako ili kufikia mtandao wa simu."</string> <string name="sim_restart_button" msgid="4722407842815232347">"Anza upya"</string> @@ -1283,7 +1281,7 @@ <string name="ime_action_search" msgid="658110271822807811">"Tafuta"</string> <string name="ime_action_send" msgid="2316166556349314424">"Tuma"</string> <string name="ime_action_next" msgid="3138843904009813834">"Ifuatayo"</string> - <string name="ime_action_done" msgid="8971516117910934605">"Kwisha"</string> + <string name="ime_action_done" msgid="8971516117910934605">"Nimemaliza"</string> <string name="ime_action_previous" msgid="1443550039250105948">"Iliyotangulia"</string> <string name="ime_action_default" msgid="2840921885558045721">"Tekeleza"</string> <string name="dial_number_using" msgid="5789176425167573586">"Piga nambari "\n" kwa kutumia <xliff:g id="NUMBER">%s</xliff:g>"</string> @@ -1330,7 +1328,7 @@ <item quantity="one" msgid="8167147081136579439">"Linganisho 1"</item> <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> ya <xliff:g id="TOTAL">%d</xliff:g>"</item> </plurals> - <string name="action_mode_done" msgid="7217581640461922289">"Kwisha"</string> + <string name="action_mode_done" msgid="7217581640461922289">"Nimemaliza"</string> <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"Inaondoa hifadhi ya USB..."</string> <string name="progress_unmounting" product="default" msgid="1327894998409537190">"Inaondoa kadi ya SD..."</string> <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"Inafuta hifadhi ya USB..."</string> @@ -1381,7 +1379,7 @@ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Ghairi"</string> <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Futa"</string> - <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Imefanyika"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Nimemaliza"</string> <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modi ya mabadiliko"</string> <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Songa"</string> <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> @@ -1456,7 +1454,7 @@ <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="wireless_display_route_description" msgid="9070346425023979651">"Uonyeshaji usiotumia waya"</string> - <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Kwisha"</string> + <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Nimemaliza"</string> <string name="media_route_button_content_description" msgid="5758553567065145276">"Towe la midia"</string> <string name="media_route_status_scanning" msgid="7279908761758293783">"Inatambaza..."</string> <string name="media_route_status_connecting" msgid="6422571716007825440">"Inaunganisha..."</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 3024e0dae608..9f194afb8d7f 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"อนุญาตให้ผู้ใช้เชื่อมโยงกับส่วนติดต่อผู้ใช้ระดับสูงสุดของบริการวิดเจ็ต ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"ติดต่อกับผู้ดูแลอุปกรณ์"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"อนุญาตให้ผู้ใช้ส่งการติดต่อไปยังโปรแกรมควบคุมอุปกรณ์ ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"เพิ่มหรือลบผู้ดูแลระบบอุปกรณ์"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"อนุญาตให้เจ้าของเพิ่มหรือลบผู้ดูแลระบบอุปกรณ์ที่ใช้งาน ไม่ควรต้องใช้สำหรับแอปปกติ"</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"เปลี่ยนการวางแนวหน้าจอ"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"อนุญาตให้แอปพลิเคชันเปลี่ยนการหมุนของหน้าจอได้ตลอดเวลา ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"เปลี่ยนความเร็วของตัวชี้"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index d338759512f7..92369ff7a3f8 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Pinapayagan ang may-hawak na sumailalim sa nangungunang interface ng serbisyo ng widget. Hindi kailanman dapat na kailanganin para sa normal na apps."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"makipag-ugnay sa tagapangasiwa ng device"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Pinapayagan ang mga may-ari na magpadala ng mga layunin sa administrator ng device. Hindi kailanman dapat na kailanganin para sa normal na apps."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"magdagdag o mag-alis ng admin ng device"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Pinapayagan ang may-ari na magdagdag o mag-alis ng mga aktibong administrator ng device. Hindi dapat kailanganin kailanman para sa normal na apps."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"baguhin ang orientation ng screen"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Pinapayagan ang app na baguhin ang pag-ikot ng screen anumang oras. Hindi kailanman dapat na kailanganin para sa normal na apps."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"baguhin ang bilis ng pointer"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 1fd4a36b1498..fa0ee82f041f 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Cihazın sahibine bir widget hizmetinin en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"bir cihaz yöneticisi ile etkileşimde bulun"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Cihazın sahibinin cihaz yöneticisine amaç göndermesine izin verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"cihaz yöneticisi ekle veya kaldır"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"İzin sahibine, etkin cihaz yöneticileri ekleyip kaldırma izni verir. Normal uygulamalar için hiçbir zaman gerekmez."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"ekran yönünü değiştir"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Uygulamaya, istediği zaman ekran dönüşünü değiştirme izni verir. Normal uygulamalar için gerekli değildir."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"işaretçi hızını değiştir"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 23d01b13715e..cbe8a26c42a1 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Дозволяє власникові прив’язуватися до інтерфейсу верхнього рівня служби віджетів. Ніколи не застосовується для звичайних програм."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"взаємодіяти з адмін. пристрою"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Дозволяє власнику надсилати задавані функції адміністратору пристрою. Ніколи не застосовується для звичайних програм."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"додавати чи вилучати адміністраторів пристрою"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Дозволяє власнику додавати чи вилучати активних адміністраторів пристрою. Ніколи не застосовується для звичайних програм."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"змінювати орієнтацію екрана"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Дозволяє програмі будь-коли змінювати обертання екрана. Ніколи не застосовується для звичайних програм."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"змінювати швидкість указівника"</string> @@ -1567,7 +1565,7 @@ <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN-коди не збігаються. Повторіть спробу."</string> <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN-код закороткий. Має бути принаймні 4 цифри."</string> <plurals name="restr_pin_countdown"> - <item quantity="one" msgid="4835639969503729874">"Неправильний PIN. Повторіть через 1 с"</item> - <item quantity="other" msgid="8030607343223287654">"Неправильний PIN. Повторіть через <xliff:g id="COUNT">%d</xliff:g> с"</item> + <item quantity="one" msgid="4835639969503729874">"Неправильний PIN. Повторіть через 1 с."</item> + <item quantity="other" msgid="8030607343223287654">"Неправильний PIN. Повторіть через <xliff:g id="COUNT">%d</xliff:g> с."</item> </plurals> </resources> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index e25b3a6f200f..348b17e649f7 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của dịch vụ tiện ích con. Không cần thiết cho các ứng dụng thông thường."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"tương tác với quản trị viên thiết bị"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Cho phép chủ sở hữu gửi các ý định đến quản trị viên thiết bị. Không cần thiết cho các ứng dụng thông thường."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"thêm hoặc xóa quản trị viên thiết bị"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Cho phép chủ sở hữu thêm hoặc xóa quản trị viên thiết bị đang hoạt động. Không cần thiết cho các ứng dụng thông thường."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"thay đổi hướng màn hình"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Cho phép ứng dụng thay đổi độ xoay màn hình bất cứ lúc nào. Không cần thiết cho các ứng dụng thông thường."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"thay đổi tốc độ con trỏ"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 0ff3456e6cfd..8615b8b101ac 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"允许应用绑定到小部件服务的顶级接口。普通应用绝不需要此权限。"</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"与设备管理器交互"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"允许用户将意向发送给设备管理员。普通应用绝不需要此权限。"</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"添加或删除设备管理员"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"允许应用添加或删除有效的设备管理员。普通应用绝不需要此权限。"</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"更改屏幕显示方向"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"允许应用随时更改屏幕的旋转状态。普通应用绝不需要此权限。"</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"更改指针速度"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 009bb5ce9f29..b576c84e154c 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"允許應用程式繫結至小工具服務的頂層介面 (一般應用程式不需使用)。"</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"與裝置管理員互動"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"允許應用程式將調用請求傳送至裝置管理員 (一般應用程式不需使用)。"</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"新增或移除裝置管理員"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"允許應用程式新增或移除有效的裝置管理員 (一般應用程式並不需要)。"</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"變更螢幕顯示方向"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"允許應用程式隨時變更螢幕旋轉狀態 (一般應用程式不需使用)。"</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"變更指標速度"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index ccab02fca3db..019a74a4a3f3 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -372,10 +372,8 @@ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Ivumela umbambi ukuhlanganisa uxhumano nomsebenzisi kwezinga eliphezulu lensizakalo yesinqunjwana. Akusoze kwadingeka kwezinhlelo zokusebenza ezivamile."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"xhumana nomphathi wedivaysi"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Ivumela ummeli ukuthumela okuqukethwe kumphathi wedivaysi. Akusoze kwadingeka kwizinhlelo zokusebenza ezivamile."</string> - <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) --> - <skip /> - <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) --> - <skip /> + <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"engeza noma susa umlawuli wedivayisi"</string> + <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Ivumela umnikazi ukuthi angeze noma asuse abalawuli bedivayisi esebenzayo. Akumele idingelwe izinhlelo zokusebenza ezijwayelekile."</string> <string name="permlab_setOrientation" msgid="3365947717163866844">"shintsha ukujikeleza kwesikrini"</string> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Ivumela insiza ukuthi iguqule ukujikeleza kweskrini nganoma isiphi isikhathi. Akudingakeli izinsiza ezejwayelekile."</string> <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"guqula isivinini sesikhombi"</string> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 8e86950f68ad..321fd9e5b8e3 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -196,6 +196,7 @@ <item>"mobile_ims,11,0,2,60000,true"</item> <item>"mobile_cbs,12,0,2,60000,true"</item> <item>"wifi_p2p,13,1,0,-1,true"</item> + <item>"mobile_ia,14,0,2,-1,true"</item> </string-array> <!-- Array of ConnectivityManager.TYPE_xxxx constants for networks that may only @@ -204,6 +205,7 @@ <item>10</item> <item>11</item> <item>12</item> + <item>14</item> </integer-array> <!-- This string array should be overridden by the device to present a list of radio @@ -226,6 +228,7 @@ <item>10</item> <!-- TYPE_MOBILE_FOTA --> <item>11</item> <!-- TYPE_MOBILE_IMS --> <item>12</item> <!-- TYPE_MOBILE_CBS --> + <item>14</item> <!-- TYPE_MOBILE_IA --> </integer-array> <!-- The maximum duration (in milliseconds) we expect a network transition to take --> diff --git a/data/keyboards/Vendor_0a5c_Product_8502.kl b/data/keyboards/Vendor_0a5c_Product_8502.kl deleted file mode 100644 index 008496969af1..000000000000 --- a/data/keyboards/Vendor_0a5c_Product_8502.kl +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (C) 2013 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. - -# Snakebyte - -key 289 BUTTON_A -key 290 BUTTON_B -key 288 BUTTON_X -key 291 BUTTON_Y -key 292 BUTTON_L1 -key 293 BUTTON_R1 -key 294 BUTTON_L2 -key 295 BUTTON_R2 -key 297 BUTTON_START -key 296 BUTTON_SELECT - -axis 0x00 X -axis 0x01 Y -axis 0x02 Z -axis 0x05 RZ -axis 0x10 HAT_X -axis 0x11 HAT_Y diff --git a/graphics/java/android/graphics/Path.java b/graphics/java/android/graphics/Path.java index 157c7d1470cd..ef858eb0c0bf 100644 --- a/graphics/java/android/graphics/Path.java +++ b/graphics/java/android/graphics/Path.java @@ -103,21 +103,106 @@ public class Path { } } - /** Enum for the ways a path may be filled - */ + /** + * The logical operations that can be performed when combining two paths. + * + * @see #op(Path, android.graphics.Path.Op) + * @see #op(Path, Path, android.graphics.Path.Op) + */ + public enum Op { + /** + * Subtract the second path from the first path. + */ + DIFFERENCE, + /** + * Intersect the two paths. + */ + INTERSECT, + /** + * Union (inclusive-or) the two paths. + */ + UNION, + /** + * Exclusive-or the two paths. + */ + XOR, + /** + * Subtract the first path from the second path. + */ + REVERSE_DIFFERENCE + } + + /** + * Set this path to the result of applying the Op to this path and the specified path. + * The resulting path will be constructed from non-overlapping contours. + * The curve order is reduced where possible so that cubics may be turned + * into quadratics, and quadratics maybe turned into lines. + * + * @param path The second operand (for difference, the subtrahend) + * + * @return True if operation succeeded, false otherwise and this path remains unmodified. + * + * @see Op + * @see #op(Path, Path, android.graphics.Path.Op) + */ + public boolean op(Path path, Op op) { + return op(this, path, op); + } + + /** + * Set this path to the result of applying the Op to the two specified paths. + * The resulting path will be constructed from non-overlapping contours. + * The curve order is reduced where possible so that cubics may be turned + * into quadratics, and quadratics maybe turned into lines. + * + * @param path1 The first operand (for difference, the minuend) + * @param path2 The second operand (for difference, the subtrahend) + * + * @return True if operation succeeded, false otherwise and this path remains unmodified. + * + * @see Op + * @see #op(Path, android.graphics.Path.Op) + */ + public boolean op(Path path1, Path path2, Op op) { + if (native_op(path1.mNativePath, path2.mNativePath, op.ordinal(), this.mNativePath)) { + isSimplePath = false; + rects = null; + return true; + } + return false; + } + + /** + * Enum for the ways a path may be filled. + */ public enum FillType { // these must match the values in SkPath.h + /** + * Specifies that "inside" is computed by a non-zero sum of signed + * edge crossings. + */ WINDING (0), + /** + * Specifies that "inside" is computed by an odd number of edge + * crossings. + */ EVEN_ODD (1), + /** + * Same as {@link #WINDING}, but draws outside of the path, rather than inside. + */ INVERSE_WINDING (2), + /** + * Same as {@link #EVEN_ODD}, but draws outside of the path, rather than inside. + */ INVERSE_EVEN_ODD(3); FillType(int ni) { nativeInt = ni; } + final int nativeInt; } - + // these must be in the same order as their native values static final FillType[] sFillTypeArray = { FillType.WINDING, @@ -644,24 +729,20 @@ public class Path { private static native void native_addRect(int nPath, float left, float top, float right, float bottom, int dir); private static native void native_addOval(int nPath, RectF oval, int dir); - private static native void native_addCircle(int nPath, float x, float y, - float radius, int dir); + private static native void native_addCircle(int nPath, float x, float y, float radius, int dir); private static native void native_addArc(int nPath, RectF oval, float startAngle, float sweepAngle); private static native void native_addRoundRect(int nPath, RectF rect, float rx, float ry, int dir); - private static native void native_addRoundRect(int nPath, RectF r, - float[] radii, int dir); - private static native void native_addPath(int nPath, int src, float dx, - float dy); + private static native void native_addRoundRect(int nPath, RectF r, float[] radii, int dir); + private static native void native_addPath(int nPath, int src, float dx, float dy); private static native void native_addPath(int nPath, int src); private static native void native_addPath(int nPath, int src, int matrix); - private static native void native_offset(int nPath, float dx, float dy, - int dst_path); + private static native void native_offset(int nPath, float dx, float dy, int dst_path); private static native void native_offset(int nPath, float dx, float dy); private static native void native_setLastPoint(int nPath, float dx, float dy); - private static native void native_transform(int nPath, int matrix, - int dst_path); + private static native void native_transform(int nPath, int matrix, int dst_path); private static native void native_transform(int nPath, int matrix); + private static native boolean native_op(int path1, int path2, int op, int result); private static native void finalizer(int nPath); } diff --git a/graphics/java/android/renderscript/ScriptIntrinsicColorMatrix.java b/graphics/java/android/renderscript/ScriptIntrinsicColorMatrix.java index 77b9385c3d49..68816277e157 100644 --- a/graphics/java/android/renderscript/ScriptIntrinsicColorMatrix.java +++ b/graphics/java/android/renderscript/ScriptIntrinsicColorMatrix.java @@ -21,15 +21,27 @@ import android.util.Log; /** * Intrinsic for applying a color matrix to allocations. * - * This has the same effect as loading each element and - * converting it to a {@link Element#F32_4}, multiplying the - * result by the 4x4 color matrix as performed by - * rsMatrixMultiply() and writing it to the output after - * conversion back to {@link Element#U8_4}. + * If the element type is {@link Element.DataType#UNSIGNED_8}, + * it is converted to {@link Element.DataType#FLOAT_32} and + * normalized from (0-255) to (0-1). If the incoming vector size + * is less than four, a {@link Element#F32_4} is created by + * filling the missing vector channels with zero. This value is + * then multiplied by the 4x4 color matrix as performed by + * rsMatrixMultiply(), adding a {@link Element#F32_4}, and then + * writing it to the output {@link Allocation}. + * + * If the ouptut type is unsigned, the value is normalized from + * (0-1) to (0-255) and converted. If the output vector size is + * less than four, the unused channels are discarded. + * + * Supported elements types are {@link Element#U8}, {@link + * Element#U8_2}, {@link Element#U8_3}, {@link Element#U8_4}, + * {@link Element#F32}, {@link Element#F32_2}, {@link + * Element#F32_3}, and {@link Element#F32_4}. **/ public final class ScriptIntrinsicColorMatrix extends ScriptIntrinsic { private final Matrix4f mMatrix = new Matrix4f(); - private Allocation mInput; + private final Float4 mAdd = new Float4(); private ScriptIntrinsicColorMatrix(int id, RenderScript rs) { super(id, rs); @@ -39,18 +51,27 @@ public final class ScriptIntrinsicColorMatrix extends ScriptIntrinsic { * Create an intrinsic for applying a color matrix to an * allocation. * - * Supported elements types are {@link Element#U8_4} - * * @param rs The RenderScript context - * @param e Element type for intputs and outputs + * @param e Element type for inputs and outputs, As of API 19, + * this parameter is ignored. The Element type check is + * performed in the kernel launch. * * @return ScriptIntrinsicColorMatrix */ public static ScriptIntrinsicColorMatrix create(RenderScript rs, Element e) { - if (!e.isCompatible(Element.U8_4(rs))) { - throw new RSIllegalArgumentException("Unsuported element type."); - } - int id = rs.nScriptIntrinsicCreate(2, e.getID(rs)); + return create(rs); + } + + /** + * Create an intrinsic for applying a color matrix to an + * allocation. + * + * @param rs The RenderScript context + * + * @return ScriptIntrinsicColorMatrix + */ + public static ScriptIntrinsicColorMatrix create(RenderScript rs) { + int id = rs.nScriptIntrinsicCreate(2, 0); return new ScriptIntrinsicColorMatrix(id, rs); } @@ -84,6 +105,49 @@ public final class ScriptIntrinsicColorMatrix extends ScriptIntrinsic { } /** + * Set the value to be added after the color matrix has been + * applied. The default value is {0, 0, 0, 0} + * + * @param f The float4 value to be added. + */ + public void setAdd(Float4 f) { + mAdd.x = f.x; + mAdd.y = f.y; + mAdd.z = f.z; + mAdd.w = f.w; + + FieldPacker fp = new FieldPacker(4*4); + fp.addF32(f.x); + fp.addF32(f.y); + fp.addF32(f.z); + fp.addF32(f.w); + setVar(1, fp); + } + + /** + * Set the value to be added after the color matrix has been + * applied. The default value is {0, 0, 0, 0} + * + * @param r The red add value. + * @param g The green add value. + * @param b The blue add value. + * @param a The alpha add value. + */ + public void setAdd(float r, float g, float b, float a) { + mAdd.x = r; + mAdd.y = g; + mAdd.z = b; + mAdd.w = a; + + FieldPacker fp = new FieldPacker(4*4); + fp.addF32(mAdd.x); + fp.addF32(mAdd.y); + fp.addF32(mAdd.z); + fp.addF32(mAdd.w); + setVar(1, fp); + } + + /** * Set a color matrix to convert from RGB to luminance. The alpha channel * will be a copy. * @@ -142,13 +206,45 @@ public final class ScriptIntrinsicColorMatrix extends ScriptIntrinsic { /** - * Invoke the kernel and apply the matrix to each cell of ain and copy to - * aout. + * Invoke the kernel and apply the matrix to each cell of input + * {@link Allocation} and copy to the output {@link Allocation}. + * + * If the vector size of the input is less than four, the + * remaining components are treated as zero for the matrix + * multiply. + * + * If the output vector size is less than four, the unused + * vector components are discarded. + * * * @param ain Input allocation * @param aout Output allocation */ public void forEach(Allocation ain, Allocation aout) { + if (!ain.getElement().isCompatible(Element.U8(mRS)) && + !ain.getElement().isCompatible(Element.U8_2(mRS)) && + !ain.getElement().isCompatible(Element.U8_3(mRS)) && + !ain.getElement().isCompatible(Element.U8_4(mRS)) && + !ain.getElement().isCompatible(Element.F32(mRS)) && + !ain.getElement().isCompatible(Element.F32_2(mRS)) && + !ain.getElement().isCompatible(Element.F32_3(mRS)) && + !ain.getElement().isCompatible(Element.F32_4(mRS))) { + + throw new RSIllegalArgumentException("Unsuported element type."); + } + + if (!aout.getElement().isCompatible(Element.U8(mRS)) && + !aout.getElement().isCompatible(Element.U8_2(mRS)) && + !aout.getElement().isCompatible(Element.U8_3(mRS)) && + !aout.getElement().isCompatible(Element.U8_4(mRS)) && + !aout.getElement().isCompatible(Element.F32(mRS)) && + !aout.getElement().isCompatible(Element.F32_2(mRS)) && + !aout.getElement().isCompatible(Element.F32_3(mRS)) && + !aout.getElement().isCompatible(Element.F32_4(mRS))) { + + throw new RSIllegalArgumentException("Unsuported element type."); + } + forEach(0, ain, aout, null); } diff --git a/media/java/android/media/MediaFormat.java b/media/java/android/media/MediaFormat.java index a2eb8d99ee2f..3fbaf69576fe 100644 --- a/media/java/android/media/MediaFormat.java +++ b/media/java/android/media/MediaFormat.java @@ -40,7 +40,8 @@ import java.util.Map; * <tr><th>Name</th><th>Value Type</th><th>Description</th></tr> * <tr><td>{@link #KEY_WIDTH}</td><td>Integer</td><td></td></tr> * <tr><td>{@link #KEY_HEIGHT}</td><td>Integer</td><td></td></tr> - * <tr><td>{@link #KEY_COLOR_FORMAT}</td><td>Integer</td><td><b>encoder-only</b></td></tr> + * <tr><td>{@link #KEY_COLOR_FORMAT}</td><td>Integer</td><td>set by the user + * for encoders, readable in the output format of decoders</b></td></tr> * <tr><td>{@link #KEY_FRAME_RATE}</td><td>Integer or Float</td><td><b>encoder-only</b></td></tr> * <tr><td>{@link #KEY_I_FRAME_INTERVAL}</td><td>Integer</td><td><b>encoder-only</b></td></tr> * </table> @@ -154,7 +155,7 @@ public final class MediaFormat { /** * A key describing the AAC profile to be used (AAC audio formats only). - * Constants are declared in {@link android.media.MediaCodecInfo.CodecCapabilities}. + * Constants are declared in {@link android.media.MediaCodecInfo.CodecProfileLevel}. */ public static final String KEY_AAC_PROFILE = "aac-profile"; diff --git a/packages/Keyguard/res/values-sw/strings.xml b/packages/Keyguard/res/values-sw/strings.xml index 014c732ed6e6..6eb88bc64718 100644 --- a/packages/Keyguard/res/values-sw/strings.xml +++ b/packages/Keyguard/res/values-sw/strings.xml @@ -77,7 +77,7 @@ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Ghairi"</string> <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Futa"</string> - <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Imefanyika"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Nimemaliza"</string> <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modi ya mabadiliko"</string> <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Songa"</string> <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index a8cb955f677e..e8b8dc1869df 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -939,7 +939,8 @@ public class PhoneStatusBar extends BaseStatusBar { @Override public void resetHeadsUpDecayTimer() { mHandler.removeMessages(MSG_HIDE_HEADS_UP); - if (mHeadsUpNotificationDecay > 0) { + if (mUseHeadsUp && mHeadsUpNotificationDecay > 0 + && !mHeadsUpNotificationView.isInsistent()) { mHandler.sendEmptyMessageDelayed(MSG_HIDE_HEADS_UP, mHeadsUpNotificationDecay); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java index 038eba190224..7a8ce4f8a6ef 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.policy; +import android.app.Notification; import android.content.Context; import android.content.res.Configuration; import android.graphics.Rect; @@ -199,4 +200,9 @@ public class HeadsUpNotificationView extends LinearLayout implements SwipeHelper mHeadsUp.row.setUserLocked(userLocked); } } + + public boolean isInsistent() { + return mHeadsUp != null + && (mHeadsUp.notification.getNotification().flags & Notification.FLAG_INSISTENT) != 0; + } }
\ No newline at end of file diff --git a/services/java/com/android/server/AlarmManagerService.java b/services/java/com/android/server/AlarmManagerService.java index a2b4e12d0b55..39c0bddf2dcb 100644 --- a/services/java/com/android/server/AlarmManagerService.java +++ b/services/java/com/android/server/AlarmManagerService.java @@ -83,7 +83,7 @@ class AlarmManagerService extends IAlarmManager.Stub { private static final String ClockReceiver_TAG = "ClockReceiver"; private static final boolean localLOGV = false; private static final boolean DEBUG_BATCH = localLOGV || false; - private static final boolean DEBUG_VALIDATE = localLOGV || true; + private static final boolean DEBUG_VALIDATE = localLOGV || false; private static final int ALARM_EVENT = 1; private static final String TIMEZONE_PROPERTY = "persist.sys.timezone"; diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java index 2d42cd6111c0..457539f88a0e 100644 --- a/services/java/com/android/server/BatteryService.java +++ b/services/java/com/android/server/BatteryService.java @@ -26,9 +26,12 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.BatteryManager; +import android.os.BatteryProperties; import android.os.Binder; import android.os.FileUtils; import android.os.Handler; +import android.os.IBatteryPropertiesListener; +import android.os.IBatteryPropertiesRegistrar; import android.os.IBinder; import android.os.DropBoxManager; import android.os.RemoteException; @@ -102,20 +105,8 @@ public final class BatteryService extends Binder { private final Object mLock = new Object(); - /* Begin native fields: All of these fields are set by native code. */ - private boolean mAcOnline; - private boolean mUsbOnline; - private boolean mWirelessOnline; - private int mBatteryStatus; - private int mBatteryHealth; - private boolean mBatteryPresent; - private int mBatteryLevel; - private int mBatteryVoltage; - private int mBatteryTemperature; - private String mBatteryTechnology; + private BatteryProperties mBatteryProps; private boolean mBatteryLevelCritical; - /* End native fields. */ - private int mLastBatteryStatus; private int mLastBatteryHealth; private boolean mLastBatteryPresent; @@ -143,7 +134,8 @@ public final class BatteryService extends Binder { private boolean mSentLowBatteryBroadcast = false; - private native void native_update(); + private BatteryListener mBatteryPropertiesListener; + private IBatteryPropertiesRegistrar mBatteryPropertiesRegistrar; public BatteryService(Context context, LightsService lights) { mContext = context; @@ -160,17 +152,21 @@ public final class BatteryService extends Binder { mShutdownBatteryTemperature = mContext.getResources().getInteger( com.android.internal.R.integer.config_shutdownBatteryTemperature); - mPowerSupplyObserver.startObserving("SUBSYSTEM=power_supply"); - // watch for invalid charger messages if the invalid_charger switch exists if (new File("/sys/devices/virtual/switch/invalid_charger/state").exists()) { mInvalidChargerObserver.startObserving( "DEVPATH=/devices/virtual/switch/invalid_charger"); } - // set initial status - synchronized (mLock) { - updateLocked(); + mBatteryPropertiesListener = new BatteryListener(); + + IBinder b = ServiceManager.getService("batterypropreg"); + mBatteryPropertiesRegistrar = IBatteryPropertiesRegistrar.Stub.asInterface(b); + + try { + mBatteryPropertiesRegistrar.registerListener(mBatteryPropertiesListener); + } catch (RemoteException e) { + // Should never happen. } } @@ -194,16 +190,16 @@ public final class BatteryService extends Binder { private boolean isPoweredLocked(int plugTypeSet) { // assume we are powered if battery state is unknown so // the "stay on while plugged in" option will work. - if (mBatteryStatus == BatteryManager.BATTERY_STATUS_UNKNOWN) { + if (mBatteryProps.batteryStatus == BatteryManager.BATTERY_STATUS_UNKNOWN) { return true; } - if ((plugTypeSet & BatteryManager.BATTERY_PLUGGED_AC) != 0 && mAcOnline) { + if ((plugTypeSet & BatteryManager.BATTERY_PLUGGED_AC) != 0 && mBatteryProps.chargerAcOnline) { return true; } - if ((plugTypeSet & BatteryManager.BATTERY_PLUGGED_USB) != 0 && mUsbOnline) { + if ((plugTypeSet & BatteryManager.BATTERY_PLUGGED_USB) != 0 && mBatteryProps.chargerUsbOnline) { return true; } - if ((plugTypeSet & BatteryManager.BATTERY_PLUGGED_WIRELESS) != 0 && mWirelessOnline) { + if ((plugTypeSet & BatteryManager.BATTERY_PLUGGED_WIRELESS) != 0 && mBatteryProps.chargerWirelessOnline) { return true; } return false; @@ -223,7 +219,7 @@ public final class BatteryService extends Binder { */ public int getBatteryLevel() { synchronized (mLock) { - return mBatteryLevel; + return mBatteryProps.batteryLevel; } } @@ -232,7 +228,7 @@ public final class BatteryService extends Binder { */ public boolean isBatteryLow() { synchronized (mLock) { - return mBatteryPresent && mBatteryLevel <= mLowBatteryWarningLevel; + return mBatteryProps.batteryPresent && mBatteryProps.batteryLevel <= mLowBatteryWarningLevel; } } @@ -248,7 +244,7 @@ public final class BatteryService extends Binder { private void shutdownIfNoPowerLocked() { // shut down gracefully if our battery is critically low and we are not powered. // wait until the system has booted before attempting to display the shutdown dialog. - if (mBatteryLevel == 0 && !isPoweredLocked(BatteryManager.BATTERY_PLUGGED_ANY)) { + if (mBatteryProps.batteryLevel == 0 && !isPoweredLocked(BatteryManager.BATTERY_PLUGGED_ANY)) { mHandler.post(new Runnable() { @Override public void run() { @@ -267,7 +263,7 @@ public final class BatteryService extends Binder { // shut down gracefully if temperature is too high (> 68.0C by default) // wait until the system has booted before attempting to display the // shutdown dialog. - if (mBatteryTemperature > mShutdownBatteryTemperature) { + if (mBatteryProps.batteryTemperature > mShutdownBatteryTemperature) { mHandler.post(new Runnable() { @Override public void run() { @@ -282,13 +278,13 @@ public final class BatteryService extends Binder { } } - private void updateLocked() { - if (!mUpdatesStopped) { - // Update the values of mAcOnline, et. all. - native_update(); - - // Process the new values. - processValuesLocked(); + private void update(BatteryProperties props) { + synchronized (mLock) { + if (!mUpdatesStopped) { + mBatteryProps = props; + // Process the new values. + processValuesLocked(); + } } } @@ -296,12 +292,12 @@ public final class BatteryService extends Binder { boolean logOutlier = false; long dischargeDuration = 0; - mBatteryLevelCritical = (mBatteryLevel <= mCriticalBatteryLevel); - if (mAcOnline) { + mBatteryLevelCritical = (mBatteryProps.batteryLevel <= mCriticalBatteryLevel); + if (mBatteryProps.chargerAcOnline) { mPlugType = BatteryManager.BATTERY_PLUGGED_AC; - } else if (mUsbOnline) { + } else if (mBatteryProps.chargerUsbOnline) { mPlugType = BatteryManager.BATTERY_PLUGGED_USB; - } else if (mWirelessOnline) { + } else if (mBatteryProps.chargerWirelessOnline) { mPlugType = BatteryManager.BATTERY_PLUGGED_WIRELESS; } else { mPlugType = BATTERY_PLUGGED_NONE; @@ -309,25 +305,25 @@ public final class BatteryService extends Binder { if (DEBUG) { Slog.d(TAG, "Processing new values: " - + "mAcOnline=" + mAcOnline - + ", mUsbOnline=" + mUsbOnline - + ", mWirelessOnline=" + mWirelessOnline - + ", mBatteryStatus=" + mBatteryStatus - + ", mBatteryHealth=" + mBatteryHealth - + ", mBatteryPresent=" + mBatteryPresent - + ", mBatteryLevel=" + mBatteryLevel - + ", mBatteryTechnology=" + mBatteryTechnology - + ", mBatteryVoltage=" + mBatteryVoltage - + ", mBatteryTemperature=" + mBatteryTemperature + + "chargerAcOnline=" + mBatteryProps.chargerAcOnline + + ", chargerUsbOnline=" + mBatteryProps.chargerUsbOnline + + ", chargerWirelessOnline=" + mBatteryProps.chargerWirelessOnline + + ", batteryStatus=" + mBatteryProps.batteryStatus + + ", batteryHealth=" + mBatteryProps.batteryHealth + + ", batteryPresent=" + mBatteryProps.batteryPresent + + ", batteryLevel=" + mBatteryProps.batteryLevel + + ", batteryTechnology=" + mBatteryProps.batteryTechnology + + ", batteryVoltage=" + mBatteryProps.batteryVoltage + + ", batteryTemperature=" + mBatteryProps.batteryTemperature + ", mBatteryLevelCritical=" + mBatteryLevelCritical + ", mPlugType=" + mPlugType); } // Let the battery stats keep track of the current level. try { - mBatteryStats.setBatteryState(mBatteryStatus, mBatteryHealth, - mPlugType, mBatteryLevel, mBatteryTemperature, - mBatteryVoltage); + mBatteryStats.setBatteryState(mBatteryProps.batteryStatus, mBatteryProps.batteryHealth, + mPlugType, mBatteryProps.batteryLevel, mBatteryProps.batteryTemperature, + mBatteryProps.batteryVoltage); } catch (RemoteException e) { // Should never happen. } @@ -335,13 +331,13 @@ public final class BatteryService extends Binder { shutdownIfNoPowerLocked(); shutdownIfOverTempLocked(); - if (mBatteryStatus != mLastBatteryStatus || - mBatteryHealth != mLastBatteryHealth || - mBatteryPresent != mLastBatteryPresent || - mBatteryLevel != mLastBatteryLevel || + if (mBatteryProps.batteryStatus != mLastBatteryStatus || + mBatteryProps.batteryHealth != mLastBatteryHealth || + mBatteryProps.batteryPresent != mLastBatteryPresent || + mBatteryProps.batteryLevel != mLastBatteryLevel || mPlugType != mLastPlugType || - mBatteryVoltage != mLastBatteryVoltage || - mBatteryTemperature != mLastBatteryTemperature || + mBatteryProps.batteryVoltage != mLastBatteryVoltage || + mBatteryProps.batteryTemperature != mLastBatteryTemperature || mInvalidCharger != mLastInvalidCharger) { if (mPlugType != mLastPlugType) { @@ -350,33 +346,33 @@ public final class BatteryService extends Binder { // There's no value in this data unless we've discharged at least once and the // battery level has changed; so don't log until it does. - if (mDischargeStartTime != 0 && mDischargeStartLevel != mBatteryLevel) { + if (mDischargeStartTime != 0 && mDischargeStartLevel != mBatteryProps.batteryLevel) { dischargeDuration = SystemClock.elapsedRealtime() - mDischargeStartTime; logOutlier = true; EventLog.writeEvent(EventLogTags.BATTERY_DISCHARGE, dischargeDuration, - mDischargeStartLevel, mBatteryLevel); + mDischargeStartLevel, mBatteryProps.batteryLevel); // make sure we see a discharge event before logging again mDischargeStartTime = 0; } } else if (mPlugType == BATTERY_PLUGGED_NONE) { // charging -> discharging or we just powered up mDischargeStartTime = SystemClock.elapsedRealtime(); - mDischargeStartLevel = mBatteryLevel; + mDischargeStartLevel = mBatteryProps.batteryLevel; } } - if (mBatteryStatus != mLastBatteryStatus || - mBatteryHealth != mLastBatteryHealth || - mBatteryPresent != mLastBatteryPresent || + if (mBatteryProps.batteryStatus != mLastBatteryStatus || + mBatteryProps.batteryHealth != mLastBatteryHealth || + mBatteryProps.batteryPresent != mLastBatteryPresent || mPlugType != mLastPlugType) { EventLog.writeEvent(EventLogTags.BATTERY_STATUS, - mBatteryStatus, mBatteryHealth, mBatteryPresent ? 1 : 0, - mPlugType, mBatteryTechnology); + mBatteryProps.batteryStatus, mBatteryProps.batteryHealth, mBatteryProps.batteryPresent ? 1 : 0, + mPlugType, mBatteryProps.batteryTechnology); } - if (mBatteryLevel != mLastBatteryLevel) { + if (mBatteryProps.batteryLevel != mLastBatteryLevel) { // Don't do this just from voltage or temperature changes, that is // too noisy. EventLog.writeEvent(EventLogTags.BATTERY_LEVEL, - mBatteryLevel, mBatteryVoltage, mBatteryTemperature); + mBatteryProps.batteryLevel, mBatteryProps.batteryVoltage, mBatteryProps.batteryTemperature); } if (mBatteryLevelCritical && !mLastBatteryLevelCritical && mPlugType == BATTERY_PLUGGED_NONE) { @@ -396,8 +392,8 @@ public final class BatteryService extends Binder { * (becomes <= mLowBatteryWarningLevel). */ final boolean sendBatteryLow = !plugged - && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN - && mBatteryLevel <= mLowBatteryWarningLevel + && mBatteryProps.batteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN + && mBatteryProps.batteryLevel <= mLowBatteryWarningLevel && (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel); sendIntentLocked(); @@ -456,13 +452,13 @@ public final class BatteryService extends Binder { logOutlierLocked(dischargeDuration); } - mLastBatteryStatus = mBatteryStatus; - mLastBatteryHealth = mBatteryHealth; - mLastBatteryPresent = mBatteryPresent; - mLastBatteryLevel = mBatteryLevel; + mLastBatteryStatus = mBatteryProps.batteryStatus; + mLastBatteryHealth = mBatteryProps.batteryHealth; + mLastBatteryPresent = mBatteryProps.batteryPresent; + mLastBatteryLevel = mBatteryProps.batteryLevel; mLastPlugType = mPlugType; - mLastBatteryVoltage = mBatteryVoltage; - mLastBatteryTemperature = mBatteryTemperature; + mLastBatteryVoltage = mBatteryProps.batteryVoltage; + mLastBatteryTemperature = mBatteryProps.batteryTemperature; mLastBatteryLevelCritical = mBatteryLevelCritical; mLastInvalidCharger = mInvalidCharger; } @@ -474,29 +470,29 @@ public final class BatteryService extends Binder { intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_REPLACE_PENDING); - int icon = getIconLocked(mBatteryLevel); + int icon = getIconLocked(mBatteryProps.batteryLevel); - intent.putExtra(BatteryManager.EXTRA_STATUS, mBatteryStatus); - intent.putExtra(BatteryManager.EXTRA_HEALTH, mBatteryHealth); - intent.putExtra(BatteryManager.EXTRA_PRESENT, mBatteryPresent); - intent.putExtra(BatteryManager.EXTRA_LEVEL, mBatteryLevel); + intent.putExtra(BatteryManager.EXTRA_STATUS, mBatteryProps.batteryStatus); + intent.putExtra(BatteryManager.EXTRA_HEALTH, mBatteryProps.batteryHealth); + intent.putExtra(BatteryManager.EXTRA_PRESENT, mBatteryProps.batteryPresent); + intent.putExtra(BatteryManager.EXTRA_LEVEL, mBatteryProps.batteryLevel); intent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_SCALE); intent.putExtra(BatteryManager.EXTRA_ICON_SMALL, icon); intent.putExtra(BatteryManager.EXTRA_PLUGGED, mPlugType); - intent.putExtra(BatteryManager.EXTRA_VOLTAGE, mBatteryVoltage); - intent.putExtra(BatteryManager.EXTRA_TEMPERATURE, mBatteryTemperature); - intent.putExtra(BatteryManager.EXTRA_TECHNOLOGY, mBatteryTechnology); + intent.putExtra(BatteryManager.EXTRA_VOLTAGE, mBatteryProps.batteryVoltage); + intent.putExtra(BatteryManager.EXTRA_TEMPERATURE, mBatteryProps.batteryTemperature); + intent.putExtra(BatteryManager.EXTRA_TECHNOLOGY, mBatteryProps.batteryTechnology); intent.putExtra(BatteryManager.EXTRA_INVALID_CHARGER, mInvalidCharger); if (DEBUG) { - Slog.d(TAG, "Sending ACTION_BATTERY_CHANGED. level:" + mBatteryLevel + - ", scale:" + BATTERY_SCALE + ", status:" + mBatteryStatus + - ", health:" + mBatteryHealth + ", present:" + mBatteryPresent + - ", voltage: " + mBatteryVoltage + - ", temperature: " + mBatteryTemperature + - ", technology: " + mBatteryTechnology + - ", AC powered:" + mAcOnline + ", USB powered:" + mUsbOnline + - ", Wireless powered:" + mWirelessOnline + + Slog.d(TAG, "Sending ACTION_BATTERY_CHANGED. level:" + mBatteryProps.batteryLevel + + ", scale:" + BATTERY_SCALE + ", status:" + mBatteryProps.batteryStatus + + ", health:" + mBatteryProps.batteryHealth + ", present:" + mBatteryProps.batteryPresent + + ", voltage: " + mBatteryProps.batteryVoltage + + ", temperature: " + mBatteryProps.batteryTemperature + + ", technology: " + mBatteryProps.batteryTechnology + + ", AC powered:" + mBatteryProps.chargerAcOnline + ", USB powered:" + mBatteryProps.chargerUsbOnline + + ", Wireless powered:" + mBatteryProps.chargerWirelessOnline + ", icon:" + icon + ", invalid charger:" + mInvalidCharger); } @@ -558,14 +554,14 @@ public final class BatteryService extends Binder { long durationThreshold = Long.parseLong(durationThresholdString); int dischargeThreshold = Integer.parseInt(dischargeThresholdString); if (duration <= durationThreshold && - mDischargeStartLevel - mBatteryLevel >= dischargeThreshold) { + mDischargeStartLevel - mBatteryProps.batteryLevel >= dischargeThreshold) { // If the discharge cycle is bad enough we want to know about it. logBatteryStatsLocked(); } if (DEBUG) Slog.v(TAG, "duration threshold: " + durationThreshold + " discharge threshold: " + dischargeThreshold); if (DEBUG) Slog.v(TAG, "duration: " + duration + " discharge: " + - (mDischargeStartLevel - mBatteryLevel)); + (mDischargeStartLevel - mBatteryProps.batteryLevel)); } catch (NumberFormatException e) { Slog.e(TAG, "Invalid DischargeThresholds GService string: " + durationThresholdString + " or " + dischargeThresholdString); @@ -575,14 +571,14 @@ public final class BatteryService extends Binder { } private int getIconLocked(int level) { - if (mBatteryStatus == BatteryManager.BATTERY_STATUS_CHARGING) { + if (mBatteryProps.batteryStatus == BatteryManager.BATTERY_STATUS_CHARGING) { return com.android.internal.R.drawable.stat_sys_battery_charge; - } else if (mBatteryStatus == BatteryManager.BATTERY_STATUS_DISCHARGING) { + } else if (mBatteryProps.batteryStatus == BatteryManager.BATTERY_STATUS_DISCHARGING) { return com.android.internal.R.drawable.stat_sys_battery; - } else if (mBatteryStatus == BatteryManager.BATTERY_STATUS_NOT_CHARGING - || mBatteryStatus == BatteryManager.BATTERY_STATUS_FULL) { + } else if (mBatteryProps.batteryStatus == BatteryManager.BATTERY_STATUS_NOT_CHARGING + || mBatteryProps.batteryStatus == BatteryManager.BATTERY_STATUS_FULL) { if (isPoweredLocked(BatteryManager.BATTERY_PLUGGED_ANY) - && mBatteryLevel >= 100) { + && mBatteryProps.batteryLevel >= 100) { return com.android.internal.R.drawable.stat_sys_battery_charge; } else { return com.android.internal.R.drawable.stat_sys_battery; @@ -609,32 +605,32 @@ public final class BatteryService extends Binder { if (mUpdatesStopped) { pw.println(" (UPDATES STOPPED -- use 'reset' to restart)"); } - pw.println(" AC powered: " + mAcOnline); - pw.println(" USB powered: " + mUsbOnline); - pw.println(" Wireless powered: " + mWirelessOnline); - pw.println(" status: " + mBatteryStatus); - pw.println(" health: " + mBatteryHealth); - pw.println(" present: " + mBatteryPresent); - pw.println(" level: " + mBatteryLevel); + pw.println(" AC powered: " + mBatteryProps.chargerAcOnline); + pw.println(" USB powered: " + mBatteryProps.chargerUsbOnline); + pw.println(" Wireless powered: " + mBatteryProps.chargerWirelessOnline); + pw.println(" status: " + mBatteryProps.batteryStatus); + pw.println(" health: " + mBatteryProps.batteryHealth); + pw.println(" present: " + mBatteryProps.batteryPresent); + pw.println(" level: " + mBatteryProps.batteryLevel); pw.println(" scale: " + BATTERY_SCALE); - pw.println(" voltage:" + mBatteryVoltage); - pw.println(" temperature: " + mBatteryTemperature); - pw.println(" technology: " + mBatteryTechnology); + pw.println(" voltage:" + mBatteryProps.batteryVoltage); + pw.println(" temperature: " + mBatteryProps.batteryTemperature); + pw.println(" technology: " + mBatteryProps.batteryTechnology); } else if (args.length == 3 && "set".equals(args[0])) { String key = args[1]; String value = args[2]; try { boolean update = true; if ("ac".equals(key)) { - mAcOnline = Integer.parseInt(value) != 0; + mBatteryProps.chargerAcOnline = Integer.parseInt(value) != 0; } else if ("usb".equals(key)) { - mUsbOnline = Integer.parseInt(value) != 0; + mBatteryProps.chargerUsbOnline = Integer.parseInt(value) != 0; } else if ("wireless".equals(key)) { - mWirelessOnline = Integer.parseInt(value) != 0; + mBatteryProps.chargerWirelessOnline = Integer.parseInt(value) != 0; } else if ("status".equals(key)) { - mBatteryStatus = Integer.parseInt(value); + mBatteryProps.batteryStatus = Integer.parseInt(value); } else if ("level".equals(key)) { - mBatteryLevel = Integer.parseInt(value); + mBatteryProps.batteryLevel = Integer.parseInt(value); } else if ("invalid".equals(key)) { mInvalidCharger = Integer.parseInt(value); } else { @@ -657,7 +653,6 @@ public final class BatteryService extends Binder { long ident = Binder.clearCallingIdentity(); try { mUpdatesStopped = false; - updateLocked(); } finally { Binder.restoreCallingIdentity(ident); } @@ -669,15 +664,6 @@ public final class BatteryService extends Binder { } } - private final UEventObserver mPowerSupplyObserver = new UEventObserver() { - @Override - public void onUEvent(UEventObserver.UEvent event) { - synchronized (mLock) { - updateLocked(); - } - } - }; - private final UEventObserver mInvalidChargerObserver = new UEventObserver() { @Override public void onUEvent(UEventObserver.UEvent event) { @@ -685,7 +671,6 @@ public final class BatteryService extends Binder { synchronized (mLock) { if (mInvalidCharger != invalidCharger) { mInvalidCharger = invalidCharger; - updateLocked(); } } } @@ -719,8 +704,8 @@ public final class BatteryService extends Binder { * Synchronize on BatteryService. */ public void updateLightsLocked() { - final int level = mBatteryLevel; - final int status = mBatteryStatus; + final int level = mBatteryProps.batteryLevel; + final int status = mBatteryProps.batteryStatus; if (level < mLowBatteryWarningLevel) { if (status == BatteryManager.BATTERY_STATUS_CHARGING) { // Solid red when battery is charging @@ -745,4 +730,10 @@ public final class BatteryService extends Binder { } } } + + private final class BatteryListener extends IBatteryPropertiesListener.Stub { + public void batteryPropertiesChanged(BatteryProperties props) { + BatteryService.this.update(props); + } + } } diff --git a/services/java/com/android/server/ClipboardService.java b/services/java/com/android/server/ClipboardService.java index 058857ddb605..0bf03b5ff453 100644 --- a/services/java/com/android/server/ClipboardService.java +++ b/services/java/com/android/server/ClipboardService.java @@ -154,31 +154,36 @@ public class ClipboardService extends IClipboard.Stub { if (clip != null && clip.getItemCount() <= 0) { throw new IllegalArgumentException("No items"); } - if (mAppOps.noteOp(AppOpsManager.OP_WRITE_CLIPBOARD, Binder.getCallingUid(), + final int callingUid = Binder.getCallingUid(); + if (mAppOps.noteOp(AppOpsManager.OP_WRITE_CLIPBOARD, callingUid, callingPackage) != AppOpsManager.MODE_ALLOWED) { return; } - checkDataOwnerLocked(clip, Binder.getCallingUid()); + checkDataOwnerLocked(clip, callingUid); clearActiveOwnersLocked(); PerUserClipboard clipboard = getClipboard(); clipboard.primaryClip = clip; + final long ident = Binder.clearCallingIdentity(); final int n = clipboard.primaryClipListeners.beginBroadcast(); - for (int i = 0; i < n; i++) { - try { - ListenerInfo li = (ListenerInfo) - clipboard.primaryClipListeners.getBroadcastCookie(i); - if (mAppOps.checkOpNoThrow(AppOpsManager.OP_READ_CLIPBOARD, li.mUid, - li.mPackageName) == AppOpsManager.MODE_ALLOWED) { - clipboard.primaryClipListeners.getBroadcastItem(i) - .dispatchPrimaryClipChanged(); + try { + for (int i = 0; i < n; i++) { + try { + ListenerInfo li = (ListenerInfo) + clipboard.primaryClipListeners.getBroadcastCookie(i); + if (mAppOps.checkOpNoThrow(AppOpsManager.OP_READ_CLIPBOARD, li.mUid, + li.mPackageName) == AppOpsManager.MODE_ALLOWED) { + clipboard.primaryClipListeners.getBroadcastItem(i) + .dispatchPrimaryClipChanged(); + } + } catch (RemoteException e) { + // The RemoteCallbackList will take care of removing + // the dead object for us. } - } catch (RemoteException e) { - - // The RemoteCallbackList will take care of removing - // the dead object for us. } + } finally { + clipboard.primaryClipListeners.finishBroadcast(); + Binder.restoreCallingIdentity(ident); } - clipboard.primaryClipListeners.finishBroadcast(); } } diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index b341693245b6..9615ff5fb89d 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -472,6 +472,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { com.android.internal.R.array.radioAttributes); for (String raString : raStrings) { RadioAttributes r = new RadioAttributes(raString); + if (VDBG) log("raString=" + raString + " r=" + r); if (r.mType > ConnectivityManager.MAX_RADIO_TYPE) { loge("Error in radioAttributes - ignoring attempt to define type " + r.mType); continue; @@ -492,6 +493,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { for (String naString : naStrings) { try { NetworkConfig n = new NetworkConfig(naString); + if (VDBG) log("naString=" + naString + " config=" + n); if (n.type > ConnectivityManager.MAX_NETWORK_TYPE) { loge("Error in networkAttributes - ignoring attempt to define type " + n.type); @@ -518,6 +520,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { // ignore it - leave the entry null } } + if (VDBG) log("mNetworksDefined=" + mNetworksDefined); mProtectedNetworks = new ArrayList<Integer>(); int[] protectedNetworks = context.getResources().getIntArray( diff --git a/services/java/com/android/server/am/ActiveServices.java b/services/java/com/android/server/am/ActiveServices.java index f95532dc6b69..f3aabe21dc8b 100644 --- a/services/java/com/android/server/am/ActiveServices.java +++ b/services/java/com/android/server/am/ActiveServices.java @@ -68,6 +68,9 @@ public final class ActiveServices { // How long we wait for a service to finish executing. static final int SERVICE_TIMEOUT = 20*1000; + // How long we wait for a service to finish executing. + static final int SERVICE_BACKGROUND_TIMEOUT = SERVICE_TIMEOUT * 10; + // How long a service needs to be running until restarting its process // is no longer considered to be a relaunch of the service. static final int SERVICE_RESTART_DURATION = 5*1000; @@ -215,6 +218,7 @@ public final class ActiveServices { if (DEBUG_SERVICE) Slog.v(TAG, "startService: " + service + " type=" + resolvedType + " args=" + service.getExtras()); + final boolean callerFg; if (caller != null) { final ProcessRecord callerApp = mAm.getRecordForAppLocked(caller); if (callerApp == null) { @@ -223,11 +227,15 @@ public final class ActiveServices { + " (pid=" + Binder.getCallingPid() + ") when starting service " + service); } + callerFg = callerApp.setSchedGroup != Process.THREAD_GROUP_BG_NONINTERACTIVE; + } else { + callerFg = true; } + ServiceLookupResult res = retrieveServiceLocked(service, resolvedType, - callingPid, callingUid, userId, true); + callingPid, callingUid, userId, true, callerFg); if (res == null) { return null; } @@ -253,7 +261,7 @@ public final class ActiveServices { synchronized (r.stats.getBatteryStats()) { r.stats.startRunningLocked(); } - String error = bringUpServiceLocked(r, service.getFlags(), false); + String error = bringUpServiceLocked(r, service.getFlags(), callerFg, false); if (error != null) { return new ComponentName("!!", error); } @@ -288,7 +296,7 @@ public final class ActiveServices { // If this service is active, make sure it is stopped. ServiceLookupResult r = retrieveServiceLocked(service, resolvedType, - Binder.getCallingPid(), Binder.getCallingUid(), userId, false); + Binder.getCallingPid(), Binder.getCallingUid(), userId, false, false); if (r != null) { if (r.record != null) { final long origId = Binder.clearCallingIdentity(); @@ -308,7 +316,7 @@ public final class ActiveServices { IBinder peekServiceLocked(Intent service, String resolvedType) { ServiceLookupResult r = retrieveServiceLocked(service, resolvedType, Binder.getCallingPid(), Binder.getCallingUid(), - UserHandle.getCallingUserId(), false); + UserHandle.getCallingUserId(), false, false); IBinder ret = null; if (r != null) { @@ -483,9 +491,11 @@ public final class ActiveServices { } } + final boolean callerFg = callerApp.setSchedGroup != Process.THREAD_GROUP_BG_NONINTERACTIVE; + ServiceLookupResult res = retrieveServiceLocked(service, resolvedType, - Binder.getCallingPid(), Binder.getCallingUid(), userId, true); + Binder.getCallingPid(), Binder.getCallingUid(), userId, true, callerFg); if (res == null) { return 0; } @@ -545,7 +555,7 @@ public final class ActiveServices { if ((flags&Context.BIND_AUTO_CREATE) != 0) { s.lastActivity = SystemClock.uptimeMillis(); - if (bringUpServiceLocked(s, service.getFlags(), false) != null) { + if (bringUpServiceLocked(s, service.getFlags(), callerFg, false) != null) { return 0; } } @@ -575,10 +585,10 @@ public final class ActiveServices { // and the service had previously asked to be told when // rebound, then do so. if (b.intent.apps.size() == 1 && b.intent.doRebind) { - requestServiceBindingLocked(s, b.intent, true); + requestServiceBindingLocked(s, b.intent, callerFg, true); } } else if (!b.intent.requested) { - requestServiceBindingLocked(s, b.intent, false); + requestServiceBindingLocked(s, b.intent, callerFg, false); } } finally { Binder.restoreCallingIdentity(origId); @@ -676,7 +686,16 @@ public final class ActiveServices { if (b.apps.size() > 0 && !inStopping) { // Applications have already bound since the last // unbind, so just rebind right here. - requestServiceBindingLocked(r, b, true); + boolean inFg = false; + for (int i=b.apps.size()-1; i>=0; i--) { + ProcessRecord client = b.apps.valueAt(i).client; + if (client != null && client.setSchedGroup + != Process.THREAD_GROUP_BG_NONINTERACTIVE) { + inFg = true; + break; + } + } + requestServiceBindingLocked(r, b, inFg, true); } else { // Note to tell the service the next time there is // a new client. @@ -723,7 +742,7 @@ public final class ActiveServices { private ServiceLookupResult retrieveServiceLocked(Intent service, String resolvedType, int callingPid, int callingUid, int userId, - boolean createIfNeeded) { + boolean createIfNeeded, boolean callingFromFg) { ServiceRecord r = null; if (DEBUG_SERVICE) Slog.v(TAG, "retrieveServiceLocked: " + service + " type=" + resolvedType + " callingUid=" + callingUid); @@ -773,7 +792,7 @@ public final class ActiveServices { sInfo.applicationInfo.uid, sInfo.packageName, sInfo.name); } - r = new ServiceRecord(mAm, ss, name, filter, sInfo, res); + r = new ServiceRecord(mAm, ss, name, filter, sInfo, callingFromFg, res); res.setService(r); mServiceMap.putServiceByName(name, UserHandle.getUserId(r.appInfo.uid), r); mServiceMap.putServiceByIntent(filter, UserHandle.getUserId(r.appInfo.uid), r); @@ -817,13 +836,14 @@ public final class ActiveServices { return null; } - private final void bumpServiceExecutingLocked(ServiceRecord r, String why) { + private final void bumpServiceExecutingLocked(ServiceRecord r, boolean fg, String why) { if (DEBUG_SERVICE) Log.v(TAG, ">>> EXECUTING " + why + " of " + r + " in app " + r.app); else if (DEBUG_SERVICE_EXECUTING) Log.v(TAG, ">>> EXECUTING " + why + " of " + r.shortName); long now = SystemClock.uptimeMillis(); if (r.executeNesting == 0) { + r.executeFg = fg; ProcessTracker.ServiceState stracker = r.getTracker(); if (stracker != null) { stracker.setExecuting(true, mAm.mProcessTracker.getMemFactorLocked(), now); @@ -833,24 +853,34 @@ public final class ActiveServices { Message msg = mAm.mHandler.obtainMessage( ActivityManagerService.SERVICE_TIMEOUT_MSG); msg.obj = r.app; - mAm.mHandler.sendMessageAtTime(msg, now+SERVICE_TIMEOUT); + mAm.mHandler.sendMessageAtTime(msg, + fg ? (now+SERVICE_TIMEOUT) : (now+ SERVICE_BACKGROUND_TIMEOUT)); } r.app.executingServices.add(r); + r.app.execServicesFg |= fg; } + } else if (r.app != null && fg && !r.app.execServicesFg) { + mAm.mHandler.removeMessages(ActivityManagerService.SERVICE_TIMEOUT_MSG); + Message msg = mAm.mHandler.obtainMessage( + ActivityManagerService.SERVICE_TIMEOUT_MSG); + msg.obj = r.app; + mAm.mHandler.sendMessageAtTime(msg,now+SERVICE_TIMEOUT); + r.app.execServicesFg = true; } + r.executeFg |= fg; r.executeNesting++; r.executingStart = now; } private final boolean requestServiceBindingLocked(ServiceRecord r, - IntentBindRecord i, boolean rebind) { + IntentBindRecord i, boolean execInFg, boolean rebind) { if (r.app == null || r.app.thread == null) { // If service is not currently running, can't yet bind. return false; } if ((!i.requested || rebind) && i.apps.size() > 0) { try { - bumpServiceExecutingLocked(r, "bind"); + bumpServiceExecutingLocked(r, execInFg, "bind"); r.app.forceProcessStateUpTo(ActivityManager.PROCESS_STATE_SERVICE); r.app.thread.scheduleBindService(r, i.intent.getIntent(), rebind, r.app.repProcState); @@ -962,6 +992,7 @@ public final class ActiveServices { } if (!mRestartingServices.contains(r)) { + r.createdFromFg = false; mRestartingServices.add(r); } @@ -982,7 +1013,7 @@ public final class ActiveServices { if (!mRestartingServices.contains(r)) { return; } - bringUpServiceLocked(r, r.intent.getIntent().getFlags(), true); + bringUpServiceLocked(r, r.intent.getIntent().getFlags(), r.createdFromFg, true); } private final boolean unscheduleServiceRestartLocked(ServiceRecord r) { @@ -996,12 +1027,12 @@ public final class ActiveServices { } private final String bringUpServiceLocked(ServiceRecord r, - int intentFlags, boolean whileRestarting) { + int intentFlags, boolean execInFg, boolean whileRestarting) { //Slog.i(TAG, "Bring up service:"); //r.dump(" "); if (r.app != null && r.app.thread != null) { - sendServiceArgsLocked(r, false); + sendServiceArgsLocked(r, execInFg, false); return null; } @@ -1049,7 +1080,7 @@ public final class ActiveServices { if (app != null && app.thread != null) { try { app.addPackage(r.appInfo.packageName, mAm.mProcessTracker); - realStartServiceLocked(r, app); + realStartServiceLocked(r, app, execInFg); return null; } catch (RemoteException e) { Slog.w(TAG, "Exception when starting service " + r.shortName, e); @@ -1093,17 +1124,17 @@ public final class ActiveServices { return null; } - private final void requestServiceBindingsLocked(ServiceRecord r) { + private final void requestServiceBindingsLocked(ServiceRecord r, boolean execInFg) { for (int i=r.bindings.size()-1; i>=0; i--) { IntentBindRecord ibr = r.bindings.valueAt(i); - if (!requestServiceBindingLocked(r, ibr, false)) { + if (!requestServiceBindingLocked(r, ibr, execInFg, false)) { break; } } } private final void realStartServiceLocked(ServiceRecord r, - ProcessRecord app) throws RemoteException { + ProcessRecord app, boolean execInFg) throws RemoteException { if (app.thread == null) { throw new RemoteException(); } @@ -1114,7 +1145,7 @@ public final class ActiveServices { r.restartTime = r.lastActivity = SystemClock.uptimeMillis(); app.services.add(r); - bumpServiceExecutingLocked(r, "create"); + bumpServiceExecutingLocked(r, execInFg, "create"); mAm.updateLruProcessLocked(app, true); boolean created = false; @@ -1141,7 +1172,7 @@ public final class ActiveServices { } } - requestServiceBindingsLocked(r); + requestServiceBindingsLocked(r, execInFg); // If the service is in the started state, and there are no // pending arguments, then fake up one so its onStartCommand() will @@ -1151,10 +1182,10 @@ public final class ActiveServices { null, null)); } - sendServiceArgsLocked(r, true); + sendServiceArgsLocked(r, execInFg, true); } - private final void sendServiceArgsLocked(ServiceRecord r, + private final void sendServiceArgsLocked(ServiceRecord r, boolean execInFg, boolean oomAdjusted) { final int N = r.pendingStarts.size(); if (N == 0) { @@ -1180,7 +1211,7 @@ public final class ActiveServices { mAm.grantUriPermissionUncheckedFromIntentLocked(si.neededGrants, si.getUriPermissionsLocked()); } - bumpServiceExecutingLocked(r, "start"); + bumpServiceExecutingLocked(r, execInFg, "start"); if (!oomAdjusted) { oomAdjusted = true; mAm.updateOomAdjLocked(r.app); @@ -1256,7 +1287,7 @@ public final class ActiveServices { + ": hasBound=" + ibr.hasBound); if (ibr.hasBound) { try { - bumpServiceExecutingLocked(r, "bring down unbind"); + bumpServiceExecutingLocked(r, false, "bring down unbind"); mAm.updateOomAdjLocked(r.app); ibr.hasBound = false; r.app.thread.scheduleUnbindService(r, @@ -1306,7 +1337,7 @@ public final class ActiveServices { r.app.services.remove(r); if (r.app.thread != null) { try { - bumpServiceExecutingLocked(r, "stop"); + bumpServiceExecutingLocked(r, false, "stop"); mStoppingServices.add(r); mAm.updateOomAdjLocked(r.app); r.app.thread.scheduleStopService(r); @@ -1387,7 +1418,7 @@ public final class ActiveServices { if (s.app != null && s.app.thread != null && b.intent.apps.size() == 0 && b.intent.hasBound) { try { - bumpServiceExecutingLocked(s, "unbind"); + bumpServiceExecutingLocked(s, false, "unbind"); mAm.updateOomAdjLocked(s.app); b.intent.hasBound = false; // Assume the client doesn't want to know about a rebind; @@ -1485,11 +1516,20 @@ public final class ActiveServices { if (r.app != null) { if (DEBUG_SERVICE) Slog.v(TAG, "Nesting at 0 of " + r.shortName); + r.app.execServicesFg = false; r.app.executingServices.remove(r); if (r.app.executingServices.size() == 0) { if (DEBUG_SERVICE || DEBUG_SERVICE_EXECUTING) Slog.v(TAG, "No more executingServices of " + r.shortName); mAm.mHandler.removeMessages(ActivityManagerService.SERVICE_TIMEOUT_MSG, r.app); + } else if (r.executeFg) { + // Need to re-evaluate whether the app still needs to be in the foreground. + for (int i=r.app.executingServices.size()-1; i>=0; i--) { + if (r.app.executingServices.valueAt(i).executeFg) { + r.app.execServicesFg = true; + break; + } + } } if (inStopping) { if (DEBUG_SERVICE) Slog.v(TAG, @@ -1499,6 +1539,7 @@ public final class ActiveServices { } mAm.updateOomAdjLocked(r.app); } + r.executeFg = false; if (r.tracker != null) { r.tracker.setExecuting(false, mAm.mProcessTracker.getMemFactorLocked(), SystemClock.uptimeMillis()); @@ -1526,7 +1567,7 @@ public final class ActiveServices { mPendingServices.remove(i); i--; proc.addPackage(sr.appInfo.packageName, mAm.mProcessTracker); - realStartServiceLocked(sr, proc); + realStartServiceLocked(sr, proc, sr.createdFromFg); didSomething = true; } } catch (Exception e) { @@ -1639,7 +1680,9 @@ public final class ActiveServices { sr.pendingStarts.add(new ServiceRecord.StartItem(sr, true, sr.makeNextStartId(), baseIntent, null)); if (sr.app != null && sr.app.thread != null) { - sendServiceArgsLocked(sr, false); + // We always run in the foreground, since this is called as + // part of the "remove task" UI operation. + sendServiceArgsLocked(sr, true, false); } } } @@ -1880,7 +1923,8 @@ public final class ActiveServices { if (proc.executingServices.size() == 0 || proc.thread == null) { return; } - long maxTime = SystemClock.uptimeMillis() - SERVICE_TIMEOUT; + long maxTime = SystemClock.uptimeMillis() - + (proc.execServicesFg ? SERVICE_TIMEOUT : SERVICE_BACKGROUND_TIMEOUT); ServiceRecord timeout = null; long nextTime = 0; for (int i=proc.executingServices.size()-1; i>=0; i--) { @@ -1900,7 +1944,8 @@ public final class ActiveServices { Message msg = mAm.mHandler.obtainMessage( ActivityManagerService.SERVICE_TIMEOUT_MSG); msg.obj = proc; - mAm.mHandler.sendMessageAtTime(msg, nextTime+SERVICE_TIMEOUT); + mAm.mHandler.sendMessageAtTime(msg, proc.execServicesFg + ? (nextTime+SERVICE_TIMEOUT) : (nextTime+ SERVICE_BACKGROUND_TIMEOUT)); } } diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 3eceff7cab6c..3d0fe0f33087 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -4491,12 +4491,12 @@ public final class ActivityManagerService extends ActivityManagerNative app.thread = thread; app.curAdj = app.setAdj = -100; - app.curSchedGroup = Process.THREAD_GROUP_DEFAULT; - app.setSchedGroup = Process.THREAD_GROUP_BG_NONINTERACTIVE; + app.curSchedGroup = app.setSchedGroup = Process.THREAD_GROUP_DEFAULT; app.forcingToForeground = null; app.foregroundServices = false; app.hasShownUi = false; app.debugging = false; + app.cached = false; mHandler.removeMessages(PROC_START_TIMEOUT_MSG, app); @@ -10295,6 +10295,22 @@ public final class ActivityManagerService extends ActivityManagerNative return needSep; } + void printOomLevel(PrintWriter pw, String name, int adj) { + pw.print(" "); + if (adj >= 0) { + pw.print(' '); + if (adj < 10) pw.print(' '); + } else { + if (adj > -10) pw.print(' '); + } + pw.print(adj); + pw.print(": "); + pw.print(name); + pw.print(" ("); + pw.print(mProcessList.getMemLevel(adj)/1024); + pw.println(" kB)"); + } + boolean dumpOomLocked(FileDescriptor fd, PrintWriter pw, String[] args, int opti, boolean dumpAll) { boolean needSep = false; @@ -10303,19 +10319,19 @@ public final class ActivityManagerService extends ActivityManagerNative if (needSep) pw.println(); needSep = true; pw.println(" OOM levels:"); - pw.print(" SYSTEM_ADJ: "); pw.println(ProcessList.SYSTEM_ADJ); - pw.print(" PERSISTENT_PROC_ADJ: "); pw.println(ProcessList.PERSISTENT_PROC_ADJ); - pw.print(" FOREGROUND_APP_ADJ: "); pw.println(ProcessList.FOREGROUND_APP_ADJ); - pw.print(" VISIBLE_APP_ADJ: "); pw.println(ProcessList.VISIBLE_APP_ADJ); - pw.print(" PERCEPTIBLE_APP_ADJ: "); pw.println(ProcessList.PERCEPTIBLE_APP_ADJ); - pw.print(" BACKUP_APP_ADJ: "); pw.println(ProcessList.BACKUP_APP_ADJ); - pw.print(" HEAVY_WEIGHT_APP_ADJ: "); pw.println(ProcessList.HEAVY_WEIGHT_APP_ADJ); - pw.print(" SERVICE_ADJ: "); pw.println(ProcessList.SERVICE_ADJ); - pw.print(" HOME_APP_ADJ: "); pw.println(ProcessList.HOME_APP_ADJ); - pw.print(" PREVIOUS_APP_ADJ: "); pw.println(ProcessList.PREVIOUS_APP_ADJ); - pw.print(" SERVICE_B_ADJ: "); pw.println(ProcessList.SERVICE_B_ADJ); - pw.print(" CACHED_APP_MIN_ADJ: "); pw.println(ProcessList.CACHED_APP_MIN_ADJ); - pw.print(" CACHED_APP_MAX_ADJ: "); pw.println(ProcessList.CACHED_APP_MAX_ADJ); + printOomLevel(pw, "SYSTEM_ADJ", ProcessList.SYSTEM_ADJ); + printOomLevel(pw, "PERSISTENT_PROC_ADJ", ProcessList.PERSISTENT_PROC_ADJ); + printOomLevel(pw, "FOREGROUND_APP_ADJ", ProcessList.FOREGROUND_APP_ADJ); + printOomLevel(pw, "VISIBLE_APP_ADJ", ProcessList.VISIBLE_APP_ADJ); + printOomLevel(pw, "PERCEPTIBLE_APP_ADJ", ProcessList.PERCEPTIBLE_APP_ADJ); + printOomLevel(pw, "BACKUP_APP_ADJ", ProcessList.BACKUP_APP_ADJ); + printOomLevel(pw, "HEAVY_WEIGHT_APP_ADJ", ProcessList.HEAVY_WEIGHT_APP_ADJ); + printOomLevel(pw, "SERVICE_ADJ", ProcessList.SERVICE_ADJ); + printOomLevel(pw, "HOME_APP_ADJ", ProcessList.HOME_APP_ADJ); + printOomLevel(pw, "PREVIOUS_APP_ADJ", ProcessList.PREVIOUS_APP_ADJ); + printOomLevel(pw, "SERVICE_B_ADJ", ProcessList.SERVICE_B_ADJ); + printOomLevel(pw, "CACHED_APP_MIN_ADJ", ProcessList.CACHED_APP_MIN_ADJ); + printOomLevel(pw, "CACHED_APP_MAX_ADJ", ProcessList.CACHED_APP_MAX_ADJ); if (needSep) pw.println(); needSep = true; @@ -11515,10 +11531,29 @@ public final class ActivityManagerService extends ActivityManagerNative pw.print(" "); pw.print(unshared); pw.print(" kB unshared; "); pw.print(voltile); pw.println(" kB volatile"); } + pw.print(" TUNING: "); + pw.print(mProcessList.getMemLevel(ProcessList.CACHED_APP_MAX_ADJ)/1024); + pw.print(" kB"); + if (ActivityManager.isLowRamDeviceStatic()) { + pw.print(" (low-ram)"); + } + if (ActivityManager.isHighEndGfx()) { + pw.print(" (high-end-gfx)"); + } + pw.println(); } else { pw.print("ksm,"); pw.print(sharing); pw.print(","); pw.print(shared); pw.print(","); pw.print(unshared); pw.print(","); pw.println(voltile); + pw.print("tuning,"); + pw.print(mProcessList.getMemLevel(ProcessList.CACHED_APP_MAX_ADJ)/1024); + if (ActivityManager.isLowRamDeviceStatic()) { + pw.print(",low-ram"); + } + if (ActivityManager.isHighEndGfx()) { + pw.print(",high-end-gfx"); + } + pw.println(); } } } @@ -13558,9 +13593,11 @@ public final class ActivityManagerService extends ActivityManagerNative // An app that is currently executing a service callback also // counts as being in the foreground. adj = ProcessList.FOREGROUND_APP_ADJ; - schedGroup = Process.THREAD_GROUP_DEFAULT; + schedGroup = app.execServicesFg ? + Process.THREAD_GROUP_DEFAULT : Process.THREAD_GROUP_BG_NONINTERACTIVE; app.adjType = "exec-service"; procState = ActivityManager.PROCESS_STATE_SERVICE; + //Slog.i(TAG, "EXEC " + (app.execServicesFg ? "FG" : "BG") + ": " + app); } else { // As far as we know the process is empty. We may change our mind later. schedGroup = Process.THREAD_GROUP_BG_NONINTERACTIVE; @@ -14879,7 +14916,7 @@ public final class ActivityManagerService extends ActivityManagerNative for (int i=N-1; i>=0; i--) { ProcessRecord app = mLruProcesses.get(i); if (allChanged || app.procStateChanged) { - app.setProcessTrackerState(trackerMemFactor, now); + app.setProcessTrackerState(ProcessTracker.ADJ_MEM_FACTOR_NORMAL, now); } if ((app.curProcState >= ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND || app.systemNoUi) && app.pendingUiClean) { diff --git a/services/java/com/android/server/am/ProcessList.java b/services/java/com/android/server/am/ProcessList.java index ae5c65278de0..884f280b5743 100644 --- a/services/java/com/android/server/am/ProcessList.java +++ b/services/java/com/android/server/am/ProcessList.java @@ -194,10 +194,14 @@ final class ProcessList { float scaleMem = ((float)(mTotalMemMb-300))/(700-300); // Scale buckets from screen size. - int minSize = 320*480; // 153600 + int minSize = 480*800; // 384000 int maxSize = 1280*800; // 1024000 230400 870400 .264 float scaleDisp = ((float)(displayWidth*displayHeight)-minSize)/(maxSize-minSize); - //Slog.i("XXXXXX", "scaleDisp=" + scaleDisp + " dw=" + displayWidth + " dh=" + displayHeight); + if (false) { + Slog.i("XXXXXX", "scaleMem=" + scaleMem); + Slog.i("XXXXXX", "scaleDisp=" + scaleDisp + " dw=" + displayWidth + + " dh=" + displayHeight); + } StringBuilder adjString = new StringBuilder(); StringBuilder memString = new StringBuilder(); @@ -205,8 +209,13 @@ final class ProcessList { float scale = scaleMem > scaleDisp ? scaleMem : scaleDisp; if (scale < 0) scale = 0; else if (scale > 1) scale = 1; - int minfree_adj = Resources.getSystem().getInteger(com.android.internal.R.integer.config_lowMemoryKillerMinFreeKbytesAdjust); - int minfree_abs = Resources.getSystem().getInteger(com.android.internal.R.integer.config_lowMemoryKillerMinFreeKbytesAbsolute); + int minfree_adj = Resources.getSystem().getInteger( + com.android.internal.R.integer.config_lowMemoryKillerMinFreeKbytesAdjust); + int minfree_abs = Resources.getSystem().getInteger( + com.android.internal.R.integer.config_lowMemoryKillerMinFreeKbytesAbsolute); + if (false) { + Slog.i("XXXXXX", "minfree_adj=" + minfree_adj + " minfree_abs=" + minfree_abs); + } for (int i=0; i<mOomAdj.length; i++) { long low = mOomMinFreeLow[i]; diff --git a/services/java/com/android/server/am/ProcessRecord.java b/services/java/com/android/server/am/ProcessRecord.java index 1b45d309cccc..cade2bbecab9 100644 --- a/services/java/com/android/server/am/ProcessRecord.java +++ b/services/java/com/android/server/am/ProcessRecord.java @@ -39,7 +39,6 @@ import android.util.TimeUtils; import java.io.PrintWriter; import java.util.ArrayList; -import java.util.HashSet; /** * Full information about a particular process that @@ -138,7 +137,8 @@ final class ProcessRecord { // All ContentProviderRecord process is using final ArrayList<ContentProviderConnection> conProviders = new ArrayList<ContentProviderConnection>(); - + + boolean execServicesFg; // do we need to be executing services in the foreground? boolean persistent; // always keep this application running? boolean crashing; // are we in the process of crashing? Dialog crashDialog; // dialog being displayed due to crash. @@ -301,7 +301,8 @@ final class ProcessRecord { } } if (executingServices.size() > 0) { - pw.print(prefix); pw.println("Executing Services:"); + pw.print(prefix); pw.print("Executing Services (fg="); + pw.print(execServicesFg); pw.println(")"); for (int i=0; i<executingServices.size(); i++) { pw.print(prefix); pw.print(" - "); pw.println(executingServices.valueAt(i)); } diff --git a/services/java/com/android/server/am/ProcessTracker.java b/services/java/com/android/server/am/ProcessTracker.java index f37351f4ff07..6b98b035aaf6 100644 --- a/services/java/com/android/server/am/ProcessTracker.java +++ b/services/java/com/android/server/am/ProcessTracker.java @@ -815,8 +815,7 @@ public final class ProcessTracker { mRuntime = runtime; } } - String webview = SystemProperties.getBoolean( - WebViewFactory.WEBVIEW_EXPERIMENTAL_PROPERTY, false) ? "chromeview" : "webview"; + String webview = WebViewFactory.useExperimentalWebView() ? "chromeview" : "webview"; if (!Objects.equals(webview, mWebView)) { changed = true; if (update) { diff --git a/services/java/com/android/server/am/ServiceRecord.java b/services/java/com/android/server/am/ServiceRecord.java index fe9a71cf288d..19dda2a690f0 100644 --- a/services/java/com/android/server/am/ServiceRecord.java +++ b/services/java/com/android/server/am/ServiceRecord.java @@ -92,7 +92,9 @@ final class ServiceRecord extends Binder { boolean stopIfKilled; // last onStart() said to stop if service killed? boolean callStart; // last onStart() has asked to alway be called on restart. int executeNesting; // number of outstanding operations keeping foreground. + boolean executeFg; // should we be executing in the foreground? long executingStart; // start time of last execute request. + boolean createdFromFg; // was this service last created due to a foreground process call? int crashCount; // number of times proc has crashed with service running int totalRestartCount; // number of times we have had to restart. int restartCount; // number of restarts performed in a row. @@ -226,22 +228,25 @@ final class ServiceRecord extends Binder { TimeUtils.formatDuration(createTime, nowReal, pw); pw.print(" lastActivity="); TimeUtils.formatDuration(lastActivity, now, pw); - pw.println(""); - pw.print(prefix); pw.print("executingStart="); - TimeUtils.formatDuration(executingStart, now, pw); - pw.print(" restartTime="); + pw.println(); + pw.print(prefix); pw.print("restartTime="); TimeUtils.formatDuration(restartTime, now, pw); - pw.println(""); + pw.print(" createdFromFg="); pw.println(createdFromFg); if (startRequested || lastStartId != 0) { pw.print(prefix); pw.print("startRequested="); pw.print(startRequested); pw.print(" stopIfKilled="); pw.print(stopIfKilled); pw.print(" callStart="); pw.print(callStart); pw.print(" lastStartId="); pw.println(lastStartId); } - if (executeNesting != 0 || crashCount != 0 || restartCount != 0 - || restartDelay != 0 || nextRestartTime != 0) { + if (executeNesting != 0) { pw.print(prefix); pw.print("executeNesting="); pw.print(executeNesting); - pw.print(" restartCount="); pw.print(restartCount); + pw.print(" executeFg="); pw.print(executeFg); + pw.print(" executingStart="); + TimeUtils.formatDuration(executingStart, now, pw); + } + if (crashCount != 0 || restartCount != 0 + || restartDelay != 0 || nextRestartTime != 0) { + pw.print(prefix); pw.print("restartCount="); pw.print(restartCount); pw.print(" restartDelay="); TimeUtils.formatDuration(restartDelay, now, pw); pw.print(" nextRestartTime="); @@ -282,7 +287,8 @@ final class ServiceRecord extends Binder { ServiceRecord(ActivityManagerService ams, BatteryStatsImpl.Uid.Pkg.Serv servStats, ComponentName name, - Intent.FilterComparison intent, ServiceInfo sInfo, Runnable restarter) { + Intent.FilterComparison intent, ServiceInfo sInfo, boolean callerIsFg, + Runnable restarter) { this.ams = ams; this.stats = servStats; this.name = name; @@ -301,6 +307,7 @@ final class ServiceRecord extends Binder { createTime = SystemClock.elapsedRealtime(); lastActivity = SystemClock.uptimeMillis(); userId = UserHandle.getUserId(appInfo.uid); + createdFromFg = callerIsFg; } public ProcessTracker.ServiceState getTracker() { diff --git a/services/java/com/android/server/content/SyncOperation.java b/services/java/com/android/server/content/SyncOperation.java index d1c682bb7c1f..ce1dde4aad79 100644 --- a/services/java/com/android/server/content/SyncOperation.java +++ b/services/java/com/android/server/content/SyncOperation.java @@ -304,8 +304,9 @@ public class SyncOperation implements Comparable { } /** - * If two SyncOperation intervals are disjoint, the smaller is the interval that occurs before. - * If the intervals overlap, the two are considered equal. + * SyncOperations are sorted based on their earliest effective run time. + * This comparator is used to sort the SyncOps at a given time when + * deciding which to run, so earliest run time is the best criteria. */ @Override public int compareTo(Object o) { @@ -313,17 +314,15 @@ public class SyncOperation implements Comparable { if (expedited != other.expedited) { return expedited ? -1 : 1; } - long x1 = effectiveRunTime - flexTime; - long y1 = effectiveRunTime; - long x2 = other.effectiveRunTime - other.flexTime; - long y2 = other.effectiveRunTime; - // Overlapping intervals. - if ((x1 <= y2 && x1 >= x2) || (x2 <= y1 && x2 >= x1)) { - return 0; - } - if (x1 < x2 && y1 < x2) { + long thisIntervalStart = Math.max(effectiveRunTime - flexTime, 0); + long otherIntervalStart = Math.max( + other.effectiveRunTime - other.flexTime, 0); + if (thisIntervalStart < otherIntervalStart) { return -1; + } else if (otherIntervalStart < thisIntervalStart) { + return 1; + } else { + return 0; } - return 1; } } diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 7a0121993893..cd2dc211273f 100755 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -5383,7 +5383,7 @@ public class PackageManagerService extends IPackageManager.Stub { == PackageManager.SIGNATURE_MATCH); if (!allowed && (bp.protectionLevel & PermissionInfo.PROTECTION_FLAG_SYSTEM) != 0) { - if (isPrivilegedApp(pkg)) { + if (isSystemApp(pkg)) { // For updated system applications, a system permission // is granted only if it had been defined by the original application. if (isUpdatedSystemApp(pkg)) { @@ -5391,7 +5391,11 @@ public class PackageManagerService extends IPackageManager.Stub { .getDisabledSystemPkgLPr(pkg.packageName); final GrantedPermissions origGp = sysPs.sharedUser != null ? sysPs.sharedUser : sysPs; + if (origGp.grantedPermissions.contains(perm)) { + // If the original was granted this permission, we take + // that grant decision as read and propagate it to the + // update. allowed = true; } else { // The system apk may have been updated with an older @@ -5413,7 +5417,7 @@ public class PackageManagerService extends IPackageManager.Stub { } } } else { - allowed = true; + allowed = isPrivilegedApp(pkg); } } } diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 9a5026d0ebc2..304fbb1ad89c 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -7637,7 +7637,7 @@ public class WindowManagerService extends IWindowManager.Stub private void readForcedDisplaySizeAndDensityLocked(final DisplayContent displayContent) { String sizeStr = Settings.Global.getString(mContext.getContentResolver(), Settings.Global.DISPLAY_SIZE_FORCED); - if (sizeStr == null) { + if (sizeStr == null || sizeStr.length() == 0) { sizeStr = SystemProperties.get(SIZE_OVERRIDE, null); } if (sizeStr != null && sizeStr.length() > 0) { @@ -7661,7 +7661,7 @@ public class WindowManagerService extends IWindowManager.Stub } String densityStr = Settings.Global.getString(mContext.getContentResolver(), Settings.Global.DISPLAY_DENSITY_FORCED); - if (densityStr == null) { + if (densityStr == null || densityStr.length() == 0) { densityStr = SystemProperties.get(DENSITY_OVERRIDE, null); } if (densityStr != null && densityStr.length() > 0) { diff --git a/services/jni/Android.mk b/services/jni/Android.mk index 957c44870491..3946f15d2124 100644 --- a/services/jni/Android.mk +++ b/services/jni/Android.mk @@ -4,7 +4,6 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ com_android_server_AlarmManagerService.cpp \ com_android_server_AssetAtlasService.cpp \ - com_android_server_BatteryService.cpp \ com_android_server_input_InputApplicationHandle.cpp \ com_android_server_input_InputManagerService.cpp \ com_android_server_input_InputWindowHandle.cpp \ diff --git a/services/jni/com_android_server_BatteryService.cpp b/services/jni/com_android_server_BatteryService.cpp deleted file mode 100644 index 0c8b4a59427e..000000000000 --- a/services/jni/com_android_server_BatteryService.cpp +++ /dev/null @@ -1,474 +0,0 @@ -/* - * Copyright (C) 2008 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. - */ - -#define LOG_TAG "BatteryService" - -#include "JNIHelp.h" -#include "jni.h" -#include <utils/Log.h> -#include <utils/misc.h> - -#include <fcntl.h> -#include <stdio.h> -#include <string.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <arpa/inet.h> -#include <netinet/in.h> -#include <stdlib.h> -#include <errno.h> -#include <unistd.h> -#include <dirent.h> -#include <linux/ioctl.h> -#include <utils/Vector.h> -#include <utils/String8.h> - -namespace android { - -#define POWER_SUPPLY_PATH "/sys/class/power_supply" - -struct FieldIds { - // members - jfieldID mAcOnline; - jfieldID mUsbOnline; - jfieldID mWirelessOnline; - jfieldID mBatteryStatus; - jfieldID mBatteryHealth; - jfieldID mBatteryPresent; - jfieldID mBatteryLevel; - jfieldID mBatteryVoltage; - jfieldID mBatteryTemperature; - jfieldID mBatteryTechnology; -}; -static FieldIds gFieldIds; - -struct BatteryManagerConstants { - jint statusUnknown; - jint statusCharging; - jint statusDischarging; - jint statusNotCharging; - jint statusFull; - jint healthUnknown; - jint healthGood; - jint healthOverheat; - jint healthDead; - jint healthOverVoltage; - jint healthUnspecifiedFailure; - jint healthCold; -}; -static BatteryManagerConstants gConstants; - -struct PowerSupplyPaths { - String8 batteryStatusPath; - String8 batteryHealthPath; - String8 batteryPresentPath; - String8 batteryCapacityPath; - String8 batteryVoltagePath; - String8 batteryTemperaturePath; - String8 batteryTechnologyPath; -}; -static PowerSupplyPaths gPaths; - -static Vector<String8> gChargerNames; - -static int gVoltageDivisor = 1; - -enum PowerSupplyType { - ANDROID_POWER_SUPPLY_TYPE_UNKNOWN = 0, - ANDROID_POWER_SUPPLY_TYPE_AC, - ANDROID_POWER_SUPPLY_TYPE_USB, - ANDROID_POWER_SUPPLY_TYPE_WIRELESS, - ANDROID_POWER_SUPPLY_TYPE_BATTERY -}; - -static jint getBatteryStatus(const char* status) -{ - switch (status[0]) { - case 'C': return gConstants.statusCharging; // Charging - case 'D': return gConstants.statusDischarging; // Discharging - case 'F': return gConstants.statusFull; // Full - case 'N': return gConstants.statusNotCharging; // Not charging - case 'U': return gConstants.statusUnknown; // Unknown - - default: { - ALOGW("Unknown battery status '%s'", status); - return gConstants.statusUnknown; - } - } -} - -static jint getBatteryHealth(const char* status) -{ - switch (status[0]) { - case 'C': return gConstants.healthCold; // Cold - case 'D': return gConstants.healthDead; // Dead - case 'G': return gConstants.healthGood; // Good - case 'O': { - if (strcmp(status, "Overheat") == 0) { - return gConstants.healthOverheat; - } else if (strcmp(status, "Over voltage") == 0) { - return gConstants.healthOverVoltage; - } - ALOGW("Unknown battery health[1] '%s'", status); - return gConstants.healthUnknown; - } - - case 'U': { - if (strcmp(status, "Unspecified failure") == 0) { - return gConstants.healthUnspecifiedFailure; - } else if (strcmp(status, "Unknown") == 0) { - return gConstants.healthUnknown; - } - // fall through - } - - default: { - ALOGW("Unknown battery health[2] '%s'", status); - return gConstants.healthUnknown; - } - } -} - -static int readFromFile(const String8& path, char* buf, size_t size) -{ - if (path.isEmpty()) - return -1; - int fd = open(path.string(), O_RDONLY, 0); - if (fd == -1) { - ALOGE("Could not open '%s'", path.string()); - return -1; - } - - ssize_t count = read(fd, buf, size); - if (count > 0) { - while (count > 0 && buf[count-1] == '\n') - count--; - buf[count] = '\0'; - } else { - buf[0] = '\0'; - } - - close(fd); - return count; -} - -static void setBooleanField(JNIEnv* env, jobject obj, const String8& path, jfieldID fieldID) -{ - const int SIZE = 16; - char buf[SIZE]; - - jboolean value = false; - if (readFromFile(path, buf, SIZE) > 0) { - if (buf[0] != '0') { - value = true; - } - } - env->SetBooleanField(obj, fieldID, value); -} - -static void setIntField(JNIEnv* env, jobject obj, const String8& path, jfieldID fieldID) -{ - const int SIZE = 128; - char buf[SIZE]; - - jint value = 0; - if (readFromFile(path, buf, SIZE) > 0) { - value = atoi(buf); - } - env->SetIntField(obj, fieldID, value); -} - -static void setVoltageField(JNIEnv* env, jobject obj, const String8& path, jfieldID fieldID) -{ - const int SIZE = 128; - char buf[SIZE]; - - jint value = 0; - if (readFromFile(path, buf, SIZE) > 0) { - value = atoi(buf); - value /= gVoltageDivisor; - } - env->SetIntField(obj, fieldID, value); -} - -static PowerSupplyType readPowerSupplyType(const String8& path) { - const int SIZE = 128; - char buf[SIZE]; - int length = readFromFile(path, buf, SIZE); - - if (length <= 0) - return ANDROID_POWER_SUPPLY_TYPE_UNKNOWN; - if (buf[length - 1] == '\n') - buf[length - 1] = 0; - if (strcmp(buf, "Battery") == 0) - return ANDROID_POWER_SUPPLY_TYPE_BATTERY; - else if (strcmp(buf, "Mains") == 0 || strcmp(buf, "USB_DCP") == 0 || - strcmp(buf, "USB_CDP") == 0 || strcmp(buf, "USB_ACA") == 0) - return ANDROID_POWER_SUPPLY_TYPE_AC; - else if (strcmp(buf, "USB") == 0) - return ANDROID_POWER_SUPPLY_TYPE_USB; - else if (strcmp(buf, "Wireless") == 0) - return ANDROID_POWER_SUPPLY_TYPE_WIRELESS; - else - return ANDROID_POWER_SUPPLY_TYPE_UNKNOWN; -} - -static void android_server_BatteryService_update(JNIEnv* env, jobject obj) -{ - setBooleanField(env, obj, gPaths.batteryPresentPath, gFieldIds.mBatteryPresent); - - setIntField(env, obj, gPaths.batteryCapacityPath, gFieldIds.mBatteryLevel); - setVoltageField(env, obj, gPaths.batteryVoltagePath, gFieldIds.mBatteryVoltage); - setIntField(env, obj, gPaths.batteryTemperaturePath, gFieldIds.mBatteryTemperature); - - const int SIZE = 128; - char buf[SIZE]; - - if (readFromFile(gPaths.batteryStatusPath, buf, SIZE) > 0) - env->SetIntField(obj, gFieldIds.mBatteryStatus, getBatteryStatus(buf)); - else - env->SetIntField(obj, gFieldIds.mBatteryStatus, - gConstants.statusUnknown); - - if (readFromFile(gPaths.batteryHealthPath, buf, SIZE) > 0) - env->SetIntField(obj, gFieldIds.mBatteryHealth, getBatteryHealth(buf)); - - if (readFromFile(gPaths.batteryTechnologyPath, buf, SIZE) > 0) - env->SetObjectField(obj, gFieldIds.mBatteryTechnology, env->NewStringUTF(buf)); - - unsigned int i; - String8 path; - jboolean acOnline = false; - jboolean usbOnline = false; - jboolean wirelessOnline = false; - - for (i = 0; i < gChargerNames.size(); i++) { - path.clear(); - path.appendFormat("%s/%s/online", POWER_SUPPLY_PATH, - gChargerNames[i].string()); - - if (readFromFile(path, buf, SIZE) > 0) { - if (buf[0] != '0') { - path.clear(); - path.appendFormat("%s/%s/type", POWER_SUPPLY_PATH, - gChargerNames[i].string()); - switch(readPowerSupplyType(path)) { - case ANDROID_POWER_SUPPLY_TYPE_AC: - acOnline = true; - break; - case ANDROID_POWER_SUPPLY_TYPE_USB: - usbOnline = true; - break; - case ANDROID_POWER_SUPPLY_TYPE_WIRELESS: - wirelessOnline = true; - break; - default: - ALOGW("%s: Unknown power supply type", - gChargerNames[i].string()); - } - } - } - } - - env->SetBooleanField(obj, gFieldIds.mAcOnline, acOnline); - env->SetBooleanField(obj, gFieldIds.mUsbOnline, usbOnline); - env->SetBooleanField(obj, gFieldIds.mWirelessOnline, wirelessOnline); -} - -static JNINativeMethod sMethods[] = { - /* name, signature, funcPtr */ - {"native_update", "()V", (void*)android_server_BatteryService_update}, -}; - -int register_android_server_BatteryService(JNIEnv* env) -{ - String8 path; - struct dirent* entry; - - DIR* dir = opendir(POWER_SUPPLY_PATH); - if (dir == NULL) { - ALOGE("Could not open %s\n", POWER_SUPPLY_PATH); - } else { - while ((entry = readdir(dir))) { - const char* name = entry->d_name; - - // ignore "." and ".." - if (name[0] == '.' && (name[1] == 0 || (name[1] == '.' && name[2] == 0))) { - continue; - } - - char buf[20]; - // Look for "type" file in each subdirectory - path.clear(); - path.appendFormat("%s/%s/type", POWER_SUPPLY_PATH, name); - switch(readPowerSupplyType(path)) { - case ANDROID_POWER_SUPPLY_TYPE_AC: - case ANDROID_POWER_SUPPLY_TYPE_USB: - case ANDROID_POWER_SUPPLY_TYPE_WIRELESS: - path.clear(); - path.appendFormat("%s/%s/online", POWER_SUPPLY_PATH, name); - if (access(path.string(), R_OK) == 0) - gChargerNames.add(String8(name)); - break; - - case ANDROID_POWER_SUPPLY_TYPE_BATTERY: - path.clear(); - path.appendFormat("%s/%s/status", POWER_SUPPLY_PATH, name); - if (access(path, R_OK) == 0) - gPaths.batteryStatusPath = path; - path.clear(); - path.appendFormat("%s/%s/health", POWER_SUPPLY_PATH, name); - if (access(path, R_OK) == 0) - gPaths.batteryHealthPath = path; - path.clear(); - path.appendFormat("%s/%s/present", POWER_SUPPLY_PATH, name); - if (access(path, R_OK) == 0) - gPaths.batteryPresentPath = path; - path.clear(); - path.appendFormat("%s/%s/capacity", POWER_SUPPLY_PATH, name); - if (access(path, R_OK) == 0) - gPaths.batteryCapacityPath = path; - - path.clear(); - path.appendFormat("%s/%s/voltage_now", POWER_SUPPLY_PATH, name); - if (access(path, R_OK) == 0) { - gPaths.batteryVoltagePath = path; - // voltage_now is in microvolts, not millivolts - gVoltageDivisor = 1000; - } else { - path.clear(); - path.appendFormat("%s/%s/batt_vol", POWER_SUPPLY_PATH, name); - if (access(path, R_OK) == 0) - gPaths.batteryVoltagePath = path; - } - - path.clear(); - path.appendFormat("%s/%s/temp", POWER_SUPPLY_PATH, name); - if (access(path, R_OK) == 0) { - gPaths.batteryTemperaturePath = path; - } else { - path.clear(); - path.appendFormat("%s/%s/batt_temp", POWER_SUPPLY_PATH, name); - if (access(path, R_OK) == 0) - gPaths.batteryTemperaturePath = path; - } - - path.clear(); - path.appendFormat("%s/%s/technology", POWER_SUPPLY_PATH, name); - if (access(path, R_OK) == 0) - gPaths.batteryTechnologyPath = path; - break; - - case ANDROID_POWER_SUPPLY_TYPE_UNKNOWN: - break; - } - } - closedir(dir); - } - - if (!gChargerNames.size()) - ALOGE("No charger supplies found"); - if (gPaths.batteryStatusPath.isEmpty()) - ALOGE("batteryStatusPath not found"); - if (gPaths.batteryHealthPath.isEmpty()) - ALOGE("batteryHealthPath not found"); - if (gPaths.batteryPresentPath.isEmpty()) - ALOGE("batteryPresentPath not found"); - if (gPaths.batteryCapacityPath.isEmpty()) - ALOGE("batteryCapacityPath not found"); - if (gPaths.batteryVoltagePath.isEmpty()) - ALOGE("batteryVoltagePath not found"); - if (gPaths.batteryTemperaturePath.isEmpty()) - ALOGE("batteryTemperaturePath not found"); - if (gPaths.batteryTechnologyPath.isEmpty()) - ALOGE("batteryTechnologyPath not found"); - - jclass clazz = env->FindClass("com/android/server/BatteryService"); - - if (clazz == NULL) { - ALOGE("Can't find com/android/server/BatteryService"); - return -1; - } - - gFieldIds.mAcOnline = env->GetFieldID(clazz, "mAcOnline", "Z"); - gFieldIds.mUsbOnline = env->GetFieldID(clazz, "mUsbOnline", "Z"); - gFieldIds.mWirelessOnline = env->GetFieldID(clazz, "mWirelessOnline", "Z"); - gFieldIds.mBatteryStatus = env->GetFieldID(clazz, "mBatteryStatus", "I"); - gFieldIds.mBatteryHealth = env->GetFieldID(clazz, "mBatteryHealth", "I"); - gFieldIds.mBatteryPresent = env->GetFieldID(clazz, "mBatteryPresent", "Z"); - gFieldIds.mBatteryLevel = env->GetFieldID(clazz, "mBatteryLevel", "I"); - gFieldIds.mBatteryTechnology = env->GetFieldID(clazz, "mBatteryTechnology", "Ljava/lang/String;"); - gFieldIds.mBatteryVoltage = env->GetFieldID(clazz, "mBatteryVoltage", "I"); - gFieldIds.mBatteryTemperature = env->GetFieldID(clazz, "mBatteryTemperature", "I"); - - LOG_FATAL_IF(gFieldIds.mAcOnline == NULL, "Unable to find BatteryService.AC_ONLINE_PATH"); - LOG_FATAL_IF(gFieldIds.mUsbOnline == NULL, "Unable to find BatteryService.USB_ONLINE_PATH"); - LOG_FATAL_IF(gFieldIds.mWirelessOnline == NULL, "Unable to find BatteryService.WIRELESS_ONLINE_PATH"); - LOG_FATAL_IF(gFieldIds.mBatteryStatus == NULL, "Unable to find BatteryService.BATTERY_STATUS_PATH"); - LOG_FATAL_IF(gFieldIds.mBatteryHealth == NULL, "Unable to find BatteryService.BATTERY_HEALTH_PATH"); - LOG_FATAL_IF(gFieldIds.mBatteryPresent == NULL, "Unable to find BatteryService.BATTERY_PRESENT_PATH"); - LOG_FATAL_IF(gFieldIds.mBatteryLevel == NULL, "Unable to find BatteryService.BATTERY_CAPACITY_PATH"); - LOG_FATAL_IF(gFieldIds.mBatteryVoltage == NULL, "Unable to find BatteryService.BATTERY_VOLTAGE_PATH"); - LOG_FATAL_IF(gFieldIds.mBatteryTemperature == NULL, "Unable to find BatteryService.BATTERY_TEMPERATURE_PATH"); - LOG_FATAL_IF(gFieldIds.mBatteryTechnology == NULL, "Unable to find BatteryService.BATTERY_TECHNOLOGY_PATH"); - - clazz = env->FindClass("android/os/BatteryManager"); - - if (clazz == NULL) { - ALOGE("Can't find android/os/BatteryManager"); - return -1; - } - - gConstants.statusUnknown = env->GetStaticIntField(clazz, - env->GetStaticFieldID(clazz, "BATTERY_STATUS_UNKNOWN", "I")); - - gConstants.statusCharging = env->GetStaticIntField(clazz, - env->GetStaticFieldID(clazz, "BATTERY_STATUS_CHARGING", "I")); - - gConstants.statusDischarging = env->GetStaticIntField(clazz, - env->GetStaticFieldID(clazz, "BATTERY_STATUS_DISCHARGING", "I")); - - gConstants.statusNotCharging = env->GetStaticIntField(clazz, - env->GetStaticFieldID(clazz, "BATTERY_STATUS_NOT_CHARGING", "I")); - - gConstants.statusFull = env->GetStaticIntField(clazz, - env->GetStaticFieldID(clazz, "BATTERY_STATUS_FULL", "I")); - - gConstants.healthUnknown = env->GetStaticIntField(clazz, - env->GetStaticFieldID(clazz, "BATTERY_HEALTH_UNKNOWN", "I")); - - gConstants.healthGood = env->GetStaticIntField(clazz, - env->GetStaticFieldID(clazz, "BATTERY_HEALTH_GOOD", "I")); - - gConstants.healthOverheat = env->GetStaticIntField(clazz, - env->GetStaticFieldID(clazz, "BATTERY_HEALTH_OVERHEAT", "I")); - - gConstants.healthDead = env->GetStaticIntField(clazz, - env->GetStaticFieldID(clazz, "BATTERY_HEALTH_DEAD", "I")); - - gConstants.healthOverVoltage = env->GetStaticIntField(clazz, - env->GetStaticFieldID(clazz, "BATTERY_HEALTH_OVER_VOLTAGE", "I")); - - gConstants.healthUnspecifiedFailure = env->GetStaticIntField(clazz, - env->GetStaticFieldID(clazz, "BATTERY_HEALTH_UNSPECIFIED_FAILURE", "I")); - - gConstants.healthCold = env->GetStaticIntField(clazz, - env->GetStaticFieldID(clazz, "BATTERY_HEALTH_COLD", "I")); - - return jniRegisterNativeMethods(env, "com/android/server/BatteryService", sMethods, NELEM(sMethods)); -} - -} /* namespace android */ diff --git a/services/jni/onload.cpp b/services/jni/onload.cpp index bb679aab250d..736ef24f52f2 100644 --- a/services/jni/onload.cpp +++ b/services/jni/onload.cpp @@ -21,7 +21,6 @@ namespace android { int register_android_server_AlarmManagerService(JNIEnv* env); -int register_android_server_BatteryService(JNIEnv* env); int register_android_server_InputApplicationHandle(JNIEnv* env); int register_android_server_InputWindowHandle(JNIEnv* env); int register_android_server_InputManager(JNIEnv* env); @@ -57,7 +56,6 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved) register_android_server_InputManager(env); register_android_server_LightsService(env); register_android_server_AlarmManagerService(env); - register_android_server_BatteryService(env); register_android_server_UsbDeviceManager(env); register_android_server_UsbHostManager(env); register_android_server_VibratorService(env); diff --git a/telephony/java/com/android/internal/telephony/DctConstants.java b/telephony/java/com/android/internal/telephony/DctConstants.java index 4d8342c2b356..4f1ae11ebeb5 100644 --- a/telephony/java/com/android/internal/telephony/DctConstants.java +++ b/telephony/java/com/android/internal/telephony/DctConstants.java @@ -106,7 +106,8 @@ public class DctConstants { public static final int APN_IMS_ID = 5; public static final int APN_FOTA_ID = 6; public static final int APN_CBS_ID = 7; - public static final int APN_NUM_TYPES = 8; + public static final int APN_IA_ID = 8; + public static final int APN_NUM_TYPES = 9; public static final int DISABLED = 0; public static final int ENABLED = 1; diff --git a/telephony/java/com/android/internal/telephony/PhoneConstants.java b/telephony/java/com/android/internal/telephony/PhoneConstants.java index 16ea625cce94..4a4a62b9640d 100644 --- a/telephony/java/com/android/internal/telephony/PhoneConstants.java +++ b/telephony/java/com/android/internal/telephony/PhoneConstants.java @@ -119,5 +119,7 @@ public class PhoneConstants { public static final String APN_TYPE_IMS = "ims"; /** APN type for CBS */ public static final String APN_TYPE_CBS = "cbs"; + /** APN type for IA Initial Attach APN */ + public static final String APN_TYPE_IA = "ia"; } diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml index bdd8aa6e0c14..1bb0db097500 100644 --- a/tests/HwAccelerationTest/AndroidManifest.xml +++ b/tests/HwAccelerationTest/AndroidManifest.xml @@ -41,6 +41,16 @@ </activity> <activity + android:name="PathOpsActivity" + android:label="Path/Ops" + android:theme="@android:style/Theme.Holo.Light"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="com.android.test.hwui.TEST" /> + </intent-filter> + </activity> + + <activity android:name="AssetsAtlasActivity" android:label="Atlas/Framework" android:theme="@android:style/Theme.Holo.Light"> @@ -735,7 +745,7 @@ android:name="PathsCacheActivity" android:label="Path/Cache"> <intent-filter> - <action android:name="android.intent.action.MAIN" /> + <action android:name="android.intent.action.MAIN" />` <category android:name="com.android.test.hwui.TEST" /> </intent-filter> </activity> diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/PathOpsActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/PathOpsActivity.java new file mode 100644 index 000000000000..b9927ac08523 --- /dev/null +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/PathOpsActivity.java @@ -0,0 +1,87 @@ +/* + * 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. + */ + +package com.android.test.hwui; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Path; +import android.os.Bundle; +import android.util.Log; +import android.view.View; + +@SuppressWarnings({"UnusedDeclaration"}) +public class PathOpsActivity extends Activity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + final PathsView view = new PathsView(this); + setContentView(view); + } + + public static class PathsView extends View { + private final Paint mPaint; + private Path[] mPaths; + private float mSize; + + + public PathsView(Context c) { + super(c); + + mPaint = new Paint(); + mPaint.setAntiAlias(true); + mPaint.setStyle(Paint.Style.FILL); + mPaint.setColor(Color.RED); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + + Path.Op[] ops = Path.Op.values(); + mPaths = new Path[ops.length]; + + mSize = w / (ops.length * 2.0f); + + Path p1 = new Path(); + p1.addRect(0.0f, 0.0f, mSize, mSize, Path.Direction.CW); + + Path p2 = new Path(); + p2.addCircle(mSize, mSize, mSize / 2.0f, Path.Direction.CW); + + for (int i = 0; i < ops.length; i++) { + mPaths[i] = new Path(); + if (!mPaths[i].op(p1, p2, ops[i])) { + Log.d("PathOps", ops[i].name() + " failed!"); + } + } + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + canvas.translate(mSize * 0.2f, getHeight() / 2.0f); + for (Path path : mPaths) { + canvas.drawPath(path, mPaint); + canvas.translate(mSize * 1.8f, 0.0f); + } + } + } +} |