diff options
221 files changed, 1785 insertions, 834 deletions
diff --git a/api/current.txt b/api/current.txt index ef6aed7..c048447 100644 --- a/api/current.txt +++ b/api/current.txt @@ -284,6 +284,7 @@ package android { field public static final int allContactsName = 16843468; // 0x10102cc field public static final int allowBackup = 16843392; // 0x1010280 field public static final int allowClearUserData = 16842757; // 0x1010005 + field public static final int allowEmbedded = 16843765; // 0x10103f5 field public static final int allowParallelSyncs = 16843570; // 0x1010332 field public static final int allowSingleTap = 16843353; // 0x1010259 field public static final int allowTaskReparenting = 16843268; // 0x1010204 diff --git a/cmds/app_process/app_main.cpp b/cmds/app_process/app_main.cpp index 859d83b..3481437 100644 --- a/cmds/app_process/app_main.cpp +++ b/cmds/app_process/app_main.cpp @@ -219,7 +219,7 @@ int main(int argc, char* const argv[]) char prop[PROP_VALUE_MAX]; if (property_get(ABI_LIST_PROPERTY, prop, NULL) == 0) { - LOG_ALWAYS_FATAL("app_process: Unable to deterimine ABI list from property %s.", + LOG_ALWAYS_FATAL("app_process: Unable to determine ABI list from property %s.", ABI_LIST_PROPERTY); return 11; } diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index db08a41..d7170e8 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -1816,6 +1816,27 @@ public class DevicePolicyManager { /** * @hide + * @param userId the userId of a managed profile profile. + * + * @return whether or not the managed profile is enabled. + * @throws IllegalArgumentException if the userId is invalid. + */ + public boolean isProfileEnabled(int userId) throws IllegalArgumentException { + if (mService != null) { + try { + return mService.isProfileEnabled(userId); + } catch (RemoteException re) { + Log.w(TAG, "Failed to get status for owner profile."); + throw new IllegalArgumentException( + "Failed to get status for owner profile.", re); + } + } + return true; + } + + + /** + * @hide * @return the human readable name of the organisation associated with this DPM or null if * one is not set. * @throws IllegalArgumentException if the userId is invalid. diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 4ed85e9..85ba58b 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -109,6 +109,7 @@ interface IDevicePolicyManager { String getProfileOwner(int userHandle); String getProfileOwnerName(int userHandle); void setProfileEnabled(in ComponentName who); + boolean isProfileEnabled(int userHandle); boolean installCaCert(in byte[] certBuffer); void uninstallCaCert(in byte[] certBuffer); diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index 9916476..c53e545 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -198,7 +198,7 @@ public class ActivityInfo extends ComponentInfo /** * @hide Bit in {@link #flags}: If set, this component will only be seen * by the primary user. Only works with broadcast receivers. Set from the - * {@link android.R.attr#primaryUserOnly} attribute. + * android.R.attr#primaryUserOnly attribute. */ public static final int FLAG_PRIMARY_USER_ONLY = 0x20000000; /** @@ -210,6 +210,13 @@ public class ActivityInfo extends ComponentInfo */ public static final int FLAG_SINGLE_USER = 0x40000000; /** + * @hide Bit in {@link #flags}: If set, this activity may be launched into an + * owned ActivityContainer such as that within an ActivityView. If not set and + * this activity is launched into such a container a SecurityExcception will be + * thrown. Set from the {@link android.R.attr#allowEmbedded} attribute. + */ + public static final int FLAG_ALLOW_EMBEDDED = 0x80000000; + /** * Options that have been set in the activity declaration in the * manifest. * These include: diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 8d8d220..8b6ca83 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -2452,6 +2452,12 @@ public class PackageParser { a.info.flags |= ActivityInfo.FLAG_PERSISTABLE; } + if (sa.getBoolean( + com.android.internal.R.styleable.AndroidManifestActivity_allowEmbedded, + false)) { + a.info.flags |= ActivityInfo.FLAG_ALLOW_EMBEDDED; + } + if (!receiver) { if (sa.getBoolean( com.android.internal.R.styleable.AndroidManifestActivity_hardwareAccelerated, diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl index 1192a45..c3f7370 100644 --- a/core/java/android/os/IUserManager.aidl +++ b/core/java/android/os/IUserManager.aidl @@ -34,7 +34,7 @@ interface IUserManager { void setUserIcon(int userHandle, in Bitmap icon); Bitmap getUserIcon(int userHandle); List<UserInfo> getUsers(boolean excludeDying); - List<UserInfo> getProfiles(int userHandle); + List<UserInfo> getProfiles(int userHandle, boolean enabledOnly); UserInfo getUserInfo(int userHandle); boolean isRestricted(); void setGuestEnabled(boolean enable); diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 7bac3af..63de9a0 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -466,6 +466,8 @@ public class UserManager { /** * Returns list of the profiles of userHandle including * userHandle itself. + * Note that it this returns both enabled and not enabled profiles. See + * {@link #getUserProfiles()} if you need only the enabled ones. * * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. * @param userHandle profiles of this user will be returned. @@ -474,7 +476,7 @@ public class UserManager { */ public List<UserInfo> getProfiles(int userHandle) { try { - return mService.getProfiles(userHandle); + return mService.getProfiles(userHandle, false /* enabledOnly */); } catch (RemoteException re) { Log.w(TAG, "Could not get user list", re); return null; @@ -488,7 +490,13 @@ public class UserManager { */ public List<UserHandle> getUserProfiles() { ArrayList<UserHandle> profiles = new ArrayList<UserHandle>(); - List<UserInfo> users = getProfiles(UserHandle.myUserId()); + List<UserInfo> users = new ArrayList<UserInfo>(); + try { + users = mService.getProfiles(UserHandle.myUserId(), true /* enabledOnly */); + } catch (RemoteException re) { + Log.w(TAG, "Could not get user list", re); + return null; + } for (UserInfo info : users) { UserHandle userHandle = new UserHandle(info.id); profiles.add(userHandle); diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java index 638ef22..f7ac75a 100644 --- a/core/java/android/text/StaticLayout.java +++ b/core/java/android/text/StaticLayout.java @@ -653,7 +653,7 @@ public class StaticLayout extends Layout { int extra; - if (needMultiply) { + if (needMultiply && end != bufEnd) { double ex = (below - above) * (spacingmult - 1) + spacingadd; if (ex >= 0) { extra = (int)(ex + EXTRA_ROUNDING); diff --git a/core/java/android/transition/TransitionSet.java b/core/java/android/transition/TransitionSet.java index 966b24d..9081234 100644 --- a/core/java/android/transition/TransitionSet.java +++ b/core/java/android/transition/TransitionSet.java @@ -256,11 +256,45 @@ public class TransitionSet extends Transition { @Override protected void createAnimators(ViewGroup sceneRoot, TransitionValuesMaps startValues, TransitionValuesMaps endValues) { + startValues = removeExcludes(startValues); + endValues = removeExcludes(endValues); for (Transition childTransition : mTransitions) { childTransition.createAnimators(sceneRoot, startValues, endValues); } } + private TransitionValuesMaps removeExcludes(TransitionValuesMaps values) { + if (mTargetIds.isEmpty() && mTargetIdExcludes == null && mTargetTypeExcludes == null + && mTargets.isEmpty()) { + return values; + } + TransitionValuesMaps included = new TransitionValuesMaps(); + int numValues = values.viewValues.size(); + for (int i = 0; i < numValues; i++) { + View view = values.viewValues.keyAt(i); + if (isValidTarget(view, view.getId())) { + included.viewValues.put(view, values.viewValues.valueAt(i)); + } + } + numValues = values.idValues.size(); + for (int i = 0; i < numValues; i++) { + int id = values.idValues.keyAt(i); + TransitionValues transitionValues = values.idValues.valueAt(i); + if (isValidTarget(transitionValues.view, id)) { + included.idValues.put(id, transitionValues); + } + } + numValues = values.itemIdValues.size(); + for (int i = 0; i < numValues; i++) { + long id = values.itemIdValues.keyAt(i); + TransitionValues transitionValues = values.itemIdValues.valueAt(i); + if (isValidTarget(transitionValues.view, id)) { + included.itemIdValues.put(id, transitionValues); + } + } + return included; + } + /** * @hide */ diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp index 7a4728d..fcf8f83 100644 --- a/core/jni/android_hardware_SensorManager.cpp +++ b/core/jni/android_hardware_SensorManager.cpp @@ -160,7 +160,6 @@ private: ASensorEvent buffer[16]; while ((n = q->read(buffer, 16)) > 0) { for (int i=0 ; i<n ; i++) { - if (buffer[i].type == SENSOR_TYPE_STEP_COUNTER) { // step-counter returns a uint64, but the java API only deals with floats float value = float(buffer[i].u64.step_counter); @@ -183,17 +182,17 @@ private: buffer[i].vector.status, buffer[i].timestamp); } - if (env->ExceptionCheck()) { + mSensorQueue->sendAck(buffer, n); ALOGE("Exception dispatching input event."); return 1; } } + mSensorQueue->sendAck(buffer, n); } if (n<0 && n != -EAGAIN) { // FIXME: error receiving events, what to do in this case? } - return 1; } }; diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp index 8549004..ef5ebd0 100644 --- a/core/jni/android_view_GLES20Canvas.cpp +++ b/core/jni/android_view_GLES20Canvas.cpp @@ -287,7 +287,7 @@ static jint android_view_GLES20Canvas_saveLayerClip(JNIEnv* env, jobject clazz, jlong rendererPtr, jlong paintPtr, jint saveFlags) { OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr); SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr); - const android::uirenderer::Rect& bounds(renderer->getClipBounds()); + const android::uirenderer::Rect& bounds(renderer->getLocalClipBounds()); return renderer->saveLayer(bounds.left, bounds.top, bounds.right, bounds.bottom, paint, saveFlags); } @@ -302,7 +302,7 @@ static jint android_view_GLES20Canvas_saveLayerAlpha(JNIEnv* env, jobject clazz, static jint android_view_GLES20Canvas_saveLayerAlphaClip(JNIEnv* env, jobject clazz, jlong rendererPtr, jint alpha, jint saveFlags) { OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr); - const android::uirenderer::Rect& bounds(renderer->getClipBounds()); + const android::uirenderer::Rect& bounds(renderer->getLocalClipBounds()); return renderer->saveLayerAlpha(bounds.left, bounds.top, bounds.right, bounds.bottom, alpha, saveFlags); } @@ -356,7 +356,7 @@ static jboolean android_view_GLES20Canvas_clipRegion(JNIEnv* env, jobject clazz, static jboolean android_view_GLES20Canvas_getClipBounds(JNIEnv* env, jobject clazz, jlong rendererPtr, jobject rect) { OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr); - const android::uirenderer::Rect& bounds(renderer->getClipBounds()); + const android::uirenderer::Rect& bounds(renderer->getLocalClipBounds()); env->CallVoidMethod(rect, gRectClassInfo.set, int(bounds.left), int(bounds.top), int(bounds.right), int(bounds.bottom)); @@ -870,8 +870,7 @@ static jlong android_view_GLES20Canvas_finishRecording(JNIEnv* env, return reinterpret_cast<jlong>(renderer->finishRecording()); } -static jlong android_view_GLES20Canvas_createDisplayListRenderer(JNIEnv* env, - jobject clazz) { +static jlong android_view_GLES20Canvas_createDisplayListRenderer(JNIEnv* env, jobject clazz) { return reinterpret_cast<jlong>(new DisplayListRenderer); } diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 2988f06..db4092e 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Vliegtuigmodus"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Vliegtuigmodus is AAN"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Vliegtuigmodus is AF"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Instellings"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Veiligmodus"</string> <string name="android_system_label" msgid="6577375335728551336">"Android-stelsel"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index a32c834..de89ec6 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"የአውሮፕላን ሁነታ"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"የአውሮፕላንሁነታ በርቷል"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"የአውሮፕላንሁነታ ጠፍቷል"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"የሚያስተማምን ሁነታ"</string> <string name="android_system_label" msgid="6577375335728551336">"Android ስርዓት"</string> @@ -644,7 +646,7 @@ <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"መተግበሪያው ስልኩን ከWiMAX አውታረ መረብ ጋር እንዲያገናኝና እንዲያለያይ ይፈቅድለታል።"</string> <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ለአውታረ መረቦች ነጥብ ይሰጣል"</string> <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"መተግበሪያው ለአውታረ መረቦች ደረጃ እንዲሰጥ እና ጡባዊው የትኛዎቹን አውታረ መረቦች እንደሚመርጥ ላይ ተጽዕኖ እንዲያሳርፍ ያስችለዋል።"</string> - <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"መተግበሪያው ለአውታረ መረቦች ደረጃ እንዲሰጥ እና ስልኩ የትኛዎቹን አውታረ መረቦች እንደሚመርጥ ላይ ተጽዕኖ እንዲያሳርፍ ያስችለዋል።"</string> + <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"መተግበሪያው ለአውታረ መረቦች ደረጃ እንዲሰጥ እና ስልኩ የትኛዎቹን አውታረ መረቦች እንደሚመርጥ እና ላይ ተጽዕኖ እንዲያሳርፍ ያስችለዋል።"</string> <string name="permlab_bluetooth" msgid="6127769336339276828">"ከብሉቱዝ መሣሪያዎች ጋር ተጣመር"</string> <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"መተግበሪያው በጡባዊ ተኮው ላይ ያለውን የብሉቱዝ ውቅር እንዲያይ እና ከተጣመሩ መሳሪያዎች ጋር ግንኙነቶችን እንዲያደርግና እንዲቀበል ይፈቅድለታል።"</string> <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"መተግበሪያው በስልኩ ላይ ያለውን የብሉቱዝ ውቅር እንዲያይ እና ከተጣመሩ መሳሪያዎች ጋር ግንኙነቶችን እንዲያደርግና እንዲቀበል ይፈቅድለታል።"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 86d2be3..2ee49bd 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"وضع الطائرة"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"وضع الطائرة قيد التشغيل"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"وضع الطائرة متوقف"</string> + <string name="global_action_settings" msgid="1756531602592545966">"الإعدادات"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"الوضع الآمن"</string> <string name="android_system_label" msgid="6577375335728551336">"نظام Android"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index fcf3e1b..3f00f1f 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Самолетен режим"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Самолетният режим е ВКЛЮЧЕН"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Самолетният режим е ИЗКЛЮЧЕН"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Безопасен режим"</string> <string name="android_system_label" msgid="6577375335728551336">"Системно от Android"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index b422a6d..afb0852 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mode d\'avió"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Mode d\'avió activat"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Mode d\'avió desactivat"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Configuració"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"+999"</string> <string name="safeMode" msgid="2788228061547930246">"Mode segur"</string> <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 416eca9..39c6c08 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Režim V letadle"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Režim V letadle je ZAPNUTÝ"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Režim V letadle je VYPNUTÝ"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Nouzový režim"</string> <string name="android_system_label" msgid="6577375335728551336">"Systém Android"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 7e08df5..c06ecbb 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Flytilstand"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Flytilstand er TIL"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Flytilstand er slået FRA"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Indstillinger"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Sikker tilstand"</string> <string name="android_system_label" msgid="6577375335728551336">"Android-system"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 162d0d8..e1ee025 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Flugmodus"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Flugmodus ist AN."</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Flugmodus ist AUS."</string> + <string name="global_action_settings" msgid="1756531602592545966">"Einstellungen"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Abgesicherter Modus"</string> <string name="android_system_label" msgid="6577375335728551336">"Android-System"</string> @@ -316,13 +317,13 @@ <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"Bildschirminhalt abrufen"</string> <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Ermöglicht der App, den Inhalt des aktiven Fensters abzurufen. Schädliche Apps können so den gesamten Fensterinhalt abrufen und mit Ausnahme von Passwörtern den gesamten Text auswerten."</string> <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"Bedienungshilfen vorübergehend aktivieren"</string> - <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Ermöglicht einer App, die Bedienungshilfen auf dem Gerät vorübergehend zu aktivieren. Schädliche Apps können Bedienungshilfen ohne die Zustimmung des Nutzers aktivieren."</string> + <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Ermöglicht der App, die Bedienungshilfen auf dem Gerät vorübergehend zu aktivieren. Schädliche Apps können Bedienungshilfen ohne die Zustimmung des Nutzers aktivieren."</string> <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"Fenstertoken abrufen"</string> <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Berechtigt eine App zum Abruf des Fenstertokens. Bösartige Apps können sich als System ausgeben und unautorisiert mit dem App-Fenster interagieren."</string> <string name="permlab_frameStats" msgid="7056374987314361639">"Framestatistiken abrufen"</string> <string name="permdesc_frameStats" msgid="4758001089491284919">"Berechtigt eine App zur Erfassung von Framestatistiken. Bösartige Apps können möglicherweise die Framestatistiken für Fenster von anderen Apps beobachten."</string> <string name="permlab_filter_events" msgid="8675535648807427389">"Ereignisse filtern"</string> - <string name="permdesc_filter_events" msgid="8006236315888347680">"Ermöglicht einer App, einen Eingabefilter zu registrieren, der den Stream aller Nutzerereignisse vor ihrem Versand filtert. Eine schädliche App kann die System-UI ohne Eingriff des Nutzers kontrollieren."</string> + <string name="permdesc_filter_events" msgid="8006236315888347680">"Ermöglicht der App, einen Eingabefilter zu registrieren, der den Stream aller Nutzerereignisse vor ihrem Versand filtert. Eine schädliche App kann die System-UI ohne Eingriff des Nutzers kontrollieren."</string> <string name="permlab_shutdown" msgid="7185747824038909016">"Partielles Herunterfahren"</string> <string name="permdesc_shutdown" msgid="7046500838746291775">"Versetzt den Aktivitätsmanager in einen heruntergefahrenen Zustand. Führt kein vollständiges Herunterfahren aus."</string> <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"App-Wechsel verhindern"</string> @@ -338,7 +339,7 @@ <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"Von WAP-PUSH empfangenen Broadcast senden"</string> <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Ermöglicht der App, eine Benachrichtigung zu senden, dass eine WAP PUSH-Nachricht empfangen wurde. Schädliche Apps können so den Empfang von MMS vortäuschen oder unbemerkt den Inhalt einer beliebigen Webseite durch schädliche Inhalte ersetzen."</string> <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"Netzwerkbewertungen senden"</string> - <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Ermöglicht der App, Benachrichtigungen zu senden, dass Netzwerke bewertet werden müssen. Für normale Apps sollte dies nie erforderlich sein."</string> + <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Ermöglicht der App, Benachrichtigungen zu senden, dass Netzwerke bewertet werden müssen. Für normale Apps ist dies nie erforderlich."</string> <string name="permlab_setProcessLimit" msgid="2451873664363662666">"Anzahl der laufenden Prozesse beschränken"</string> <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Ermöglicht der App, die maximale Anzahl an aktiven Prozessen zu steuern. Wird nie für normale Apps benötigt."</string> <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"Apps im Hintergrund schließen"</string> @@ -1333,7 +1334,7 @@ <string name="permlab_copyProtectedData" msgid="4341036311211406692">"Inhalte kopieren"</string> <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Ermöglicht der App das Aufrufen des Standard-Containerdienstes zum Kopieren von Inhalten. Nicht für normale Apps vorgesehen."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Medienausgabe umleiten"</string> - <string name="permdesc_route_media_output" msgid="4932818749547244346">"Ermöglicht einer App, die Medienausgabe auf andere externe Geräte umzuleiten."</string> + <string name="permdesc_route_media_output" msgid="4932818749547244346">"Ermöglicht der App, die Medienausgabe auf andere externe Geräte umzuleiten."</string> <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Zugriff auf mit Keyguard geschützten Speicher"</string> <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Ermöglicht einer App den Zugriff auf mit Keyguard geschützten Speicher"</string> <string name="permlab_control_keyguard" msgid="172195184207828387">"Anzeige und Ausblenden des Keyguard steuern"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 6f013b2..5af0277 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Λειτουργία πτήσης"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Η λειτουργία πτήσης είναι ενεργοποιημένη."</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Λειτ. πτήσης είναι ανενεργή"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Ρυθμίσεις"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Ασφαλής λειτουργία"</string> <string name="android_system_label" msgid="6577375335728551336">"Σύστημα Android"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 9e94287..ad45887 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Aeroplane mode"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Aeroplane mode is ON"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Aeroplane mode is OFF"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Safe mode"</string> <string name="android_system_label" msgid="6577375335728551336">"Android System"</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index 9e94287..ad45887 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Aeroplane mode"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Aeroplane mode is ON"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Aeroplane mode is OFF"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Safe mode"</string> <string name="android_system_label" msgid="6577375335728551336">"Android System"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 337ab64..6d032ca 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo avión"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"El modo avión está Activado"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"El modo avión está Desactivado"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Configuración"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string> <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 920bdbc..63bed24 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo avión"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modo avión activado. Desactivar"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modo avión desactivado. Activar"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Ajustes"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"> 999"</string> <string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string> <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string> diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml index 222a06c..00e4a20 100644 --- a/core/res/res/values-et-rEE/strings.xml +++ b/core/res/res/values-et-rEE/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Lennurežiim"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Lennurežiim on SEES"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Lennurežiim on VÄLJAS"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Turvarežiim"</string> <string name="android_system_label" msgid="6577375335728551336">"Android-süsteem"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 300dfcd..42d654e 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"حالت هواپیما"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"حالت هواپیما روشن است"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"حالت هواپیما خاموش است"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"بیشتر از 999"</string> <string name="safeMode" msgid="2788228061547930246">"حالت ایمن"</string> <string name="android_system_label" msgid="6577375335728551336">"سیستم Android"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 9202e0d..7698dda 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Lentokonetila"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Lentokonetila on KÄYTÖSSÄ"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Lentokonetila on POIS KÄYTÖSTÄ"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Suojattu tila"</string> <string name="android_system_label" msgid="6577375335728551336">"Android-järjestelmä"</string> @@ -390,10 +392,8 @@ <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Antaa sovelluksen sitoutua etänäytön ylemmän tason käyttöliittymään. Ei tavallisten sovelluksien käyttöön."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"sitoudu widget-palveluun"</string> <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> - <!-- no translation found for permlab_bindRouteProvider (4869394607915096847) --> - <skip /> - <!-- no translation found for permdesc_bindRouteProvider (4703804520859960329) --> - <skip /> + <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"reitin tarjoajan palveluun sitominen"</string> + <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Antaa sovelluksen luoda sidoksen mihin tahansa rekisteröityyn reitin tarjoajaan. 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> <string name="permlab_bindTvInput" msgid="5601264742478168987">"sido TV-tuloon"</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index 5e2cb28..cc3bcd2 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mode Avion"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Le mode Avion est activé."</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Le mode Avion est désactivé."</string> + <string name="global_action_settings" msgid="1756531602592545966">"Paramètres"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> <string name="safeMode" msgid="2788228061547930246">"Mode sécurisé"</string> <string name="android_system_label" msgid="6577375335728551336">"Système Android"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 6435652..30c7767 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mode Avion"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Le mode Avion est activé."</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Le mode Avion est désactivé."</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> <string name="safeMode" msgid="2788228061547930246">"Mode sécurisé"</string> <string name="android_system_label" msgid="6577375335728551336">"Système Android"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 831b327..852215f 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"हवाई जहाज मोड"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"हवाई जहाज मोड चालू है"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"हवाई जहाज मोड बंद है"</string> + <string name="global_action_settings" msgid="1756531602592545966">"सेटिंग"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"सुरक्षित मोड"</string> <string name="android_system_label" msgid="6577375335728551336">"Android सिस्टम"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 40b194c..4ab25af 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -135,7 +135,7 @@ <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sinkronizacija"</string> <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Previše brisanja stavki <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string> <string name="low_memory" product="tablet" msgid="6494019234102154896">"Prostor za pohranu tabletnog računala pun je. Izbrišite nekoliko datoteka kako biste oslobodili prostor."</string> - <string name="low_memory" product="watch" msgid="4415914910770005166">"Pohrana sata puna je. Izbrišite neke datoteke da biste oslobodili prostor."</string> + <string name="low_memory" product="watch" msgid="4415914910770005166">"Memorija sata je puna. Izbrišite neke datoteke da biste oslobodili prostor."</string> <string name="low_memory" product="default" msgid="3475999286680000541">"Prostor za pohranu na telefonu je pun. Izbrišite nekoliko datoteka kako biste oslobodili prostor."</string> <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Mreža se možda nadzire"</string> <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Od strane nepoznate treće strane"</string> @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Način rada u zrakoplovu"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Uključen je način rada u zrakoplovu"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Isključen je način rada u zrakoplovu"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Siguran način rada"</string> <string name="android_system_label" msgid="6577375335728551336">"Sustav Android"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 7c95b53..cc47d26 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Repülőgép üzemmód"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Repülőgép üzemmód bekapcsolva"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Repülőgép üzemmód kikapcsolva"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Beállítások"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Biztonsági üzemmód"</string> <string name="android_system_label" msgid="6577375335728551336">"Android rendszer"</string> diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml index c788068..34bebb2 100644 --- a/core/res/res/values-hy-rAM/strings.xml +++ b/core/res/res/values-hy-rAM/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Ինքնաթիռային ռեժիմ"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Ինքնաթիռային ռեժիմը միացված է"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Ինքնաթիռային ռեժիմը անջատված է"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Անվտանգ ռեժիմ"</string> <string name="android_system_label" msgid="6577375335728551336">"Android համակարգ"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index a7ede78..1100bd0 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mode pesawat"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Mode pesawat AKTIF"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Mode pesawat MATI"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Setelan"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Mode aman"</string> <string name="android_system_label" msgid="6577375335728551336">"Sistem Android"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 4c3d8a3..243dd15 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modalità aereo"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modalità aereo attiva"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modalità aereo non attiva"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Impostazioni"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Modalità provvisoria"</string> <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index f818574..537aac6 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"מצב טיסה"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"מצב טיסה מופעל"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"מצב טיסה כבוי"</string> + <string name="global_action_settings" msgid="1756531602592545966">"הגדרות"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"מצב בטוח"</string> <string name="android_system_label" msgid="6577375335728551336">"מערכת Android"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 159a19e..e334773 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"機内モード"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"機内モードON"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"機内モードOFF"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"セーフモード"</string> <string name="android_system_label" msgid="6577375335728551336">"Androidシステム"</string> diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml index db9088c..b6856c6 100644 --- a/core/res/res/values-ka-rGE/strings.xml +++ b/core/res/res/values-ka-rGE/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"თვითმფრინავის რეჟიმი"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"თვითმფრინავის რეჟიმი ჩართულია."</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"თვითმფრინავის რეჟიმი გამორთულია."</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"უსაფრთხო რეჟიმი"</string> <string name="android_system_label" msgid="6577375335728551336">"Android-ის სისტემა"</string> diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml index 7eb674a..bac95d5 100644 --- a/core/res/res/values-km-rKH/strings.xml +++ b/core/res/res/values-km-rKH/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"ពេលជិះយន្តហោះ"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"បានបើករបៀបពេលជិះយន្តហោះ"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"បានបិទរបៀបពេលជិះយន្តហោះ"</string> + <string name="global_action_settings" msgid="1756531602592545966">"ការកំណត់"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"របៀបសុវត្ថិភាព"</string> <string name="android_system_label" msgid="6577375335728551336">"ប្រព័ន្ធ Android"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index f73469a..7b064a3 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"비행기 모드"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"비행기 모드 사용중"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"비행기 모드 사용중이 아님"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"안전 모드"</string> <string name="android_system_label" msgid="6577375335728551336">"Android 시스템"</string> diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml index 80964b6..d486092 100644 --- a/core/res/res/values-lo-rLA/strings.xml +++ b/core/res/res/values-lo-rLA/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"ໂໝດໃນຍົນ"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"ເປີດໂໝດຢູ່ໃນຍົນແລ້ວ"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"ປິດໂໝດໃນຍົນແລ້ວ"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Safe mode"</string> <string name="android_system_label" msgid="6577375335728551336">"ລະບົບ Android"</string> @@ -337,8 +339,8 @@ <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"ອະນຸຍາດໃຫ້ແອັບຯ ກະຈາຍສັນຍານການແຈ້ງເຕືອນວ່າຂໍ້ຄວາມ SMS ໄດ້ຮັບແລ້ວ. ແອັບຯທີ່ເປັນອັນຕະລາຍອາດຈະໃຊ້ສິ່ງນີ້ໃນການປອມແປງຂໍ້ຄວາມ SMS ຂາເຂົ້າ."</string> <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"ສົ່ງການກະຈາຍ WAP-PUSH ທີ່ໄດ້ຮັບ"</string> <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"ອະນຸຍາດໃຫ້ແອັບຯສົ່ງການແຈ້ງເຕືອນໃນເວລາທີ່ໄດ້ຮັບຂໍ້ມຄວາມ WAP PUSH. ແອັບຯທີ່ເປັນອັນຕະລາຍ ອາດໃຊ້ການກະທຳນີ້ເພື່ອປອມການໄດ້ຮັບຂໍ້ຄວາມ MMS ຫຼືລັກປ່ຽນເນື້ອຫາຂອງໜ້າເວັບຕ່າງໆ ດ້ວຍສິ່ງອັນຕະລາຍທັງຫຼາຍຢ່າງງຽບໆ."</string> - <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"ສົ່ງການກະຈາຍເຄືອຂ່າຍຄະແນນ"</string> - <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"ອະນຸຍາດໃຫ້ແອັບຯກະຈາຍການແຈ້ງເຕືອນທີ່ເຄືອຂ່າຍຈຳເປັນໃຊ້ນັບຄະແນນ. ບໍ່ເຄີຍໄດ້ໃຊ້ໃນແອັບຯທົ່ວໄປ."</string> + <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"ສົ່ງການກະຈາຍຄະແນນເຄືອຂ່າຍ"</string> + <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"ອະນຸຍາດໃຫ້ແອັບຯກະຈາຍການແຈ້ງເຕືອນທີ່ເຄືອຂ່າຍຕ່າງໆຈຳເປັນຖືກໃຊ້ນັບຄະແນນ. ບໍ່ມີຄວາມຈຳເປັນໃນແອັບຯທົ່ວໄປ."</string> <string name="permlab_setProcessLimit" msgid="2451873664363662666">"ຈຳກັດຈຳນວນຂອງໂປຣເຊສທີ່ເຮັດວຽກຢູ່"</string> <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"ອະນຸຍາດໃຫ້ແອັບຯຄວບຄຸມຈຳນວນສູງສຸດ ຂອງໂປຣເຊສທີ່ຈະເຮັດວຽກ. ບໍ່ຄວນຖືກໃຊ້ກັບແອັບພລິເຄຊັນທົ່ວໄປ."</string> <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"ບັງຄັບໃຫ້ແອັບຯທີ່ເຮັດວຽກຢູ່ພື້ນຫຼັງປິດໂຕລົງ"</string> @@ -642,7 +644,7 @@ <string name="permlab_changeWimaxState" msgid="2405042267131496579">"ປ່ຽນສະຖານະ WiMAX"</string> <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"ອະນຸຍາດໃຫ້ແອັບຯເຊື່ອມຕໍ່ ແລະຕັດການເຊື່ອມຕໍ່ແທັບເລັດຈາກເຄືອຂ່າຍ WiMAX."</string> <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"ອະນຸຍາດໃຫ້ແອັບຯເຊື່ອມຕໍ່ ແລະຕັດການເຊື່ອມຕໍ່ຂອງໂທລະສັບຈາກເຄືອຂ່າຍ WiMax ໄດ້."</string> - <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ເຄືອຂ່າຍຄະແນນ"</string> + <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ຄະແນນເຄືອຂ່າຍ"</string> <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"ອະນຸຍາດໃຫ້ແອັບຯຈັດລຳດັບເຄືອຂ່າຍ ແລະ ຊ່ວຍຕັດສິນໃຈວ່າເຄືອຂ່າຍໃດທີ່ແທັບເລັດຄວນນຳໃຊ້."</string> <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"ອະນຸຍາດໃຫ້ແອັບຯຈັດລຳດັບເຄືອຂ່າຍ ແລະ ຊ່ວຍຕັດສິນໃຈວ່າເຄືອຂ່າຍໃດທີ່ໂທລະສັບຄວນນຳໃຊ້."</string> <string name="permlab_bluetooth" msgid="6127769336339276828">"ຈັບຄູ່ກັບອຸປະກອນ Bluetooth"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index f10135b..c8724a3 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Lėktuvo režimas"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"ĮJUNGTAS lėktuvo režimas"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"lėktuvo režimas IŠJUNGTAS"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Nustatymai"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Saugos režimas"</string> <string name="android_system_label" msgid="6577375335728551336">"„Android“ sistema"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index f53f0ca..f2aec67 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Lidojuma režīms"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Lidojuma režīms ir IESLĒGTS."</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Lidojuma režīms ir IZSLĒGTS."</string> + <string name="global_action_settings" msgid="1756531602592545966">"Iestatījumi"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"Pārsniedz"</string> <string name="safeMode" msgid="2788228061547930246">"Drošais režīms"</string> <string name="android_system_label" msgid="6577375335728551336">"Android sistēma"</string> diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml index f5f8fd3..1006907 100644 --- a/core/res/res/values-mn-rMN/strings.xml +++ b/core/res/res/values-mn-rMN/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Нислэгийн горим"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Нислэгийн горим асав"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Нислэгийн горим унтарсан"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Тохиргоо"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Аюулгүй горим"</string> <string name="android_system_label" msgid="6577375335728551336">"Андройд систем"</string> diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml index aee4cdf..d3b5987 100644 --- a/core/res/res/values-ms-rMY/strings.xml +++ b/core/res/res/values-ms-rMY/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mod pesawat"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Mod Pesawat DIHIDUPKAN"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Mod Pesawat DIMATIKAN"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Mod selamat"</string> <string name="android_system_label" msgid="6577375335728551336">"Sistem Android"</string> @@ -390,10 +392,8 @@ <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi paparan jauh. Tidak sekali-kali diperlukan untuk apl biasa."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"terikat kepada perkhidmatan widget"</string> <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> - <!-- no translation found for permlab_bindRouteProvider (4869394607915096847) --> - <skip /> - <!-- no translation found for permdesc_bindRouteProvider (4703804520859960329) --> - <skip /> + <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"terikat kepada perkhidmatan pembekal laluan"</string> + <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Membenarkan pemegang untuk terikat kepada mana-mana pembekal laluan yang berdaftar. Tidak sekali-kali diperlukan untuk apl normal."</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> <string name="permlab_bindTvInput" msgid="5601264742478168987">"ikat kepada input TV"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 029ceb5..d95d6f1 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Flymodus"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Flymodus er på"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Flymodus er av"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Sikkermodus"</string> <string name="android_system_label" msgid="6577375335728551336">"Android-system"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 5010748..c629254 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Vliegmodus"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Vliegmodus is AAN"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Vliegmodus is UIT"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Instellingen"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999 +"</string> <string name="safeMode" msgid="2788228061547930246">"Veilige modus"</string> <string name="android_system_label" msgid="6577375335728551336">"Android-systeem"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index c8d7298..34d43de 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Tryb samolotowy"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Tryb samolotowy jest włączony"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Tryb samolotowy jest wyłączony"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Ustawienia"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> <string name="safeMode" msgid="2788228061547930246">"Tryb awaryjny"</string> <string name="android_system_label" msgid="6577375335728551336">"System Android"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 718c8d9..6996d13 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo de avião"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"O modo de voo está ativado"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"O modo de voo está desativado"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Definições"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string> <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 29a294a..a0124ca 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo avião"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modo avião ATIVADO"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modo avião DESATIVADO"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> <string name="safeMode" msgid="2788228061547930246">"Modo de segurança"</string> <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string> diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml index e362590..dc710d4 100644 --- a/core/res/res/values-rm/strings.xml +++ b/core/res/res/values-rm/strings.xml @@ -218,6 +218,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modus d\'aviun"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Il modus d\'aviun è activà"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Il modus d\'aviun è deactivà."</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <!-- no translation found for status_bar_notification_info_overflow (5301981741705354993) --> <skip /> <string name="safeMode" msgid="2788228061547930246">"Modus segirà"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index c173eef..0757578 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mod Avion"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modul Avion este ACTIVAT"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modul avion este DEZACTIVAT"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"˃999"</string> <string name="safeMode" msgid="2788228061547930246">"Mod sigur"</string> <string name="android_system_label" msgid="6577375335728551336">"Sistemul Android"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index a3d5d92..f826f1a 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Режим полета"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Выключить"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Включить"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> <string name="safeMode" msgid="2788228061547930246">"Безопасный режим"</string> <string name="android_system_label" msgid="6577375335728551336">"Система Android"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index e9f3adc..09cf7f6 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Režim V lietadle"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Režim V lietadle je ZAPNUTÝ"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Režim V lietadle je VYPNUTÝ"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Núdzový režim"</string> <string name="android_system_label" msgid="6577375335728551336">"Systém Android"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 6d4f21c..00649f4 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Način za letalo"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Način za letalo je VKLOPLJEN"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Način za letalo je IZKLOPLJEN"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Nastavitve"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999 +"</string> <string name="safeMode" msgid="2788228061547930246">"Varni način"</string> <string name="android_system_label" msgid="6577375335728551336">"Sistem Android"</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 1a3a235..d363771 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Режим рада у авиону"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Режим рада у авиону је УКЉУЧЕН"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Режим рада у авиону је ИСКЉУЧЕН"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Безбедни режим"</string> <string name="android_system_label" msgid="6577375335728551336">"Android систем"</string> @@ -899,7 +901,7 @@ <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Откључавање налога"</string> <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Превише покушаја уноса шаблона"</string> <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Да бисте откључали, пријавите се помоћу Google налога."</string> - <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Корисничко име (адреса е-поште)"</string> + <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Корисничко име (имејл адреса)"</string> <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Лозинка"</string> <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Пријави ме"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Неважеће корисничко име или лозинка."</string> @@ -1556,7 +1558,7 @@ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN кодови се не подударају"</string> <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Превише покушаја уноса шаблона"</string> <string name="kg_login_instructions" msgid="1100551261265506448">"Да бисте откључали, пријавите се помоћу Google налога."</string> - <string name="kg_login_username_hint" msgid="5718534272070920364">"Корисничко име (адреса е-поште)"</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Корисничко име (имејл адреса)"</string> <string name="kg_login_password_hint" msgid="9057289103827298549">"Лозинка"</string> <string name="kg_login_submit_button" msgid="5355904582674054702">"Пријави ме"</string> <string name="kg_login_invalid_input" msgid="5754664119319872197">"Неважеће корисничко име или лозинка."</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 03dc691..7ec4f41 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Flygplansläge"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Flygplansläge är AKTIVERAT"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Flygplansläge är INAKTIVERAT"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Inställningar"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Säkert läge"</string> <string name="android_system_label" msgid="6577375335728551336">"Android-system"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 71f5003..40adc3e 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Hali ya ndege"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Hali ya ndege IMEWASHWA"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Hali ya ndege IMEZIMWA"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Mtindo salama"</string> <string name="android_system_label" msgid="6577375335728551336">"Mfumo wa Android"</string> @@ -390,8 +392,8 @@ <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Huruhusu mtumiaji kujifungia kiolesura cha kiwango cha juu cha mwonekano wa mbali. Haipaswi kuhitajika kwa programu za kawaida."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"funga kwenye huduma ya widget"</string> <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_bindRouteProvider" msgid="4869394607915096847">"shurutisha kwenye huduma ya mtoa huduma wa njia"</string> - <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Huruhusu mmiliki kushurutisha kwenye watoa huduma wa njia waliosajiliwa. Haipaswi kuhitajika kwa programu za kawaida."</string> + <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"bandika kwenye huduma ya mtoa huduma za njia"</string> + <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Huruhusu mmiliki kubandika kwenye watoa huduma za njia waliosajiliwa. 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> <string name="permlab_bindTvInput" msgid="5601264742478168987">"bandika kwenye zana za data ya runinga"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index b8d99b0..c211018 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"โหมดใช้งานบนเครื่องบิน"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"เปิดโหมดใช้งานบนเครื่องบิน"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"โหมดใช้งานบนเครื่องบินปิดทำงานอยู่"</string> + <string name="global_action_settings" msgid="1756531602592545966">"การตั้งค่า"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"โหมดปลอดภัย"</string> <string name="android_system_label" msgid="6577375335728551336">"ระบบ Android"</string> @@ -331,8 +332,8 @@ <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"ช่วยให้เจ้าของสามารถดึงข้อมูลส่วนตัวเกี่ยวกับแอปพลิเคชันปัจจุบันในส่วนหน้าของหน้าจอ"</string> <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"ตรวจสอบและควบคุมแอปพลิเคชันทั้งหมดที่เปิดใช้งาน"</string> <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"อนุญาตให้แอปพลิเคชันตรวจสอบและควบคุมวิธีการที่ระบบเปิดกิจกรรมต่างๆ แอปพลิเคชันที่เป็นอันตรายอาจทำอันตรายแก่ระบบได้อย่างสิ้นเชิง การอนุญาตนี้จำเป็นสำหรับการพัฒนาเท่านั้น ไม่ใช้สำหรับแอปพลิเคชันทั่วไปโดยเด็ดขาด"</string> - <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"ส่งการกระจายข้อมูลว่ามีการนำแพคเกจออก"</string> - <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"อนุญาตให้แอปพลิเคชันกระจายข้อมูลการแจ้งเตือนว่าแพคเกจของแอปพลิเคชันหนึ่งๆ ได้ถูกนำออกไปแล้ว แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ยุติแอปพลิเคชันอื่นๆ ที่กำลังทำงานอยู่"</string> + <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"ส่งการกระจายข้อมูลว่ามีการนำแพ็กเกจออก"</string> + <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"อนุญาตให้แอปพลิเคชันกระจายข้อมูลการแจ้งเตือนว่าแพ็กเกจของแอปพลิเคชันหนึ่งๆ ได้ถูกนำออกไปแล้ว แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ยุติแอปพลิเคชันอื่นๆ ที่กำลังทำงานอยู่"</string> <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"ส่งการกระจายข้อมูลว่าได้รับ SMS"</string> <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"อนุญาตให้แอปพลิเคชันกระจายข้อมูลการแจ้งเตือนว่าได้รับข้อความ SMS แล้ว แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ปลอมข้อความ SMS ที่เข้ามา"</string> <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"ส่งการกระจายข้อมูลว่าได้รับ WAP-PUSH"</string> @@ -410,7 +411,7 @@ <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"อนุญาตให้แอปพลิเคชันทำให้ส่วนหนึ่งของตัวเองคงอยู่ถาวรในหน่วยความจำ ซึ่งจะจำกัดพื้นที่หน่วยความจำที่ใช้งานได้ของแอปพลิเคชันอื่นๆ และทำให้แท็บเล็ตทำงานช้าลง"</string> <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"อนุญาตให้แอปพลิเคชันทำให้ส่วนหนึ่งของตัวเองคงอยู่ถาวรในหน่วยความจำ ซึ่งจะจำกัดพื้นที่หน่วยความจำที่ใช้งานได้ของแอปพลิเคชันอื่นๆ และทำให้โทรศัพท์ทำงานช้าลง"</string> <string name="permlab_deletePackages" msgid="184385129537705938">"ลบแอปพลิเคชัน"</string> - <string name="permdesc_deletePackages" msgid="7411480275167205081">"อนุญาตให้แอปพลิเคชันลบแพคเกจ Android แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ลบแอปพลิเคชันที่สำคัญ"</string> + <string name="permdesc_deletePackages" msgid="7411480275167205081">"อนุญาตให้แอปพลิเคชันลบแพ็กเกจ Android แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ลบแอปพลิเคชันที่สำคัญ"</string> <string name="permlab_clearAppUserData" msgid="274109191845842756">"ลบข้อมูลของแอปพลิเคชันอื่น"</string> <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"อนุญาตให้แอปพลิเคชันล้างข้อมูลผู้ใช้"</string> <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"ลบแคชของแอปพลิเคชันอื่น"</string> @@ -418,7 +419,7 @@ <string name="permlab_getPackageSize" msgid="7472921768357981986">"วัดพื้นที่เก็บข้อมูลของแอปพลิเคชัน"</string> <string name="permdesc_getPackageSize" msgid="3921068154420738296">"อนุญาตให้แอปพลิเคชันเรียกดูรหัส ข้อมูล และขนาดแคชของตน"</string> <string name="permlab_installPackages" msgid="2199128482820306924">"ติดตั้งแอปพลิเคชันโดยตรง"</string> - <string name="permdesc_installPackages" msgid="5628530972548071284">"อนุญาตให้แอปพลิเคชันติดตั้งแพคเกจ Android ใหม่หรือที่อัปเดต แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ในการเพิ่มแอปพลิเคชันใหม่ๆ ด้วยสิทธิ์ที่สูงนี้ได้ตามต้องการ"</string> + <string name="permdesc_installPackages" msgid="5628530972548071284">"อนุญาตให้แอปพลิเคชันติดตั้งแพ็กเกจ Android ใหม่หรือที่อัปเดต แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ในการเพิ่มแอปพลิเคชันใหม่ๆ ด้วยสิทธิ์ที่สูงนี้ได้ตามต้องการ"</string> <string name="permlab_clearAppCache" msgid="7487279391723526815">"ลบข้อมูลแคชของแอปพลิเคชันทั้งหมด"</string> <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"อนุญาตให้แอปพลิเคชันสร้างพื้นที่ว่างในที่จัดเก็บข้อมูลของแท็บเล็ต โดยลบไฟล์ในไดเรกทอรีแคชของแอปพลิเคชันอื่นๆ ซึ่งอาจทำให้แอปพลิเคชันอื่นเริ่มทำงานช้ากว่าเดิมเนื่องจากต้องดึงข้อมูลของตนซ้ำ"</string> <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"อนุญาตให้แอปพลิเคชันสร้างพื้นที่ว่างในที่จัดเก็บข้อมูลของโทรศัพท์ โดยลบไฟล์ในไดเรกทอรีแคชของแอปพลิเคชันอื่นๆ ซึ่งอาจทำให้แอปพลิเคชันอื่นเริ่มทำงานช้ากว่าเดิมเนื่องจากต้องดึงข้อมูลของตนซ้ำ"</string> @@ -944,7 +945,7 @@ <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="factorytest_failed" msgid="5410270329114212041">"การทดสอบจากโรงงานล้มเหลว"</string> <string name="factorytest_not_system" msgid="4435201656767276723">"การทำงาน FACTORY_TEST ได้รับการสนับสนุนเฉพาะสำหรับแพ็คเก็จที่ติดตั้งใน /system/app เท่านั้น"</string> - <string name="factorytest_no_action" msgid="872991874799998561">"ไม่พบแพคเกจที่มีการทำงาน FACTORY_TEST"</string> + <string name="factorytest_no_action" msgid="872991874799998561">"ไม่พบแพ็กเกจที่มีการทำงาน FACTORY_TEST"</string> <string name="factorytest_reboot" msgid="6320168203050791643">"รีบูต"</string> <string name="js_dialog_title" msgid="1987483977834603872">"หน้าเว็บที่ \"<xliff:g id="TITLE">%s</xliff:g>\" ระบุว่า:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> @@ -983,10 +984,10 @@ <string name="permdesc_addVoicemail" msgid="6604508651428252437">"อนุญาตให้แอปพลิเคชันเพิ่มข้อความลงในกล่องข้อความเสียงของคุณ"</string> <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"แก้ไขการอนุญาตเกี่ยวกับการระบุตำแหน่งทางภูมิศาสตร์ของเบราว์เซอร์"</string> <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"อนุญาตให้แอปพลิเคชันแก้ไขการอนุญาตตำแหน่งทางภูมิศาสตร์ของเบราว์เซอร์ แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ในการส่งข้อมูลตำแหน่งไปยังเว็บไซต์ต่างๆ ได้ตามต้องการ"</string> - <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"ยืนยันแพคเกจ"</string> - <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"อนุญาตให้แอปพลิเคชันยืนยันว่าแพคเกจสามารถติดตั้งได้หรือไม่"</string> - <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"เชื่อมโยงกับการยืนยันแพคเกจ"</string> - <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"อนุญาตให้ผู้ใช้ส่งคำขอให้มีการยืนยันแพคเกจ ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string> + <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"ยืนยันแพ็กเกจ"</string> + <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"อนุญาตให้แอปพลิเคชันยืนยันว่าแพ็กเกจสามารถติดตั้งได้หรือไม่"</string> + <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"เชื่อมโยงกับการยืนยันแพ็กเกจ"</string> + <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"อนุญาตให้ผู้ใช้ส่งคำขอให้มีการยืนยันแพ็กเกจ ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string> <string name="permlab_serialPort" msgid="546083327654631076">"เข้าถึงพอร์ตอนุกรม"</string> <string name="permdesc_serialPort" msgid="2991639985224598193">"อนุญาตให้ผู้ถือสามารถเข้าถึงพอร์ตอนุกรมโดยใช้ SerialManager API"</string> <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"เข้าถึงผู้ให้บริการเนื้อหาจากภายนอก"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 394f01e..a7b7b8f 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Airplane mode"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Naka-ON ang airplane mode"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Naka-OFF ang airplane mode"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Safe mode"</string> <string name="android_system_label" msgid="6577375335728551336">"Android System"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index cde7219..bc73a93 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Uçak modu"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Uçak modu AÇIK"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Uçak modu KAPALI"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Güvenli mod"</string> <string name="android_system_label" msgid="6577375335728551336">"Android Sistemi"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index f55fcf3..75d77c8 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Режим польоту"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Режим польоту ВВІМК."</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Режим польоту ВИМК."</string> + <string name="global_action_settings" msgid="1756531602592545966">"Налаштування"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Безп. режим"</string> <string name="android_system_label" msgid="6577375335728551336">"Система Android"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 841a68d..a1c03ad 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -175,6 +175,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Chế độ trên máy bay"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Chế độ trên máy bay BẬT"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Chế độ trên máy bay TẮT"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Chế độ an toàn"</string> <string name="android_system_label" msgid="6577375335728551336">"Hệ thống Android"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 020484e..134cf9a 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"飞行模式"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"已开启飞行模式"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"未开启飞行模式"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"安全模式"</string> <string name="android_system_label" msgid="6577375335728551336">"Android 系统"</string> @@ -643,8 +645,8 @@ <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"允许该应用建立和断开平板电脑与 WiMAX 网络之间的连接。"</string> <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"允许该应用建立和断开手机与 WiMAX 网络之间的连接。"</string> <string name="permlab_scoreNetworks" msgid="6445777779383587181">"为网络评分"</string> - <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"允许应用为网络排名,并控制平板电脑应优先使用的网络。"</string> - <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"允许应用为网络排名,并控制手机应优先使用的网络。"</string> + <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"允许应用为网络评分,并控制平板电脑应优先使用的网络。"</string> + <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"允许应用为网络评分,并控制手机应优先使用的网络。"</string> <string name="permlab_bluetooth" msgid="6127769336339276828">"与蓝牙设备配对"</string> <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"允许该应用查看平板电脑上的蓝牙配置,以及建立和接受与配对设备的连接。"</string> <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"允许该应用查看手机上的蓝牙配置,以及建立和接受与配对设备的连接。"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index 8841536..2d3c418 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"飛行模式"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"飛航模式為 [開啟]"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"飛行模式為 [關閉]"</string> + <string name="global_action_settings" msgid="1756531602592545966">"設定"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"安全模式"</string> <string name="android_system_label" msgid="6577375335728551336">"Android 系統"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index bab94b4..e309acc 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -173,6 +173,8 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"飛航模式"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"飛航模式為 [開啟]"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"飛航模式為 [關閉]"</string> + <!-- no translation found for global_action_settings (1756531602592545966) --> + <skip /> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"超過 999"</string> <string name="safeMode" msgid="2788228061547930246">"安全模式"</string> <string name="android_system_label" msgid="6577375335728551336">"Android 系統"</string> @@ -338,7 +340,7 @@ <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"送出「WAP PUSH 已接收」廣播"</string> <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"允許應用程式在收到 WAP PUSH 訊息時發送通知。請注意,惡意應用程式可能利用此功能偽造 MMS 簡訊回條,或私自將網頁內容更換為惡意陷阱。"</string> <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"傳送網路計分廣播通知"</string> - <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"允許應用程式廣播網路需計分的通知訊息 (一般應用程式並不需要)。"</string> + <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"允許應用程式廣播「網路需計分」的通知訊息 (一般應用程式並不需要)。"</string> <string name="permlab_setProcessLimit" msgid="2451873664363662666">"執行程序限制數"</string> <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"允許應用程式控制可執行程序的數量上限 (一般應用程式不需使用)。"</string> <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"強制關閉背景應用程式"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 4dbd003..4e36a1b 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -173,6 +173,7 @@ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Imodi yendiza"</string> <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Imodi yendiza IVULIWE"</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Imodi yendiza IVALIWE"</string> + <string name="global_action_settings" msgid="1756531602592545966">"Izilungiselelo"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> <string name="safeMode" msgid="2788228061547930246">"Imodi ephephile"</string> <string name="android_system_label" msgid="6577375335728551336">"Uhlelo lwe-Android"</string> diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index b14453a..cce4dbd 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -746,7 +746,14 @@ selected a new global font size. --> <flag name="fontScale" value="0x40000000" /> </attr> - + + <!-- Indicate that the activity can be launched as the embedded child of another + activity. Particularly in the case where the child lives in a container + such as a Display owned by another activity. + + <p>The default value of this attribute is <code>false</code>. --> + <attr name="allowEmbedded" format="boolean" /> + <!-- Descriptive text for the associated data. --> <attr name="description" format="reference" /> @@ -1541,6 +1548,7 @@ primary user. Can only be used with receivers. --> <attr name="primaryUserOnly" format="boolean" /> <attr name="persistable" /> + <attr name="allowEmbedded" /> </declare-styleable> <!-- The <code>activity-alias</code> tag declares a new diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 9712c03..dfec774 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2094,7 +2094,8 @@ <public type="attr" name="banner" id="0x10103f2" /> <public type="attr" name="windowSwipeToDismiss" id="0x10103f3" /> - <public type="attr" name="isGame" /> + <public type="attr" name="isGame" id="0x10103f4" /> + <public type="attr" name="allowEmbedded" id="0x10103f5" /> <!-- =============================================================== Resources added in version 21 of the platform diff --git a/graphics/java/android/graphics/drawable/TouchFeedbackDrawable.java b/graphics/java/android/graphics/drawable/TouchFeedbackDrawable.java index 5101e35..3b9d513 100644 --- a/graphics/java/android/graphics/drawable/TouchFeedbackDrawable.java +++ b/graphics/java/android/graphics/drawable/TouchFeedbackDrawable.java @@ -435,8 +435,7 @@ public class TouchFeedbackDrawable extends LayerDrawable { // first. This will merge SRC_OVER (directly) onto the canvas. if (!projected && rippleRestoreCount < 0) { rippleRestoreCount = canvas.saveLayer(bounds.left, bounds.top, - bounds.right, bounds.bottom, null, 0); - canvas.clipRect(bounds); + bounds.right, bounds.bottom, null); } drewRipples |= ripple.draw(canvas, getRipplePaint()); @@ -454,7 +453,7 @@ public class TouchFeedbackDrawable extends LayerDrawable { if (drewRipples && !projected && rippleRestoreCount >= 0) { final PorterDuffXfermode xfermode = mState.getTintXfermode(); canvas.saveLayer(bounds.left, bounds.top, - bounds.right, bounds.bottom, getMaskingPaint(xfermode), 0); + bounds.right, bounds.bottom, getMaskingPaint(xfermode)); } Drawable mask = null; @@ -472,7 +471,7 @@ public class TouchFeedbackDrawable extends LayerDrawable { if (mask != null && drewRipples) { // TODO: This will also mask the lower layer, which is bad. canvas.saveLayer(bounds.left, bounds.top, bounds.right, - bounds.bottom, getMaskingPaint(DST_IN), 0); + bounds.bottom, getMaskingPaint(DST_IN)); mask.draw(canvas); } diff --git a/libs/hwui/DisplayList.cpp b/libs/hwui/DisplayList.cpp index a5d8dcb..dac86cb 100644 --- a/libs/hwui/DisplayList.cpp +++ b/libs/hwui/DisplayList.cpp @@ -29,7 +29,10 @@ namespace android { namespace uirenderer { -DisplayListData::DisplayListData() : projectionReceiveIndex(-1), functorCount(0), hasDrawOps(false) { +DisplayListData::DisplayListData() + : projectionReceiveIndex(-1) + , functorCount(0) + , hasDrawOps(false) { } DisplayListData::~DisplayListData() { diff --git a/libs/hwui/DisplayListOp.h b/libs/hwui/DisplayListOp.h index f19da9d..6dfb918 100644 --- a/libs/hwui/DisplayListOp.h +++ b/libs/hwui/DisplayListOp.h @@ -318,12 +318,19 @@ private: class SaveLayerOp : public StateOp { public: SaveLayerOp(float left, float top, float right, float bottom, int alpha, int flags) - : mArea(left, top, right, bottom), mPaint(&mCachedPaint), mFlags(flags) { + : mArea(left, top, right, bottom) + , mPaint(&mCachedPaint) + , mFlags(flags) + , mConvexMask(NULL) { mCachedPaint.setAlpha(alpha); } SaveLayerOp(float left, float top, float right, float bottom, const SkPaint* paint, int flags) - : mArea(left, top, right, bottom), mPaint(paint), mFlags(flags) {} + : mArea(left, top, right, bottom) + , mPaint(paint) + , mFlags(flags) + , mConvexMask(NULL) + {} virtual void defer(DeferStateStruct& deferStruct, int saveCount, int level, bool useQuickReject) { @@ -338,7 +345,8 @@ public: } virtual void applyState(OpenGLRenderer& renderer, int saveCount) const { - renderer.saveLayer(mArea.left, mArea.top, mArea.right, mArea.bottom, mPaint, mFlags); + renderer.saveLayer(mArea.left, mArea.top, mArea.right, mArea.bottom, + mPaint, mFlags, mConvexMask); } virtual void output(int level, uint32_t logFlags) const { @@ -350,6 +358,11 @@ public: int getFlags() { return mFlags; } + // Called to make SaveLayerOp clip to the provided mask when drawing back/restored + void setMask(const SkPath* convexMask) { + mConvexMask = convexMask; + } + private: bool isSaveLayerAlpha() const { SkXfermode::Mode mode = OpenGLRenderer::getXfermodeDirect(mPaint); @@ -361,6 +374,10 @@ private: const SkPaint* mPaint; SkPaint mCachedPaint; int mFlags; + + // Convex path, points at data in RenderNode, valid for the duration of the frame only + // Only used for masking the SaveLayer which wraps projected RenderNodes + const SkPath* mConvexMask; }; class TranslateOp : public StateOp { diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp index 6c73d68..e36d975 100644 --- a/libs/hwui/DisplayListRenderer.cpp +++ b/libs/hwui/DisplayListRenderer.cpp @@ -184,20 +184,15 @@ status_t DisplayListRenderer::drawDisplayList(RenderNode* displayList, // dirty is an out parameter and should not be recorded, // it matters only when replaying the display list - // TODO: To be safe, the display list should be ref-counted in the - // resources cache, but we rely on the caller (UI toolkit) to - // do the right thing for now + if (displayList->stagingProperties().isProjectionReceiver()) { + // use staging property, since recording on UI thread + mDisplayListData->projectionReceiveIndex = mDisplayListData->displayListOps.size(); + } DrawDisplayListOp* op = new (alloc()) DrawDisplayListOp(displayList, flags, *currentTransform()); addDrawOp(op); mDisplayListData->addChild(op); - - if (displayList->stagingProperties().isProjectionReceiver()) { - // use staging property, since recording on UI thread - mDisplayListData->projectionReceiveIndex = mDisplayListData->displayListOps.size() - 1; - } - return DrawGlInfo::kStatusDone; } diff --git a/libs/hwui/Layer.cpp b/libs/hwui/Layer.cpp index bfe4eda..9606e58 100644 --- a/libs/hwui/Layer.cpp +++ b/libs/hwui/Layer.cpp @@ -48,6 +48,7 @@ Layer::Layer(const uint32_t layerWidth, const uint32_t layerHeight): hasDrawnSinceUpdate = false; forceFilter = false; deferredList = NULL; + convexMask = NULL; caches.resourceCache.incrementRefcount(this); } diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h index 5375b45..49610d5 100644 --- a/libs/hwui/Layer.h +++ b/libs/hwui/Layer.h @@ -227,6 +227,14 @@ public: ANDROID_API void setColorFilter(SkColorFilter* filter); + inline void setConvexMask(const SkPath* convexMask) { + this->convexMask = convexMask; + } + + inline const SkPath* getConvexMask() { + return convexMask; + } + void bindStencilRenderBuffer() const; void bindTexture() const; @@ -378,6 +386,13 @@ private: */ DeferredDisplayList* deferredList; + /** + * This convex path should be used to mask the layer's draw to the screen. + * + * Data not owned/managed by layer object. + */ + const SkPath* convexMask; + }; // struct Layer }; // namespace uirenderer diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index f37487f..1f5389c 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -704,11 +704,11 @@ void OpenGLRenderer::onSnapshotRestored(const Snapshot& removed, const Snapshot& /////////////////////////////////////////////////////////////////////////////// int OpenGLRenderer::saveLayer(float left, float top, float right, float bottom, - const SkPaint* paint, int flags) { + const SkPaint* paint, int flags, const SkPath* convexMask) { const int count = saveSnapshot(flags); if (!currentSnapshot()->isIgnored()) { - createLayer(left, top, right, bottom, paint, flags); + createLayer(left, top, right, bottom, paint, flags, convexMask); } return count; @@ -782,7 +782,6 @@ int OpenGLRenderer::saveLayerDeferred(float left, float top, float right, float return count; } - /** * Layers are viewed by Skia are slightly different than layers in image editing * programs (for instance.) When a layer is created, previously created layers @@ -835,7 +834,7 @@ int OpenGLRenderer::saveLayerDeferred(float left, float top, float right, float * something actually gets drawn are the layers regions cleared. */ bool OpenGLRenderer::createLayer(float left, float top, float right, float bottom, - const SkPaint* paint, int flags) { + const SkPaint* paint, int flags, const SkPath* convexMask) { LAYER_LOGD("Requesting layer %.2fx%.2f", right - left, bottom - top); LAYER_LOGD("Layer cache size = %d", mCaches.layerCache.getSize()); @@ -865,6 +864,7 @@ bool OpenGLRenderer::createLayer(float left, float top, float right, float botto layer->setBlend(true); layer->setDirty(false); + layer->setConvexMask(convexMask); // note: the mask must be cleared before returning to the cache // Save the layer in the snapshot mSnapshot->flags |= Snapshot::kFlagIsLayer; @@ -1013,6 +1013,7 @@ void OpenGLRenderer::composeLayer(const Snapshot& removed, const Snapshot& resto dirtyClip(); // Failing to add the layer to the cache should happen only if the layer is too large + layer->setConvexMask(NULL); if (!mCaches.layerCache.put(layer)) { LAYER_LOGD("Deleting layer"); Caches::getInstance().resourceCache.decrementRefcount(layer); @@ -1122,6 +1123,38 @@ void OpenGLRenderer::composeLayerRect(Layer* layer, const Rect& rect, bool swap) #define DRAW_DOUBLE_STENCIL(DRAW_COMMAND) DRAW_DOUBLE_STENCIL_IF(true, DRAW_COMMAND) void OpenGLRenderer::composeLayerRegion(Layer* layer, const Rect& rect) { + if (CC_UNLIKELY(layer->region.isEmpty())) return; // nothing to draw + + if (layer->getConvexMask()) { + save(SkCanvas::kClip_SaveFlag | SkCanvas::kMatrix_SaveFlag); + + // clip to the area of the layer the mask can be larger + clipRect(rect.left, rect.top, rect.right, rect.bottom, SkRegion::kIntersect_Op); + + SkPaint paint; + paint.setAntiAlias(true); + paint.setColor(SkColorSetARGB(int(getLayerAlpha(layer) * 255), 0, 0, 0)); + + SkiaShader* oldShader = mDrawModifiers.mShader; + + // create LayerShader to map SaveLayer content into subsequent draw + SkMatrix shaderMatrix; + shaderMatrix.setTranslate(rect.left, rect.bottom); + shaderMatrix.preScale(1, -1); + SkiaLayerShader layerShader(layer, &shaderMatrix); + mDrawModifiers.mShader = &layerShader; + + // Since the drawing primitive is defined in local drawing space, + // we don't need to modify the draw matrix + const SkPath* maskPath = layer->getConvexMask(); + DRAW_DOUBLE_STENCIL(drawConvexPath(*maskPath, &paint)); + + mDrawModifiers.mShader = oldShader; + restore(); + + return; + } + if (layer->region.isRect()) { layer->setRegionAsRect(); @@ -1131,88 +1164,87 @@ void OpenGLRenderer::composeLayerRegion(Layer* layer, const Rect& rect) { return; } - if (CC_LIKELY(!layer->region.isEmpty())) { - size_t count; - const android::Rect* rects; - Region safeRegion; - if (CC_LIKELY(hasRectToRectTransform())) { - rects = layer->region.getArray(&count); - } else { - safeRegion = Region::createTJunctionFreeRegion(layer->region); - rects = safeRegion.getArray(&count); - } + // standard Region based draw + size_t count; + const android::Rect* rects; + Region safeRegion; + if (CC_LIKELY(hasRectToRectTransform())) { + rects = layer->region.getArray(&count); + } else { + safeRegion = Region::createTJunctionFreeRegion(layer->region); + rects = safeRegion.getArray(&count); + } - const float alpha = getLayerAlpha(layer); - const float texX = 1.0f / float(layer->getWidth()); - const float texY = 1.0f / float(layer->getHeight()); - const float height = rect.getHeight(); + const float alpha = getLayerAlpha(layer); + const float texX = 1.0f / float(layer->getWidth()); + const float texY = 1.0f / float(layer->getHeight()); + const float height = rect.getHeight(); - setupDraw(); + setupDraw(); - // We must get (and therefore bind) the region mesh buffer - // after we setup drawing in case we need to mess with the - // stencil buffer in setupDraw() - TextureVertex* mesh = mCaches.getRegionMesh(); - uint32_t numQuads = 0; + // We must get (and therefore bind) the region mesh buffer + // after we setup drawing in case we need to mess with the + // stencil buffer in setupDraw() + TextureVertex* mesh = mCaches.getRegionMesh(); + uint32_t numQuads = 0; - setupDrawWithTexture(); - setupDrawColor(alpha, alpha, alpha, alpha); - setupDrawColorFilter(layer->getColorFilter()); - setupDrawBlending(layer); - setupDrawProgram(); - setupDrawDirtyRegionsDisabled(); - setupDrawPureColorUniforms(); - setupDrawColorFilterUniforms(layer->getColorFilter()); - setupDrawTexture(layer->getTexture()); - if (currentTransform()->isPureTranslate()) { - const float x = (int) floorf(rect.left + currentTransform()->getTranslateX() + 0.5f); - const float y = (int) floorf(rect.top + currentTransform()->getTranslateY() + 0.5f); + setupDrawWithTexture(); + setupDrawColor(alpha, alpha, alpha, alpha); + setupDrawColorFilter(layer->getColorFilter()); + setupDrawBlending(layer); + setupDrawProgram(); + setupDrawDirtyRegionsDisabled(); + setupDrawPureColorUniforms(); + setupDrawColorFilterUniforms(layer->getColorFilter()); + setupDrawTexture(layer->getTexture()); + if (currentTransform()->isPureTranslate()) { + const float x = (int) floorf(rect.left + currentTransform()->getTranslateX() + 0.5f); + const float y = (int) floorf(rect.top + currentTransform()->getTranslateY() + 0.5f); - layer->setFilter(GL_NEAREST); - setupDrawModelView(kModelViewMode_Translate, false, - x, y, x + rect.getWidth(), y + rect.getHeight(), true); - } else { - layer->setFilter(GL_LINEAR); - setupDrawModelView(kModelViewMode_Translate, false, - rect.left, rect.top, rect.right, rect.bottom); - } - setupDrawMeshIndices(&mesh[0].x, &mesh[0].u); + layer->setFilter(GL_NEAREST); + setupDrawModelView(kModelViewMode_Translate, false, + x, y, x + rect.getWidth(), y + rect.getHeight(), true); + } else { + layer->setFilter(GL_LINEAR); + setupDrawModelView(kModelViewMode_Translate, false, + rect.left, rect.top, rect.right, rect.bottom); + } + setupDrawMeshIndices(&mesh[0].x, &mesh[0].u); - for (size_t i = 0; i < count; i++) { - const android::Rect* r = &rects[i]; - - const float u1 = r->left * texX; - const float v1 = (height - r->top) * texY; - const float u2 = r->right * texX; - const float v2 = (height - r->bottom) * texY; - - // TODO: Reject quads outside of the clip - TextureVertex::set(mesh++, r->left, r->top, u1, v1); - TextureVertex::set(mesh++, r->right, r->top, u2, v1); - TextureVertex::set(mesh++, r->left, r->bottom, u1, v2); - TextureVertex::set(mesh++, r->right, r->bottom, u2, v2); - - numQuads++; - - if (numQuads >= gMaxNumberOfQuads) { - DRAW_DOUBLE_STENCIL(glDrawElements(GL_TRIANGLES, numQuads * 6, - GL_UNSIGNED_SHORT, NULL)); - numQuads = 0; - mesh = mCaches.getRegionMesh(); - } - } + for (size_t i = 0; i < count; i++) { + const android::Rect* r = &rects[i]; + + const float u1 = r->left * texX; + const float v1 = (height - r->top) * texY; + const float u2 = r->right * texX; + const float v2 = (height - r->bottom) * texY; - if (numQuads > 0) { + // TODO: Reject quads outside of the clip + TextureVertex::set(mesh++, r->left, r->top, u1, v1); + TextureVertex::set(mesh++, r->right, r->top, u2, v1); + TextureVertex::set(mesh++, r->left, r->bottom, u1, v2); + TextureVertex::set(mesh++, r->right, r->bottom, u2, v2); + + numQuads++; + + if (numQuads >= gMaxNumberOfQuads) { DRAW_DOUBLE_STENCIL(glDrawElements(GL_TRIANGLES, numQuads * 6, GL_UNSIGNED_SHORT, NULL)); + numQuads = 0; + mesh = mCaches.getRegionMesh(); } + } + + if (numQuads > 0) { + DRAW_DOUBLE_STENCIL(glDrawElements(GL_TRIANGLES, numQuads * 6, + GL_UNSIGNED_SHORT, NULL)); + } #if DEBUG_LAYERS_AS_REGIONS - drawRegionRectsDebug(layer->region); + drawRegionRectsDebug(layer->region); #endif - layer->region.clear(); - } + layer->region.clear(); } #if DEBUG_LAYERS_AS_REGIONS @@ -2926,7 +2958,7 @@ status_t OpenGLRenderer::drawLayer(Layer* layer, float x, float y) { if (layer->isTextureLayer()) { transform = &layer->getTransform(); if (!transform->isIdentity()) { - save(0); + save(SkCanvas::kMatrix_SaveFlag); concatMatrix(*transform); } } diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h index 2debd2e..b49d1e1 100644 --- a/libs/hwui/OpenGLRenderer.h +++ b/libs/hwui/OpenGLRenderer.h @@ -161,7 +161,14 @@ public: ANDROID_API void flushLayerUpdates(); ANDROID_API virtual int saveLayer(float left, float top, float right, float bottom, - const SkPaint* paint, int flags); + const SkPaint* paint, int flags) { + return saveLayer(left, top, right, bottom, paint, flags, NULL); + } + + // Specialized saveLayer implementation, which will pass the convexMask to an FBO layer, if + // created, which will in turn clip to that mask when drawn back/restored. + int saveLayer(float left, float top, float right, float bottom, + const SkPaint* paint, int flags, const SkPath* convexMask); int saveLayerDeferred(float left, float top, float right, float bottom, const SkPaint* paint, int flags); @@ -523,11 +530,12 @@ private: * @param alpha The translucency of the layer * @param mode The blending mode of the layer * @param flags The layer save flags + * @param mask A mask to use when drawing the layer back, may be empty * * @return True if the layer was successfully created, false otherwise */ bool createLayer(float left, float top, float right, float bottom, - const SkPaint* paint, int flags); + const SkPaint* paint, int flags, const SkPath* convexMask); /** * Creates a new layer stored in the specified snapshot as an FBO. diff --git a/libs/hwui/Rect.h b/libs/hwui/Rect.h index 0083b77..92964a8 100644 --- a/libs/hwui/Rect.h +++ b/libs/hwui/Rect.h @@ -30,6 +30,8 @@ namespace uirenderer { #define RECT_STRING "%7.2f %7.2f %7.2f %7.2f" #define RECT_ARGS(r) \ (r).left, (r).top, (r).right, (r).bottom +#define SK_RECT_ARGS(r) \ + (r).left(), (r).top(), (r).right(), (r).bottom() /////////////////////////////////////////////////////////////////////////////// // Structs diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index 9aa47a3..2008f02 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -77,7 +77,7 @@ void RenderNode::setStagingDisplayList(DisplayListData* data) { */ void RenderNode::output(uint32_t level) { ALOGD("%*sStart display list (%p, %s, render=%d)", (level - 1) * 2, "", this, - mName.string(), isRenderable()); + getName(), isRenderable()); ALOGD("%*s%s %d", level * 2, "", "Save", SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); @@ -87,7 +87,7 @@ void RenderNode::output(uint32_t level) { mDisplayListData->displayListOps[i]->output(level, flags); } - ALOGD("%*sDone (%p, %s)", (level - 1) * 2, "", this, mName.string()); + ALOGD("%*sDone (%p, %s)", (level - 1) * 2, "", this, getName()); } void RenderNode::prepareTree(TreeInfo& info) { @@ -263,12 +263,13 @@ void RenderNode::computeOrdering() { for (unsigned int i = 0; i < mDisplayListData->children().size(); i++) { DrawDisplayListOp* childOp = mDisplayListData->children()[i]; childOp->mDisplayList->computeOrderingImpl(childOp, - &mProjectedNodes, &mat4::identity()); + properties().getOutline().getPath(), &mProjectedNodes, &mat4::identity()); } } void RenderNode::computeOrderingImpl( DrawDisplayListOp* opState, + const SkPath* outlineOfProjectionSurface, Vector<DrawDisplayListOp*>* compositedChildrenOfProjectionSurface, const mat4* transformFromProjectionSurface) { mProjectedNodes.clear(); @@ -296,6 +297,7 @@ void RenderNode::computeOrderingImpl( DrawDisplayListOp* childOp = mDisplayListData->children()[i]; RenderNode* child = childOp->mDisplayList; + const SkPath* projectionOutline = NULL; Vector<DrawDisplayListOp*>* projectionChildren = NULL; const mat4* projectionTransform = NULL; if (isProjectionReceiver && !child->properties().getProjectBackwards()) { @@ -304,6 +306,7 @@ void RenderNode::computeOrderingImpl( // Note that if a direct descendent is projecting backwards, we pass it's // grandparent projection collection, since it shouldn't project onto it's // parent, where it will already be drawing. + projectionOutline = properties().getOutline().getPath(); projectionChildren = &mProjectedNodes; projectionTransform = &mat4::identity(); } else { @@ -311,10 +314,12 @@ void RenderNode::computeOrderingImpl( applyViewPropertyTransforms(localTransformFromProjectionSurface); haveAppliedPropertiesToProjection = true; } + projectionOutline = outlineOfProjectionSurface; projectionChildren = compositedChildrenOfProjectionSurface; projectionTransform = &localTransformFromProjectionSurface; } - child->computeOrderingImpl(childOp, projectionChildren, projectionTransform); + child->computeOrderingImpl(childOp, + projectionOutline, projectionChildren, projectionTransform); } } } @@ -354,7 +359,7 @@ public: : mReplayStruct(replayStruct), mLevel(level) {} inline void operator()(DisplayListOp* operation, int saveCount, bool clipToBounds) { #if DEBUG_DISPLAY_LIST_OPS_AS_EVENTS - properties().getReplayStruct().mRenderer.eventMark(operation->name()); + mReplayStruct.mRenderer.eventMark(operation->name()); #endif operation->replay(mReplayStruct, saveCount, mLevel, clipToBounds); } @@ -364,8 +369,6 @@ public: } inline void endMark() { mReplayStruct.mRenderer.endMark(); - DISPLAY_LIST_LOGD("%*sDone (%p, %s), returning %d", level * 2, "", this, mName.string(), - mReplayStruct.mDrawGlStatus); } inline int level() { return mLevel; } inline int replayFlags() { return mReplayStruct.mReplayFlags; } @@ -470,6 +473,10 @@ void RenderNode::issueOperationsOf3dChildren(const Vector<ZDrawDisplayListOpPair endIndex = size; shadowIndex = drawIndex; // potentially draw shadow for each pos Z child } + + DISPLAY_LIST_LOGD("%*s%d %s 3d children:", (handler.level() + 1) * 2, "", + endIndex - drawIndex, mode == kNegativeZChildren ? "negative" : "positive"); + float lastCasterZ = 0.0f; while (shadowIndex < endIndex || drawIndex < endIndex) { if (shadowIndex < endIndex) { @@ -506,6 +513,42 @@ void RenderNode::issueOperationsOf3dChildren(const Vector<ZDrawDisplayListOpPair template <class T> void RenderNode::issueOperationsOfProjectedChildren(OpenGLRenderer& renderer, T& handler) { + DISPLAY_LIST_LOGD("%*s%d projected children:", (handler.level() + 1) * 2, "", mProjectedNodes.size()); + const SkPath* projectionReceiverOutline = properties().getOutline().getPath(); + bool maskProjecteesWithPath = projectionReceiverOutline != NULL + && !projectionReceiverOutline->isRect(NULL); + int restoreTo = renderer.getSaveCount(); + + // If the projection reciever has an outline, we mask each of the projected rendernodes to it + // Either with clipRect, or special saveLayer masking + LinearAllocator& alloc = handler.allocator(); + if (projectionReceiverOutline != NULL) { + const SkRect& outlineBounds = projectionReceiverOutline->getBounds(); + if (projectionReceiverOutline->isRect(NULL)) { + // mask to the rect outline simply with clipRect + handler(new (alloc) SaveOp(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag), + PROPERTY_SAVECOUNT, properties().getClipToBounds()); + ClipRectOp* clipOp = new (alloc) ClipRectOp( + outlineBounds.left(), outlineBounds.top(), + outlineBounds.right(), outlineBounds.bottom(), SkRegion::kIntersect_Op); + handler(clipOp, PROPERTY_SAVECOUNT, properties().getClipToBounds()); + } else { + // wrap the projected RenderNodes with a SaveLayer that will mask to the outline + SaveLayerOp* op = new (alloc) SaveLayerOp( + outlineBounds.left(), outlineBounds.top(), + outlineBounds.right(), outlineBounds.bottom(), + 255, SkCanvas::kARGB_ClipLayer_SaveFlag); + op->setMask(projectionReceiverOutline); + handler(op, PROPERTY_SAVECOUNT, properties().getClipToBounds()); + + /* TODO: add optimizations here to take advantage of placement/size of projected + * children (which may shrink saveLayer area significantly). This is dependent on + * passing actual drawing/dirtying bounds of projected content down to native. + */ + } + } + + // draw projected nodes for (size_t i = 0; i < mProjectedNodes.size(); i++) { DrawDisplayListOp* childOp = mProjectedNodes[i]; @@ -517,6 +560,11 @@ void RenderNode::issueOperationsOfProjectedChildren(OpenGLRenderer& renderer, T& childOp->mSkipInOrderDraw = true; renderer.restoreToCount(restoreTo); } + + if (projectionReceiverOutline != NULL) { + handler(new (alloc) RestoreToCountOp(restoreTo), + PROPERTY_SAVECOUNT, properties().getClipToBounds()); + } } /** @@ -532,17 +580,17 @@ template <class T> void RenderNode::issueOperations(OpenGLRenderer& renderer, T& handler) { const int level = handler.level(); if (mDisplayListData->isEmpty() || properties().getAlpha() <= 0) { - DISPLAY_LIST_LOGD("%*sEmpty display list (%p, %s)", level * 2, "", this, mName.string()); + DISPLAY_LIST_LOGD("%*sEmpty display list (%p, %s)", level * 2, "", this, getName()); return; } - handler.startMark(mName.string()); + handler.startMark(getName()); #if DEBUG_DISPLAY_LIST - Rect* clipRect = renderer.getClipRect(); - DISPLAY_LIST_LOGD("%*sStart display list (%p, %s), clipRect: %.0f, %.0f, %.0f, %.0f", - level * 2, "", this, mName.string(), clipRect->left, clipRect->top, - clipRect->right, clipRect->bottom); + const Rect& clipRect = renderer.getLocalClipBounds(); + DISPLAY_LIST_LOGD("%*sStart display list (%p, %s), localClipBounds: %.0f, %.0f, %.0f, %.0f", + level * 2, "", this, getName(), + clipRect.left, clipRect.top, clipRect.right, clipRect.bottom); #endif LinearAllocator& alloc = handler.allocator(); @@ -590,6 +638,7 @@ void RenderNode::issueOperations(OpenGLRenderer& renderer, T& handler) { PROPERTY_SAVECOUNT, properties().getClipToBounds()); renderer.setOverrideLayerAlpha(1.0f); + DISPLAY_LIST_LOGD("%*sDone (%p, %s)", level * 2, "", this, getName()); handler.endMark(); } diff --git a/libs/hwui/RenderNode.h b/libs/hwui/RenderNode.h index 6688952..b9edbe5 100644 --- a/libs/hwui/RenderNode.h +++ b/libs/hwui/RenderNode.h @@ -172,6 +172,7 @@ private: void applyViewPropertyTransforms(mat4& matrix, bool true3dTransform = false); void computeOrderingImpl(DrawDisplayListOp* opState, + const SkPath* outlineOfProjectionSurface, Vector<DrawDisplayListOp*>* compositedChildrenOfProjectionSurface, const mat4* transformFromProjectionSurface); diff --git a/libs/hwui/Renderer.h b/libs/hwui/Renderer.h index efcea5f..3209a53 100644 --- a/libs/hwui/Renderer.h +++ b/libs/hwui/Renderer.h @@ -167,7 +167,7 @@ public: virtual void concatMatrix(const SkMatrix* matrix) = 0; // clip - virtual const Rect& getClipBounds() const = 0; + virtual const Rect& getLocalClipBounds() const = 0; virtual bool quickRejectConservative(float left, float top, float right, float bottom) const = 0; virtual bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op) = 0; diff --git a/libs/hwui/SkiaShader.cpp b/libs/hwui/SkiaShader.cpp index 4f2a432..6a4a0c8 100644 --- a/libs/hwui/SkiaShader.cpp +++ b/libs/hwui/SkiaShader.cpp @@ -73,7 +73,7 @@ SkiaShader::SkiaShader(): mCaches(NULL) { } SkiaShader::SkiaShader(Type type, SkShader* key, SkShader::TileMode tileX, - SkShader::TileMode tileY, SkMatrix* matrix, bool blend): + SkShader::TileMode tileY, const SkMatrix* matrix, bool blend): mType(type), mKey(key), mTileX(tileX), mTileY(tileY), mBlend(blend), mCaches(NULL) { setMatrix(matrix); @@ -101,6 +101,49 @@ void SkiaShader::computeScreenSpaceMatrix(mat4& screenSpace, const mat4& modelVi } /////////////////////////////////////////////////////////////////////////////// +// Layer shader +/////////////////////////////////////////////////////////////////////////////// + +SkiaLayerShader::SkiaLayerShader(Layer* layer, const SkMatrix* matrix): + SkiaShader(kBitmap, NULL, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, + matrix, layer->isBlend()), mLayer(layer) { + updateLocalMatrix(matrix); +} + +SkiaShader* SkiaLayerShader::copy() { + SkiaLayerShader* copy = new SkiaLayerShader(); + copy->copyFrom(*this); + copy->mLayer = mLayer; + return copy; +} + +void SkiaLayerShader::describe(ProgramDescription& description, const Extensions& extensions) { + description.hasBitmap = true; +} + +void SkiaLayerShader::setupProgram(Program* program, const mat4& modelView, + const Snapshot& snapshot, GLuint* textureUnit) { + GLuint textureSlot = (*textureUnit)++; + Caches::getInstance().activeTexture(textureSlot); + + const float width = mLayer->getWidth(); + const float height = mLayer->getHeight(); + + mat4 textureTransform; + computeScreenSpaceMatrix(textureTransform, modelView); + + // Uniforms + mLayer->bindTexture(); + mLayer->setWrap(GL_CLAMP_TO_EDGE); + mLayer->setFilter(GL_LINEAR); + + glUniform1i(program->getUniform("bitmapSampler"), textureSlot); + glUniformMatrix4fv(program->getUniform("textureTransform"), 1, + GL_FALSE, &textureTransform.data[0]); + glUniform2f(program->getUniform("textureDimension"), 1.0f / width, 1.0f / height); +} + +/////////////////////////////////////////////////////////////////////////////// // Bitmap shader /////////////////////////////////////////////////////////////////////////////// diff --git a/libs/hwui/SkiaShader.h b/libs/hwui/SkiaShader.h index 6015761..9f30257 100644 --- a/libs/hwui/SkiaShader.h +++ b/libs/hwui/SkiaShader.h @@ -58,7 +58,7 @@ public: }; ANDROID_API SkiaShader(Type type, SkShader* key, SkShader::TileMode tileX, - SkShader::TileMode tileY, SkMatrix* matrix, bool blend); + SkShader::TileMode tileY, const SkMatrix* matrix, bool blend); virtual ~SkiaShader(); virtual SkiaShader* copy() = 0; @@ -88,7 +88,7 @@ public: return mGenerationId; } - void setMatrix(SkMatrix* matrix) { + void setMatrix(const SkMatrix* matrix) { updateLocalMatrix(matrix); mGenerationId++; } @@ -134,6 +134,24 @@ private: /////////////////////////////////////////////////////////////////////////////// /** + * A shader that draws a layer. + */ +struct SkiaLayerShader: public SkiaShader { + SkiaLayerShader(Layer* layer, const SkMatrix* matrix); + SkiaShader* copy(); + + void describe(ProgramDescription& description, const Extensions& extensions); + void setupProgram(Program* program, const mat4& modelView, const Snapshot& snapshot, + GLuint* textureUnit); + +private: + SkiaLayerShader() { + } + + Layer* mLayer; +}; // struct SkiaLayerShader + +/** * A shader that draws a bitmap. */ struct SkiaBitmapShader: public SkiaShader { diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h index 5bdb18a..038aea8 100644 --- a/libs/hwui/Snapshot.h +++ b/libs/hwui/Snapshot.h @@ -108,7 +108,12 @@ public: * Returns the current clip in local coordinates. The clip rect is * transformed by the inverse transform matrix. */ - ANDROID_API const Rect& getLocalClip(); + const Rect& getLocalClip(); + + /** + * Returns the current clip in render target coordinates. + */ + const Rect& getRenderTargetClip() { return *clipRect; } /** * Resets the clip to the specified rect. @@ -238,7 +243,7 @@ private: mat4 mTransformRoot; Rect mClipRectRoot; - Rect mLocalClip; + Rect mLocalClip; // don't use directly, call getLocalClip() which initializes this SkRegion mClipRegionRoot; diff --git a/libs/hwui/StatefulBaseRenderer.h b/libs/hwui/StatefulBaseRenderer.h index bf34bec..64354ac 100644 --- a/libs/hwui/StatefulBaseRenderer.h +++ b/libs/hwui/StatefulBaseRenderer.h @@ -75,7 +75,8 @@ public: void concatMatrix(const Matrix4& matrix); // internal only convenience method // Clip - const Rect& getClipBounds() const { return mSnapshot->getLocalClip(); } + virtual const Rect& getLocalClipBounds() const { return mSnapshot->getLocalClip(); } + virtual bool quickRejectConservative(float left, float top, float right, float bottom) const; virtual bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op); @@ -83,6 +84,8 @@ public: virtual bool clipRegion(const SkRegion* region, SkRegion::Op op); protected: + const Rect& getRenderTargetClipBounds() const { return mSnapshot->getRenderTargetClip(); } + int getWidth() { return mWidth; } int getHeight() { return mHeight; } diff --git a/native/android/sensor.cpp b/native/android/sensor.cpp index fb4de9e..acfcd83 100644 --- a/native/android/sensor.cpp +++ b/native/android/sensor.cpp @@ -123,10 +123,13 @@ int ASensorEventQueue_hasEvents(ASensorEventQueue* queue) ssize_t ASensorEventQueue_getEvents(ASensorEventQueue* queue, ASensorEvent* events, size_t count) { - return static_cast<SensorEventQueue*>(queue)->read(events, count); + ssize_t actual = static_cast<SensorEventQueue*>(queue)->read(events, count); + if (actual > 0) { + static_cast<SensorEventQueue*>(queue)->sendAck(events, actual); + } + return actual; } - /*****************************************************************************/ const char* ASensor_getName(ASensor const* sensor) diff --git a/packages/DefaultContainerService/res/values-th/strings.xml b/packages/DefaultContainerService/res/values-th/strings.xml index 3a7080c..621d7ed 100644 --- a/packages/DefaultContainerService/res/values-th/strings.xml +++ b/packages/DefaultContainerService/res/values-th/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="4841491635055379553">"ตัวช่วยเหลือของการเข้าถึงแพคเกจ"</string> + <string name="service_name" msgid="4841491635055379553">"ตัวช่วยเหลือของการเข้าถึงแพ็กเกจ"</string> </resources> diff --git a/packages/DocumentsUI/res/values-af/strings.xml b/packages/DocumentsUI/res/values-af/strings.xml index 41fd63a..65dbe18 100644 --- a/packages/DocumentsUI/res/values-af/strings.xml +++ b/packages/DocumentsUI/res/values-af/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Stoor"</string> <string name="menu_share" msgid="3075149983979628146">"Deel"</string> <string name="menu_delete" msgid="8138799623850614177">"Vee uit"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> gekies"</string> <string name="sort_name" msgid="9183560467917256779">"Volgens naam"</string> <string name="sort_date" msgid="586080032956151448">"Volgens datum gewysig"</string> diff --git a/packages/DocumentsUI/res/values-am/strings.xml b/packages/DocumentsUI/res/values-am/strings.xml index c77a8ee..1003c0a 100644 --- a/packages/DocumentsUI/res/values-am/strings.xml +++ b/packages/DocumentsUI/res/values-am/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"አስቀምጥ"</string> <string name="menu_share" msgid="3075149983979628146">"አጋራ"</string> <string name="menu_delete" msgid="8138799623850614177">"ሰርዝ"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ተመርጠዋል"</string> <string name="sort_name" msgid="9183560467917256779">"በስም"</string> <string name="sort_date" msgid="586080032956151448">"በተለወጠበት ቀን"</string> diff --git a/packages/DocumentsUI/res/values-ar/strings.xml b/packages/DocumentsUI/res/values-ar/strings.xml index c59c0ee..e939b3e 100644 --- a/packages/DocumentsUI/res/values-ar/strings.xml +++ b/packages/DocumentsUI/res/values-ar/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"حفظ"</string> <string name="menu_share" msgid="3075149983979628146">"مشاركة"</string> <string name="menu_delete" msgid="8138799623850614177">"حذف"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"تم تحديد <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"بحسب الاسم"</string> <string name="sort_date" msgid="586080032956151448">"بحسب تاريخ التعديل"</string> diff --git a/packages/DocumentsUI/res/values-bg/strings.xml b/packages/DocumentsUI/res/values-bg/strings.xml index c3242b2..18cdb9c 100644 --- a/packages/DocumentsUI/res/values-bg/strings.xml +++ b/packages/DocumentsUI/res/values-bg/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Запазване"</string> <string name="menu_share" msgid="3075149983979628146">"Споделяне"</string> <string name="menu_delete" msgid="8138799623850614177">"Изтриване"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Избрахте <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"По име"</string> <string name="sort_date" msgid="586080032956151448">"По дата на промяната"</string> diff --git a/packages/DocumentsUI/res/values-ca/strings.xml b/packages/DocumentsUI/res/values-ca/strings.xml index 68c7b0e..b883869 100644 --- a/packages/DocumentsUI/res/values-ca/strings.xml +++ b/packages/DocumentsUI/res/values-ca/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Desa"</string> <string name="menu_share" msgid="3075149983979628146">"Comparteix"</string> <string name="menu_delete" msgid="8138799623850614177">"Suprimeix"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Seleccionats: <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Per nom"</string> <string name="sort_date" msgid="586080032956151448">"Per data de modificació"</string> diff --git a/packages/DocumentsUI/res/values-cs/strings.xml b/packages/DocumentsUI/res/values-cs/strings.xml index f089c8b..3827b94 100644 --- a/packages/DocumentsUI/res/values-cs/strings.xml +++ b/packages/DocumentsUI/res/values-cs/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Uložit"</string> <string name="menu_share" msgid="3075149983979628146">"Sdílet"</string> <string name="menu_delete" msgid="8138799623850614177">"Smazat"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Vybráno: <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Podle názvu"</string> <string name="sort_date" msgid="586080032956151448">"Podle data úpravy"</string> diff --git a/packages/DocumentsUI/res/values-da/strings.xml b/packages/DocumentsUI/res/values-da/strings.xml index 816f9a7..25c74e3 100644 --- a/packages/DocumentsUI/res/values-da/strings.xml +++ b/packages/DocumentsUI/res/values-da/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Gem"</string> <string name="menu_share" msgid="3075149983979628146">"Del"</string> <string name="menu_delete" msgid="8138799623850614177">"Slet"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> er valgt"</string> <string name="sort_name" msgid="9183560467917256779">"Efter navn"</string> <string name="sort_date" msgid="586080032956151448">"Efter ændringsdato"</string> diff --git a/packages/DocumentsUI/res/values-de/strings.xml b/packages/DocumentsUI/res/values-de/strings.xml index e43a1e2..93fad32 100644 --- a/packages/DocumentsUI/res/values-de/strings.xml +++ b/packages/DocumentsUI/res/values-de/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Speichern"</string> <string name="menu_share" msgid="3075149983979628146">"Teilen"</string> <string name="menu_delete" msgid="8138799623850614177">"Löschen"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ausgewählt"</string> <string name="sort_name" msgid="9183560467917256779">"Nach Name"</string> <string name="sort_date" msgid="586080032956151448">"Nach Änderungsdatum"</string> diff --git a/packages/DocumentsUI/res/values-el/strings.xml b/packages/DocumentsUI/res/values-el/strings.xml index 5a91484..db83aea 100644 --- a/packages/DocumentsUI/res/values-el/strings.xml +++ b/packages/DocumentsUI/res/values-el/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Αποθήκευση"</string> <string name="menu_share" msgid="3075149983979628146">"Κοινοποίηση"</string> <string name="menu_delete" msgid="8138799623850614177">"Διαγραφή"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Επιλέχθηκαν <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Κατά όνομα"</string> <string name="sort_date" msgid="586080032956151448">"Κατά ημερομηνία τροποποίησης"</string> diff --git a/packages/DocumentsUI/res/values-en-rGB/strings.xml b/packages/DocumentsUI/res/values-en-rGB/strings.xml index a95e7f1..a0fe3b7 100644 --- a/packages/DocumentsUI/res/values-en-rGB/strings.xml +++ b/packages/DocumentsUI/res/values-en-rGB/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Save"</string> <string name="menu_share" msgid="3075149983979628146">"Share"</string> <string name="menu_delete" msgid="8138799623850614177">"Delete"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selected"</string> <string name="sort_name" msgid="9183560467917256779">"By name"</string> <string name="sort_date" msgid="586080032956151448">"By date modified"</string> diff --git a/packages/DocumentsUI/res/values-en-rIN/strings.xml b/packages/DocumentsUI/res/values-en-rIN/strings.xml index a95e7f1..a0fe3b7 100644 --- a/packages/DocumentsUI/res/values-en-rIN/strings.xml +++ b/packages/DocumentsUI/res/values-en-rIN/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Save"</string> <string name="menu_share" msgid="3075149983979628146">"Share"</string> <string name="menu_delete" msgid="8138799623850614177">"Delete"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selected"</string> <string name="sort_name" msgid="9183560467917256779">"By name"</string> <string name="sort_date" msgid="586080032956151448">"By date modified"</string> diff --git a/packages/DocumentsUI/res/values-es-rUS/strings.xml b/packages/DocumentsUI/res/values-es-rUS/strings.xml index 4a3ff33..3319011 100644 --- a/packages/DocumentsUI/res/values-es-rUS/strings.xml +++ b/packages/DocumentsUI/res/values-es-rUS/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Guardar"</string> <string name="menu_share" msgid="3075149983979628146">"Compartir"</string> <string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> seleccionado(s)"</string> <string name="sort_name" msgid="9183560467917256779">"Por nombre"</string> <string name="sort_date" msgid="586080032956151448">"Por fecha de modificación"</string> diff --git a/packages/DocumentsUI/res/values-es/strings.xml b/packages/DocumentsUI/res/values-es/strings.xml index 1682542..7189f1d 100644 --- a/packages/DocumentsUI/res/values-es/strings.xml +++ b/packages/DocumentsUI/res/values-es/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Guardar"</string> <string name="menu_share" msgid="3075149983979628146">"Compartir"</string> <string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Seleccionado: <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Por nombre"</string> <string name="sort_date" msgid="586080032956151448">"Por fecha de modificación"</string> diff --git a/packages/DocumentsUI/res/values-et-rEE/strings.xml b/packages/DocumentsUI/res/values-et-rEE/strings.xml index 5412956..a12b695 100644 --- a/packages/DocumentsUI/res/values-et-rEE/strings.xml +++ b/packages/DocumentsUI/res/values-et-rEE/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Salvesta"</string> <string name="menu_share" msgid="3075149983979628146">"Jaga"</string> <string name="menu_delete" msgid="8138799623850614177">"Kustuta"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> on valitud"</string> <string name="sort_name" msgid="9183560467917256779">"Nime järgi"</string> <string name="sort_date" msgid="586080032956151448">"Muutmiskuupäeva järgi"</string> diff --git a/packages/DocumentsUI/res/values-fa/strings.xml b/packages/DocumentsUI/res/values-fa/strings.xml index c922b37..ba04522 100644 --- a/packages/DocumentsUI/res/values-fa/strings.xml +++ b/packages/DocumentsUI/res/values-fa/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"ذخیره"</string> <string name="menu_share" msgid="3075149983979628146">"اشتراکگذاری"</string> <string name="menu_delete" msgid="8138799623850614177">"حذف"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> انتخاب شد"</string> <string name="sort_name" msgid="9183560467917256779">"بر اساس نام"</string> <string name="sort_date" msgid="586080032956151448">"بر اساس تاریخ اصلاح"</string> diff --git a/packages/DocumentsUI/res/values-fi/strings.xml b/packages/DocumentsUI/res/values-fi/strings.xml index 5e40ecd..8ea10be 100644 --- a/packages/DocumentsUI/res/values-fi/strings.xml +++ b/packages/DocumentsUI/res/values-fi/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Tallenna"</string> <string name="menu_share" msgid="3075149983979628146">"Jaa"</string> <string name="menu_delete" msgid="8138799623850614177">"Poista"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> valittua"</string> <string name="sort_name" msgid="9183560467917256779">"Nimen mukaan"</string> <string name="sort_date" msgid="586080032956151448">"Muokkauspäivän mukaan"</string> diff --git a/packages/DocumentsUI/res/values-fr-rCA/strings.xml b/packages/DocumentsUI/res/values-fr-rCA/strings.xml index a837379..0549707 100644 --- a/packages/DocumentsUI/res/values-fr-rCA/strings.xml +++ b/packages/DocumentsUI/res/values-fr-rCA/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Enregistrer"</string> <string name="menu_share" msgid="3075149983979628146">"Partager"</string> <string name="menu_delete" msgid="8138799623850614177">"Supprimer"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> sélectionné(s)"</string> <string name="sort_name" msgid="9183560467917256779">"Par nom"</string> <string name="sort_date" msgid="586080032956151448">"Par date de modification"</string> diff --git a/packages/DocumentsUI/res/values-fr/strings.xml b/packages/DocumentsUI/res/values-fr/strings.xml index ff9aeda..292ec86 100644 --- a/packages/DocumentsUI/res/values-fr/strings.xml +++ b/packages/DocumentsUI/res/values-fr/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Enregistrer"</string> <string name="menu_share" msgid="3075149983979628146">"Partager"</string> <string name="menu_delete" msgid="8138799623850614177">"Supprimer"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> élément(s) sélectionné(s)"</string> <string name="sort_name" msgid="9183560467917256779">"Par nom"</string> <string name="sort_date" msgid="586080032956151448">"Par date de modification"</string> diff --git a/packages/DocumentsUI/res/values-hi/strings.xml b/packages/DocumentsUI/res/values-hi/strings.xml index 8d7fcba..579bd37 100644 --- a/packages/DocumentsUI/res/values-hi/strings.xml +++ b/packages/DocumentsUI/res/values-hi/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"सहेजें"</string> <string name="menu_share" msgid="3075149983979628146">"साझा करें"</string> <string name="menu_delete" msgid="8138799623850614177">"हटाएं"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> चयनित"</string> <string name="sort_name" msgid="9183560467917256779">"नाम के अनुसार"</string> <string name="sort_date" msgid="586080032956151448">"बदलाव के दिनांक के अनुसार"</string> diff --git a/packages/DocumentsUI/res/values-hr/strings.xml b/packages/DocumentsUI/res/values-hr/strings.xml index 73c2f04..6baae95 100644 --- a/packages/DocumentsUI/res/values-hr/strings.xml +++ b/packages/DocumentsUI/res/values-hr/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Spremi"</string> <string name="menu_share" msgid="3075149983979628146">"Dijeli"</string> <string name="menu_delete" msgid="8138799623850614177">"Izbriši"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Odabrano: <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Po korisniku"</string> <string name="sort_date" msgid="586080032956151448">"Po datumu izmjene"</string> diff --git a/packages/DocumentsUI/res/values-hu/strings.xml b/packages/DocumentsUI/res/values-hu/strings.xml index db7854b..b8ef2d4 100644 --- a/packages/DocumentsUI/res/values-hu/strings.xml +++ b/packages/DocumentsUI/res/values-hu/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Mentés"</string> <string name="menu_share" msgid="3075149983979628146">"Megosztás"</string> <string name="menu_delete" msgid="8138799623850614177">"Törlés"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> kiválasztva"</string> <string name="sort_name" msgid="9183560467917256779">"Név szerint"</string> <string name="sort_date" msgid="586080032956151448">"Módosítás dátuma szerint"</string> diff --git a/packages/DocumentsUI/res/values-hy-rAM/strings.xml b/packages/DocumentsUI/res/values-hy-rAM/strings.xml index c683f3e..69fdfb6 100644 --- a/packages/DocumentsUI/res/values-hy-rAM/strings.xml +++ b/packages/DocumentsUI/res/values-hy-rAM/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Պահել"</string> <string name="menu_share" msgid="3075149983979628146">"Համօգտագործել"</string> <string name="menu_delete" msgid="8138799623850614177">"Ջնջել"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ընտրված"</string> <string name="sort_name" msgid="9183560467917256779">"Ըստ անվան"</string> <string name="sort_date" msgid="586080032956151448">"Ըստ փոփոխման ամսաթվի"</string> diff --git a/packages/DocumentsUI/res/values-in/strings.xml b/packages/DocumentsUI/res/values-in/strings.xml index d9f4475..d5c69bf 100644 --- a/packages/DocumentsUI/res/values-in/strings.xml +++ b/packages/DocumentsUI/res/values-in/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Simpan"</string> <string name="menu_share" msgid="3075149983979628146">"Bagikan"</string> <string name="menu_delete" msgid="8138799623850614177">"Hapus"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> dipilih"</string> <string name="sort_name" msgid="9183560467917256779">"Menurut nama"</string> <string name="sort_date" msgid="586080032956151448">"Menurut tanggal diubah"</string> diff --git a/packages/DocumentsUI/res/values-it/strings.xml b/packages/DocumentsUI/res/values-it/strings.xml index baca387..9d1fc94 100644 --- a/packages/DocumentsUI/res/values-it/strings.xml +++ b/packages/DocumentsUI/res/values-it/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Salva"</string> <string name="menu_share" msgid="3075149983979628146">"Condividi"</string> <string name="menu_delete" msgid="8138799623850614177">"Elimina"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selezionati"</string> <string name="sort_name" msgid="9183560467917256779">"Per nome"</string> <string name="sort_date" msgid="586080032956151448">"Per data di modifica"</string> diff --git a/packages/DocumentsUI/res/values-iw/strings.xml b/packages/DocumentsUI/res/values-iw/strings.xml index 712c060..af47c6c 100644 --- a/packages/DocumentsUI/res/values-iw/strings.xml +++ b/packages/DocumentsUI/res/values-iw/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"שמור"</string> <string name="menu_share" msgid="3075149983979628146">"שתף"</string> <string name="menu_delete" msgid="8138799623850614177">"מחק"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> נבחרו"</string> <string name="sort_name" msgid="9183560467917256779">"לפי שם"</string> <string name="sort_date" msgid="586080032956151448">"לפי תאריך שינוי"</string> diff --git a/packages/DocumentsUI/res/values-ja/strings.xml b/packages/DocumentsUI/res/values-ja/strings.xml index 996496d..ca64914 100644 --- a/packages/DocumentsUI/res/values-ja/strings.xml +++ b/packages/DocumentsUI/res/values-ja/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"保存"</string> <string name="menu_share" msgid="3075149983979628146">"共有"</string> <string name="menu_delete" msgid="8138799623850614177">"削除"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g>件選択済み"</string> <string name="sort_name" msgid="9183560467917256779">"名前順"</string> <string name="sort_date" msgid="586080032956151448">"更新日順"</string> diff --git a/packages/DocumentsUI/res/values-ka-rGE/strings.xml b/packages/DocumentsUI/res/values-ka-rGE/strings.xml index f3e1274..3e3d509 100644 --- a/packages/DocumentsUI/res/values-ka-rGE/strings.xml +++ b/packages/DocumentsUI/res/values-ka-rGE/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"შენახვა"</string> <string name="menu_share" msgid="3075149983979628146">"გაზიარება"</string> <string name="menu_delete" msgid="8138799623850614177">"წაშლა"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> მონიშნული"</string> <string name="sort_name" msgid="9183560467917256779">"სახელით"</string> <string name="sort_date" msgid="586080032956151448">"ცვლილების თარიღით"</string> diff --git a/packages/DocumentsUI/res/values-km-rKH/strings.xml b/packages/DocumentsUI/res/values-km-rKH/strings.xml index 80f3698..2ecbba7 100644 --- a/packages/DocumentsUI/res/values-km-rKH/strings.xml +++ b/packages/DocumentsUI/res/values-km-rKH/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"រក្សាទុក"</string> <string name="menu_share" msgid="3075149983979628146">"ចែករំលែក"</string> <string name="menu_delete" msgid="8138799623850614177">"លុប"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"បានជ្រើស <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"តាមឈ្មោះ"</string> <string name="sort_date" msgid="586080032956151448">"តាមកាលបរិច្ឆេទបានកែប្រែ"</string> diff --git a/packages/DocumentsUI/res/values-ko/strings.xml b/packages/DocumentsUI/res/values-ko/strings.xml index 2cd0d44..0ece450 100644 --- a/packages/DocumentsUI/res/values-ko/strings.xml +++ b/packages/DocumentsUI/res/values-ko/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"저장"</string> <string name="menu_share" msgid="3075149983979628146">"공유"</string> <string name="menu_delete" msgid="8138799623850614177">"삭제"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g>개 선택됨"</string> <string name="sort_name" msgid="9183560467917256779">"이름순"</string> <string name="sort_date" msgid="586080032956151448">"수정된 날짜순"</string> diff --git a/packages/DocumentsUI/res/values-lo-rLA/strings.xml b/packages/DocumentsUI/res/values-lo-rLA/strings.xml index 9a6f32f..0bc0b8b 100644 --- a/packages/DocumentsUI/res/values-lo-rLA/strings.xml +++ b/packages/DocumentsUI/res/values-lo-rLA/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"ບັນທຶກ"</string> <string name="menu_share" msgid="3075149983979628146">"ແບ່ງປັນ"</string> <string name="menu_delete" msgid="8138799623850614177">"ລຶບ"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"ເລືອກແລ້ວ <xliff:g id="COUNT">%1$d</xliff:g> ລາຍການ"</string> <string name="sort_name" msgid="9183560467917256779">"ຕາມຊື່"</string> <string name="sort_date" msgid="586080032956151448">"ຕາມວັນທີທີ່ແກ້ໄຂ"</string> diff --git a/packages/DocumentsUI/res/values-lt/strings.xml b/packages/DocumentsUI/res/values-lt/strings.xml index f861b99..04825f9 100644 --- a/packages/DocumentsUI/res/values-lt/strings.xml +++ b/packages/DocumentsUI/res/values-lt/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Išsaugoti"</string> <string name="menu_share" msgid="3075149983979628146">"Bendrinti"</string> <string name="menu_delete" msgid="8138799623850614177">"Ištrinti"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Pasirinkta: <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Pagal pavadinimą"</string> <string name="sort_date" msgid="586080032956151448">"Pagal keitimo datą"</string> diff --git a/packages/DocumentsUI/res/values-lv/strings.xml b/packages/DocumentsUI/res/values-lv/strings.xml index 651a59f..5157327 100644 --- a/packages/DocumentsUI/res/values-lv/strings.xml +++ b/packages/DocumentsUI/res/values-lv/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Saglabāt"</string> <string name="menu_share" msgid="3075149983979628146">"Kopīgot"</string> <string name="menu_delete" msgid="8138799623850614177">"Dzēst"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Atlasīts: <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Pēc nosaukuma"</string> <string name="sort_date" msgid="586080032956151448">"Pēc pārveidošanas datuma"</string> diff --git a/packages/DocumentsUI/res/values-mn-rMN/strings.xml b/packages/DocumentsUI/res/values-mn-rMN/strings.xml index 22c9fcd..8fd8f52 100644 --- a/packages/DocumentsUI/res/values-mn-rMN/strings.xml +++ b/packages/DocumentsUI/res/values-mn-rMN/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Хадгалах"</string> <string name="menu_share" msgid="3075149983979628146">"Хуваалцах"</string> <string name="menu_delete" msgid="8138799623850614177">"Устгах"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> сонгогдсон"</string> <string name="sort_name" msgid="9183560467917256779">"Нэрээр"</string> <string name="sort_date" msgid="586080032956151448">"Өөрчлөгдсөн огноогоор"</string> diff --git a/packages/DocumentsUI/res/values-ms-rMY/strings.xml b/packages/DocumentsUI/res/values-ms-rMY/strings.xml index 7e09c57..48e30305 100644 --- a/packages/DocumentsUI/res/values-ms-rMY/strings.xml +++ b/packages/DocumentsUI/res/values-ms-rMY/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Simpan"</string> <string name="menu_share" msgid="3075149983979628146">"Kongsi"</string> <string name="menu_delete" msgid="8138799623850614177">"Padam"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> dipilih"</string> <string name="sort_name" msgid="9183560467917256779">"Mengikut nama"</string> <string name="sort_date" msgid="586080032956151448">"Diubah suai mengikut tarikh"</string> diff --git a/packages/DocumentsUI/res/values-nb/strings.xml b/packages/DocumentsUI/res/values-nb/strings.xml index 8831bd8..09a11d5 100644 --- a/packages/DocumentsUI/res/values-nb/strings.xml +++ b/packages/DocumentsUI/res/values-nb/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Lagre"</string> <string name="menu_share" msgid="3075149983979628146">"Del"</string> <string name="menu_delete" msgid="8138799623850614177">"Slett"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> valgt"</string> <string name="sort_name" msgid="9183560467917256779">"Etter navn"</string> <string name="sort_date" msgid="586080032956151448">"«Etter dato» endret"</string> diff --git a/packages/DocumentsUI/res/values-nl/strings.xml b/packages/DocumentsUI/res/values-nl/strings.xml index 08862e8..ca626a8 100644 --- a/packages/DocumentsUI/res/values-nl/strings.xml +++ b/packages/DocumentsUI/res/values-nl/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Opslaan"</string> <string name="menu_share" msgid="3075149983979628146">"Delen"</string> <string name="menu_delete" msgid="8138799623850614177">"Verwijderen"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> geselecteerd"</string> <string name="sort_name" msgid="9183560467917256779">"Op naam"</string> <string name="sort_date" msgid="586080032956151448">"Op aanpassingsdatum"</string> diff --git a/packages/DocumentsUI/res/values-pl/strings.xml b/packages/DocumentsUI/res/values-pl/strings.xml index 42cec9c..7a7978b 100644 --- a/packages/DocumentsUI/res/values-pl/strings.xml +++ b/packages/DocumentsUI/res/values-pl/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Zapisz"</string> <string name="menu_share" msgid="3075149983979628146">"Udostępnij"</string> <string name="menu_delete" msgid="8138799623850614177">"Usuń"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Wybrano: <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Według nazwy"</string> <string name="sort_date" msgid="586080032956151448">"Według daty edycji"</string> diff --git a/packages/DocumentsUI/res/values-pt-rPT/strings.xml b/packages/DocumentsUI/res/values-pt-rPT/strings.xml index f1be722..0443c35 100644 --- a/packages/DocumentsUI/res/values-pt-rPT/strings.xml +++ b/packages/DocumentsUI/res/values-pt-rPT/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Guardar"</string> <string name="menu_share" msgid="3075149983979628146">"Partilhar"</string> <string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selecionado(s)"</string> <string name="sort_name" msgid="9183560467917256779">"Por nome"</string> <string name="sort_date" msgid="586080032956151448">"Por data de modificação"</string> diff --git a/packages/DocumentsUI/res/values-pt/strings.xml b/packages/DocumentsUI/res/values-pt/strings.xml index 78fcaf8..f9038d1 100644 --- a/packages/DocumentsUI/res/values-pt/strings.xml +++ b/packages/DocumentsUI/res/values-pt/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Salvar"</string> <string name="menu_share" msgid="3075149983979628146">"Compartilhar"</string> <string name="menu_delete" msgid="8138799623850614177">"Excluir"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selecionados"</string> <string name="sort_name" msgid="9183560467917256779">"Por nome"</string> <string name="sort_date" msgid="586080032956151448">"Por data de modificação"</string> diff --git a/packages/DocumentsUI/res/values-ro/strings.xml b/packages/DocumentsUI/res/values-ro/strings.xml index 5fd44c8..26cd77f 100644 --- a/packages/DocumentsUI/res/values-ro/strings.xml +++ b/packages/DocumentsUI/res/values-ro/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Salvați"</string> <string name="menu_share" msgid="3075149983979628146">"Distribuiți"</string> <string name="menu_delete" msgid="8138799623850614177">"Ștergeți"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selectate"</string> <string name="sort_name" msgid="9183560467917256779">"După nume"</string> <string name="sort_date" msgid="586080032956151448">"După data modificării"</string> diff --git a/packages/DocumentsUI/res/values-ru/strings.xml b/packages/DocumentsUI/res/values-ru/strings.xml index 85fd70e..f8e1f1b 100644 --- a/packages/DocumentsUI/res/values-ru/strings.xml +++ b/packages/DocumentsUI/res/values-ru/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Сохранить"</string> <string name="menu_share" msgid="3075149983979628146">"Поделиться"</string> <string name="menu_delete" msgid="8138799623850614177">"Удалить"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Выбрано: <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"По названию"</string> <string name="sort_date" msgid="586080032956151448">"По дате изменения"</string> diff --git a/packages/DocumentsUI/res/values-sk/strings.xml b/packages/DocumentsUI/res/values-sk/strings.xml index 4b5ebcd..cb4b718 100644 --- a/packages/DocumentsUI/res/values-sk/strings.xml +++ b/packages/DocumentsUI/res/values-sk/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Uložiť"</string> <string name="menu_share" msgid="3075149983979628146">"Zdieľať"</string> <string name="menu_delete" msgid="8138799623850614177">"Odstrániť"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Vybraté: <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Podľa názvu"</string> <string name="sort_date" msgid="586080032956151448">"Podľa dátumu zmeny"</string> diff --git a/packages/DocumentsUI/res/values-sl/strings.xml b/packages/DocumentsUI/res/values-sl/strings.xml index f984a0a..a6dc20b 100644 --- a/packages/DocumentsUI/res/values-sl/strings.xml +++ b/packages/DocumentsUI/res/values-sl/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Shrani"</string> <string name="menu_share" msgid="3075149983979628146">"Skupna raba"</string> <string name="menu_delete" msgid="8138799623850614177">"Izbriši"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Št. izbranih: <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Po imenu"</string> <string name="sort_date" msgid="586080032956151448">"Po datumu spremembe"</string> diff --git a/packages/DocumentsUI/res/values-sr/strings.xml b/packages/DocumentsUI/res/values-sr/strings.xml index eb0b197..06e0d08 100644 --- a/packages/DocumentsUI/res/values-sr/strings.xml +++ b/packages/DocumentsUI/res/values-sr/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Сачувај"</string> <string name="menu_share" msgid="3075149983979628146">"Дели"</string> <string name="menu_delete" msgid="8138799623850614177">"Избриши"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Изабрано је <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Према имену"</string> <string name="sort_date" msgid="586080032956151448">"Према датуму измене"</string> diff --git a/packages/DocumentsUI/res/values-sv/strings.xml b/packages/DocumentsUI/res/values-sv/strings.xml index 7aa5c50..da8432e 100644 --- a/packages/DocumentsUI/res/values-sv/strings.xml +++ b/packages/DocumentsUI/res/values-sv/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Spara"</string> <string name="menu_share" msgid="3075149983979628146">"Dela"</string> <string name="menu_delete" msgid="8138799623850614177">"Ta bort"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Har valt <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Efter namn"</string> <string name="sort_date" msgid="586080032956151448">"Efter ändringsdatum"</string> diff --git a/packages/DocumentsUI/res/values-sw/strings.xml b/packages/DocumentsUI/res/values-sw/strings.xml index 299fda7..c769a59 100644 --- a/packages/DocumentsUI/res/values-sw/strings.xml +++ b/packages/DocumentsUI/res/values-sw/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Hifadhi"</string> <string name="menu_share" msgid="3075149983979628146">"Shiriki"</string> <string name="menu_delete" msgid="8138799623850614177">"Futa"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> zimechaguliwa"</string> <string name="sort_name" msgid="9183560467917256779">"Kwa jina"</string> <string name="sort_date" msgid="586080032956151448">"Kwa tarehe viliporekebishwa"</string> diff --git a/packages/DocumentsUI/res/values-th/strings.xml b/packages/DocumentsUI/res/values-th/strings.xml index 6ac8810..bf92893 100644 --- a/packages/DocumentsUI/res/values-th/strings.xml +++ b/packages/DocumentsUI/res/values-th/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"บันทึก"</string> <string name="menu_share" msgid="3075149983979628146">"แชร์"</string> <string name="menu_delete" msgid="8138799623850614177">"ลบ"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"เลือกไว้ <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"ตามชื่อ"</string> <string name="sort_date" msgid="586080032956151448">"ตามวันที่ที่ปรับเปลี่ยน"</string> diff --git a/packages/DocumentsUI/res/values-tl/strings.xml b/packages/DocumentsUI/res/values-tl/strings.xml index e0fd8c8..bc363e7 100644 --- a/packages/DocumentsUI/res/values-tl/strings.xml +++ b/packages/DocumentsUI/res/values-tl/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"I-save"</string> <string name="menu_share" msgid="3075149983979628146">"Ibahagi"</string> <string name="menu_delete" msgid="8138799623850614177">"Tanggalin"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ang pinili"</string> <string name="sort_name" msgid="9183560467917256779">"Ayon sa pangalan"</string> <string name="sort_date" msgid="586080032956151448">"Ayon sa petsa ng pagbago"</string> diff --git a/packages/DocumentsUI/res/values-tr/strings.xml b/packages/DocumentsUI/res/values-tr/strings.xml index 699a5cd..5d7a2be 100644 --- a/packages/DocumentsUI/res/values-tr/strings.xml +++ b/packages/DocumentsUI/res/values-tr/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Kaydet"</string> <string name="menu_share" msgid="3075149983979628146">"Paylaş"</string> <string name="menu_delete" msgid="8138799623850614177">"Sil"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> tane seçildi"</string> <string name="sort_name" msgid="9183560467917256779">"Ada göre"</string> <string name="sort_date" msgid="586080032956151448">"Değişiklik tarihine göre"</string> diff --git a/packages/DocumentsUI/res/values-uk/strings.xml b/packages/DocumentsUI/res/values-uk/strings.xml index f87b6a2..dbd44b7 100644 --- a/packages/DocumentsUI/res/values-uk/strings.xml +++ b/packages/DocumentsUI/res/values-uk/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Зберегти"</string> <string name="menu_share" msgid="3075149983979628146">"Поділитися"</string> <string name="menu_delete" msgid="8138799623850614177">"Видалити"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Вибрано <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"За назвою"</string> <string name="sort_date" msgid="586080032956151448">"За датою змінення"</string> diff --git a/packages/DocumentsUI/res/values-vi/strings.xml b/packages/DocumentsUI/res/values-vi/strings.xml index 41e29fa..919708f 100644 --- a/packages/DocumentsUI/res/values-vi/strings.xml +++ b/packages/DocumentsUI/res/values-vi/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Lưu"</string> <string name="menu_share" msgid="3075149983979628146">"Chia sẻ"</string> <string name="menu_delete" msgid="8138799623850614177">"Xóa"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"Đã chọn <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="sort_name" msgid="9183560467917256779">"Theo tên"</string> <string name="sort_date" msgid="586080032956151448">"Theo ngày sửa đổi"</string> diff --git a/packages/DocumentsUI/res/values-zh-rCN/strings.xml b/packages/DocumentsUI/res/values-zh-rCN/strings.xml index 742cda7..a916b87 100644 --- a/packages/DocumentsUI/res/values-zh-rCN/strings.xml +++ b/packages/DocumentsUI/res/values-zh-rCN/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"保存"</string> <string name="menu_share" msgid="3075149983979628146">"分享"</string> <string name="menu_delete" msgid="8138799623850614177">"删除"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"已选择<xliff:g id="COUNT">%1$d</xliff:g>项"</string> <string name="sort_name" msgid="9183560467917256779">"按名称"</string> <string name="sort_date" msgid="586080032956151448">"按修改日期"</string> diff --git a/packages/DocumentsUI/res/values-zh-rHK/strings.xml b/packages/DocumentsUI/res/values-zh-rHK/strings.xml index 67ed587..7cae910 100644 --- a/packages/DocumentsUI/res/values-zh-rHK/strings.xml +++ b/packages/DocumentsUI/res/values-zh-rHK/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"儲存"</string> <string name="menu_share" msgid="3075149983979628146">"分享"</string> <string name="menu_delete" msgid="8138799623850614177">"刪除"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"已選取 <xliff:g id="COUNT">%1$d</xliff:g> 個"</string> <string name="sort_name" msgid="9183560467917256779">"按名稱"</string> <string name="sort_date" msgid="586080032956151448">"按修改日期"</string> diff --git a/packages/DocumentsUI/res/values-zh-rTW/strings.xml b/packages/DocumentsUI/res/values-zh-rTW/strings.xml index 75ecbcf..387fdba 100644 --- a/packages/DocumentsUI/res/values-zh-rTW/strings.xml +++ b/packages/DocumentsUI/res/values-zh-rTW/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"儲存"</string> <string name="menu_share" msgid="3075149983979628146">"共用"</string> <string name="menu_delete" msgid="8138799623850614177">"刪除"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"已選取 <xliff:g id="COUNT">%1$d</xliff:g> 個項目"</string> <string name="sort_name" msgid="9183560467917256779">"依名稱"</string> <string name="sort_date" msgid="586080032956151448">"依修改日期"</string> diff --git a/packages/DocumentsUI/res/values-zu/strings.xml b/packages/DocumentsUI/res/values-zu/strings.xml index bedd2cd..564b2d7 100644 --- a/packages/DocumentsUI/res/values-zu/strings.xml +++ b/packages/DocumentsUI/res/values-zu/strings.xml @@ -29,6 +29,8 @@ <string name="menu_save" msgid="2394743337684426338">"Londoloza"</string> <string name="menu_share" msgid="3075149983979628146">"Yabelana"</string> <string name="menu_delete" msgid="8138799623850614177">"Susa"</string> + <!-- no translation found for menu_select (8711270657353563424) --> + <skip /> <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> okukhethiwe"</string> <string name="sort_name" msgid="9183560467917256779">"Ngegama"</string> <string name="sort_date" msgid="586080032956151448">"Ngedethi yokuguqula"</string> diff --git a/packages/Keyguard/res/values-sr/strings.xml b/packages/Keyguard/res/values-sr/strings.xml index d12f9bf..bd08eae 100644 --- a/packages/Keyguard/res/values-sr/strings.xml +++ b/packages/Keyguard/res/values-sr/strings.xml @@ -119,7 +119,7 @@ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN кодови се не подударају"</string> <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Превише покушаја уноса шаблона"</string> <string name="kg_login_instructions" msgid="1100551261265506448">"Да бисте откључали, пријавите се помоћу Google налога."</string> - <string name="kg_login_username_hint" msgid="5718534272070920364">"Корисничко име (адреса е-поште)"</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Корисничко име (имејл адреса)"</string> <string name="kg_login_password_hint" msgid="9057289103827298549">"Лозинка"</string> <string name="kg_login_submit_button" msgid="5355904582674054702">"Пријави ме"</string> <string name="kg_login_invalid_input" msgid="5754664119319872197">"Неважеће корисничко име или лозинка."</string> diff --git a/packages/SystemUI/res/layout/recents_task_view.xml b/packages/SystemUI/res/layout/recents_task_view.xml index 4442bca..ddc0dbf 100644 --- a/packages/SystemUI/res/layout/recents_task_view.xml +++ b/packages/SystemUI/res/layout/recents_task_view.xml @@ -22,26 +22,26 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> <com.android.systemui.recents.views.TaskInfoView - android:id="@+id/task_view_info_pane" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:visibility="invisible" - android:background="#e6444444"> + android:id="@+id/task_view_info_pane" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="invisible" + android:background="@color/recents_task_bar_default_background_color"> <Button - android:id="@+id/task_view_app_info_button" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginStart="20dp" - android:layout_marginEnd="20dp" - android:layout_gravity="top|center_horizontal" - android:text="@string/recents_app_info_button_label" /> + android:id="@+id/task_view_app_info_button" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="20dp" + android:layout_marginEnd="20dp" + android:layout_gravity="top|center_horizontal" + android:text="@string/recents_app_info_button_label" /> </com.android.systemui.recents.views.TaskInfoView> <com.android.systemui.recents.views.TaskBarView android:id="@+id/task_view_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top|center_horizontal" - android:background="#e6444444"> + android:background="@color/recents_task_bar_default_background_color"> <ImageView android:id="@+id/application_icon" android:layout_width="@dimen/recents_task_view_application_icon_size" @@ -54,8 +54,8 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical|left" android:layout_marginStart="@dimen/recents_task_view_application_icon_size" - android:layout_marginEnd="@dimen/recents_task_view_activity_icon_size" - android:textSize="24sp" + android:layout_marginEnd="8dp" + android:textSize="22sp" android:textColor="#ffffffff" android:text="@string/recents_empty_message" android:fontFamily="sans-serif-thin" diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 098ecdd..285978b 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Kleurregstellingmodus"</string> <string name="recents_empty_message" msgid="2269156590813544104">"ONLANGS"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Programinligting"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"soek"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Netwerk word\ndalk gemonitor"</string> <string name="description_target_search" msgid="3091587249776033139">"Soek"</string> <string name="description_direction_up" msgid="7169032478259485180">"Gly op vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d kennisgewings versteek"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Raak om te wys"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Moenie steur nie"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d meer"</item> </plurals> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index 75fbaf0..430c209 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"የቀለም እርማት ሁነታ"</string> <string name="recents_empty_message" msgid="2269156590813544104">"የቅርብ ጊዜዎች"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"የመተግበሪያ መረጃ"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"ፈልግ"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"አውታረ መረብ\nክትትል ሊደረግበት ይችላል"</string> <string name="description_target_search" msgid="3091587249776033139">"ፍለጋ"</string> <string name="description_direction_up" msgid="7169032478259485180">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ላይ አንሸራትት።"</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"%d ማሳወቂያዎች ተደብቀዋል"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"ለማሳየት ነካ ያድርጉ"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d ተጨማሪ"</item> </plurals> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index fd7f791..3186791 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"وضع تصحيح الألوان"</string> <string name="recents_empty_message" msgid="2269156590813544104">"الأخيرة"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"معلومات التطبيق"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"بحث"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"قد تكون الشبكة\nخاضعة للرقابة"</string> <string name="description_target_search" msgid="3091587249776033139">"بحث"</string> <string name="description_direction_up" msgid="7169032478259485180">"تمرير لأعلى لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"تم إخفاء %d من الإشعارات"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"المس للعرض"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"الرجاء عدم الإزعاج"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d أخرى"</item> </plurals> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 426471c..b79429c 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Режим на коригиране на цветовете"</string> <string name="recents_empty_message" msgid="2269156590813544104">"СКОРОШНИ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Информация за приложението"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"търсене"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Мрежата може\nда се наблюдава"</string> <string name="description_target_search" msgid="3091587249776033139">"Търсене"</string> <string name="description_direction_up" msgid="7169032478259485180">"Плъзнете нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"%d известия са скрити"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Докоснете за показване"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Още %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 7365377..1841622 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mode de correcció de color"</string> <string name="recents_empty_message" msgid="2269156590813544104">"RECENTS"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informació de l\'aplicació"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"És possible que la xarxa\nestigui controlada"</string> <string name="description_target_search" msgid="3091587249776033139">"Cerca"</string> <string name="description_direction_up" msgid="7169032478259485180">"Fes lliscar el dit cap amunt per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -217,6 +218,7 @@ <item quantity="other" msgid="7388721375827338153">"%d notificacions ocultes"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toca per mostrar-ho."</string> + <string name="zen_mode_title" msgid="8793432092004749188">"No molesteu"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d més"</item> </plurals> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 8455e43..1c2e122 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Režim korekce barev"</string> <string name="recents_empty_message" msgid="2269156590813544104">"POSLEDNÍ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informace o aplikaci"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"vyhledat"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Síť může být\nmonitorována"</string> <string name="description_target_search" msgid="3091587249776033139">"Vyhledávání"</string> <string name="description_direction_up" msgid="7169032478259485180">"Přejeďte prstem nahoru: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string> @@ -217,6 +218,8 @@ <item quantity="other" msgid="7388721375827338153">"Skrytá oznámení: %d"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Oznámení zobrazíte kliknutím"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Další: %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 56bf53b..62ab0c3 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Farvekorrigeringstilstand"</string> <string name="recents_empty_message" msgid="2269156590813544104">"SENESTE"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Oplysninger om applikationen"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"søg"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Netværket kan\nvære overvåget"</string> <string name="description_target_search" msgid="3091587249776033139">"Søgning"</string> <string name="description_direction_up" msgid="7169032478259485180">"Glid op for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d underretninger er skjult"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Tryk for at vise"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Vil ikke forstyrres"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d mere"</item> </plurals> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 04b1767..a73e6d7 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -165,7 +165,7 @@ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Daten erneut aktivieren"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Keine Internetverbindung"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"WLAN verbunden"</string> - <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS wird gesucht"</string> + <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS wird gesucht..."</string> <string name="gps_notification_found_text" msgid="4619274244146446464">"Standort durch GPS festgelegt"</string> <string name="accessibility_location_active" msgid="2427290146138169014">"Standortanfragen aktiv"</string> <string name="accessibility_clear_all" msgid="5235938559247164925">"Alle Benachrichtigungen löschen"</string> @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Farbkorrekturmodus"</string> <string name="recents_empty_message" msgid="2269156590813544104">"Letzte"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"App-Info"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"Suche"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Netzwerk wird\neventuell überwacht."</string> <string name="description_target_search" msgid="3091587249776033139">"Suche"</string> <string name="description_direction_up" msgid="7169032478259485180">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach oben schieben"</string> @@ -217,6 +218,7 @@ <item quantity="other" msgid="7388721375827338153">"%d Benachrichtigungen ausgeblendet"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Zum Ansehen tippen"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Nicht stören"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d mehr"</item> </plurals> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index b3404be..caf64f5 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Λειτουργία διόρθωσης χρώματος"</string> <string name="recents_empty_message" msgid="2269156590813544104">"ΠΡΟΣΦΑΤΑ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Πληροφορίες εφαρμογής"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"αναζήτηση"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Το δίκτυο μπορεί\nνα παρακολουθείται"</string> <string name="description_target_search" msgid="3091587249776033139">"Αναζήτηση"</string> <string name="description_direction_up" msgid="7169032478259485180">"Κύλιση προς τα επάνω για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -217,6 +218,7 @@ <item quantity="other" msgid="7388721375827338153">"Έγινε απόκρυψη %d ειδοποιήσεων"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Αγγίξτε για εμφάνιση"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Μην ενοχλείτε"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d ακόμη"</item> </plurals> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index ff2e525..7eff6ee 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Colour correction mode"</string> <string name="recents_empty_message" msgid="2269156590813544104">"RECENTS"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Network may\nbe monitored"</string> <string name="description_target_search" msgid="3091587249776033139">"Search"</string> <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"%d notifications hidden"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Touch to show"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d more"</item> </plurals> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index ff2e525..7eff6ee 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Colour correction mode"</string> <string name="recents_empty_message" msgid="2269156590813544104">"RECENTS"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Network may\nbe monitored"</string> <string name="description_target_search" msgid="3091587249776033139">"Search"</string> <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"%d notifications hidden"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Touch to show"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d more"</item> </plurals> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index bdd5885..d2a1125 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modo de corrección de color"</string> <string name="recents_empty_message" msgid="2269156590813544104">"RECIENTES"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Es posible que la red\nesté supervisada."</string> <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string> <string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -217,6 +218,7 @@ <item quantity="other" msgid="7388721375827338153">"%d notificaciones ocultas"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toca para mostrar"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"No molestar"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d más"</item> </plurals> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index c8e26d2..822db03 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modo de corrección de color"</string> <string name="recents_empty_message" msgid="2269156590813544104">"RECIENTES"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"La red se\npuede supervisar"</string> <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string> <string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d notificaciones ocultas"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toca para mostrar"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"No molestar"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d más"</item> </plurals> diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml index 2a8314d..027de0c 100644 --- a/packages/SystemUI/res/values-et-rEE/strings.xml +++ b/packages/SystemUI/res/values-et-rEE/strings.xml @@ -205,7 +205,8 @@ <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Täiustatud kontrasti režiim"</string> <string name="quick_settings_color_space_label" msgid="853443689745584770">"Värviparandusrežiim"</string> <string name="recents_empty_message" msgid="2269156590813544104">"HILJUTISED"</string> - <string name="recents_app_info_button_label" msgid="2890317189376000030">"Rakenduse teave"</string> + <string name="recents_app_info_button_label" msgid="2890317189376000030">"Rakenduste teave"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"otsing"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Võrku võidakse\njälgida"</string> <string name="description_target_search" msgid="3091587249776033139">"Otsing"</string> <string name="description_direction_up" msgid="7169032478259485180">"Lohistage üles: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -213,6 +214,8 @@ <!-- String.format failed for translation --> <!-- no translation found for zen_mode_notification_title:other (7388721375827338153) --> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Puudutage kuvamiseks"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Veel %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 9461948..53353ae 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"حالت تصحیح رنگ"</string> <string name="recents_empty_message" msgid="2269156590813544104">"موارد اخیر"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"اطلاعات برنامه"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"جستجو"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"ممکن است شبکه\nتحت نظارت باشد"</string> <string name="description_target_search" msgid="3091587249776033139">"جستجو"</string> <string name="description_direction_up" msgid="7169032478259485180">"لغزاندن به بالا برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"%d اعلان پنهان شده"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"برای نمایش لمس کنید"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d بیشتر"</item> </plurals> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index bb81ffa..dad857c 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -206,6 +206,8 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Värinkorjaustila"</string> <string name="recents_empty_message" msgid="2269156590813544104">"VIIMEISIMMÄT"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Sovellustiedot"</string> + <!-- no translation found for recents_search_bar_label (8074997400187836677) --> + <skip /> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Verkkoa saatetaan\nvalvoa"</string> <string name="description_target_search" msgid="3091587249776033139">"Haku"</string> <string name="description_direction_up" msgid="7169032478259485180">"Liu\'uta ylös ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +217,8 @@ <item quantity="other" msgid="7388721375827338153">"%d ilmoitusta piilotettu"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Näytä koskettamalla"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d muuta"</item> </plurals> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 5232d22..f0eb784 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mode de correction des couleurs"</string> <string name="recents_empty_message" msgid="2269156590813544104">"RÉCENTS"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Détails de l\'application"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Le réseau peut\nêtre surveillé."</string> <string name="description_target_search" msgid="3091587249776033139">"Recherche"</string> <string name="description_direction_up" msgid="7169032478259485180">"Faire glisser le doigt vers le haut : <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string> @@ -217,6 +218,7 @@ <item quantity="other" msgid="7388721375827338153">"%d notifications masquées"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Touchez pour afficher la notification"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Ne pas déranger"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d autres"</item> </plurals> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 1cc8072..84dae3f 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mode de correction des couleurs"</string> <string name="recents_empty_message" msgid="2269156590813544104">"RÉCENTS"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informations sur l\'application"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Le réseau peut\nêtre surveillé."</string> <string name="description_target_search" msgid="3091587249776033139">"Rechercher"</string> <string name="description_direction_up" msgid="7169032478259485180">"Faites glisser vers le haut pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -217,6 +218,8 @@ <item quantity="other" msgid="7388721375827338153">"%d notifications masquées"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Appuyer pour afficher"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"+ %d autres"</item> </plurals> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index fd7783d..2cdff20 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"रंग सुधार मोड"</string> <string name="recents_empty_message" msgid="2269156590813544104">"हाल ही का"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"एप्लिकेशन जानकारी"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"खोज"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"नेटवर्क को\nमॉनीटर किया जा सकता है"</string> <string name="description_target_search" msgid="3091587249776033139">"खोजें"</string> <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए ऊपर स्लाइड करें."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d सूचनाएं छिपी हुई हैं"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"दिखाने के लिए स्पर्श करें"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"परेशान न करें"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d और"</item> </plurals> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index b7c69d5..8b69a4d 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Način korekcije boje"</string> <string name="recents_empty_message" msgid="2269156590813544104">"NEDAVNO"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacije o aplikaciji"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"pretraži"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Mreža se\nmožda prati"</string> <string name="description_target_search" msgid="3091587249776033139">"Pretraživanje"</string> <string name="description_direction_up" msgid="7169032478259485180">"Kliznite prema gore za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"Broj skrivenih obavijesti: %d"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Dodirnite za prikaz"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Još %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index f374743..e9c7c7b 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Színjavítás mód"</string> <string name="recents_empty_message" msgid="2269156590813544104">"LEGUTÓBBIAK"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Az alkalmazás adatai"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"keresés"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Lehet, hogy a\nhálózat felügyelt"</string> <string name="description_target_search" msgid="3091587249776033139">"Keresés"</string> <string name="description_direction_up" msgid="7169032478259485180">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa felfelé."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d értesítés elrejtve"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"A megtekintéshez érintse meg"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Ne zavarjanak"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d további"</item> </plurals> diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml index f2bbb7c..e2d69a0 100644 --- a/packages/SystemUI/res/values-hy-rAM/strings.xml +++ b/packages/SystemUI/res/values-hy-rAM/strings.xml @@ -206,6 +206,8 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Գույների կարգավորման ռեժիմ"</string> <string name="recents_empty_message" msgid="2269156590813544104">"ՎԵՐՋԻՆՆԵՐԸ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Հավելվածի մասին"</string> + <!-- no translation found for recents_search_bar_label (8074997400187836677) --> + <skip /> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Ցանցը կարող է\nվերահսկվել"</string> <string name="description_target_search" msgid="3091587249776033139">"Որոնել"</string> <string name="description_direction_up" msgid="7169032478259485180">"Սահեցրեք վերև <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string> @@ -215,6 +217,8 @@ <item quantity="other" msgid="7388721375827338153">"%d ծանուցում թաքցված է"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Հպեք՝ ցուցադրելու համար"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Եվս %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index ccd6c68..c3ec03b 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mode koreksi warna"</string> <string name="recents_empty_message" msgid="2269156590813544104">"TERBARU"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Info Aplikasi"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"telusuri"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Jaringan bisa\ndiawasi"</string> <string name="description_target_search" msgid="3091587249776033139">"Telusuri"</string> <string name="description_direction_up" msgid="7169032478259485180">"Geser ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d pemberitahuan disembunyikan"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Sentuh untuk menampilkan"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Jangan ganggu"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d lainnya"</item> </plurals> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 1c0f712..60f9fc8 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modalità di correzione del colore"</string> <string name="recents_empty_message" msgid="2269156590813544104">"MESSAGGI RECENTI"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informazioni sull\'applicazione"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"La rete potrebbe\nessere monitorata"</string> <string name="description_target_search" msgid="3091587249776033139">"Ricerca"</string> <string name="description_direction_up" msgid="7169032478259485180">"Su per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -217,6 +218,7 @@ <item quantity="other" msgid="7388721375827338153">"%d notifiche nascoste"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Tocca per visualizzare"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Non disturbare"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Altre %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index 67ed8c5..f9dc2e7 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"מצב תיקון צבע"</string> <string name="recents_empty_message" msgid="2269156590813544104">"אחרונים"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"מידע על האפליקציה"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"חפש"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"ייתכן שהרשת\nמנוטרת"</string> <string name="description_target_search" msgid="3091587249776033139">"חיפוש"</string> <string name="description_direction_up" msgid="7169032478259485180">"הסט למעלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d הודעות הוסתרו"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"גע כדי להציג"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"נא לא להפריע"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"עוד %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 14309ab..73fb622 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"色補正モード"</string> <string name="recents_empty_message" msgid="2269156590813544104">"最近"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"アプリ情報"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"検索"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"ネットワークが監視される\n場合があります"</string> <string name="description_target_search" msgid="3091587249776033139">"検索します"</string> <string name="description_direction_up" msgid="7169032478259485180">"上にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string> @@ -217,6 +218,8 @@ <item quantity="other" msgid="7388721375827338153">"%d件の通知が非表示"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"表示するにはタップします"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"他%d件"</item> </plurals> diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml index 904ae01..0cd7812 100644 --- a/packages/SystemUI/res/values-ka-rGE/strings.xml +++ b/packages/SystemUI/res/values-ka-rGE/strings.xml @@ -205,7 +205,8 @@ <string name="quick_settings_contrast_label" msgid="3319507551689108692">"გაუმჯობესებული კონტრასტის რეჟიმი"</string> <string name="quick_settings_color_space_label" msgid="853443689745584770">"ფერთა კორექციის რეჟიმი"</string> <string name="recents_empty_message" msgid="2269156590813544104">"ბოლო დროის"</string> - <!-- no translation found for recents_app_info_button_label (2890317189376000030) --> + <string name="recents_app_info_button_label" msgid="2890317189376000030">"აპლიკაციის შესახებ"</string> + <!-- no translation found for recents_search_bar_label (8074997400187836677) --> <skip /> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"შესაძლოა ქსელზე\nმონიტორინგი ხორციელდებოდეს"</string> <string name="description_target_search" msgid="3091587249776033139">"ძიება"</string> @@ -216,6 +217,8 @@ <item quantity="other" msgid="7388721375827338153">"%d შეტყობინება დამალულია"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"შეეხეთ საჩვენებლად"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d სხვა"</item> </plurals> diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml index 5ce1be3..30eae2e 100644 --- a/packages/SystemUI/res/values-km-rKH/strings.xml +++ b/packages/SystemUI/res/values-km-rKH/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"របៀបកែពណ៌"</string> <string name="recents_empty_message" msgid="2269156590813544104">"ថ្មីៗ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"ព័ត៌មានកម្មវិធី"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"ស្វែងរក"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"បណ្ដាញអាច\nត្រូវបានត្រួតពិនិត្យ"</string> <string name="description_target_search" msgid="3091587249776033139">"ស្វែងរក"</string> <string name="description_direction_up" msgid="7169032478259485180">"រុញឡើងលើដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"បានលាក់ការជូនដំណឹង %d"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"ប៉ះដើម្បីបង្ហាញ"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"កុំរំខាន"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d ទៀត"</item> </plurals> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 99e1ac0..e1ab831 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"색상 보정 모드"</string> <string name="recents_empty_message" msgid="2269156590813544104">"최근"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"애플리케이션 정보"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"검색"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"네트워크가\n모니터링될 수 있음"</string> <string name="description_target_search" msgid="3091587249776033139">"검색"</string> <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 위로 슬라이드"</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"알림 %d개 숨김"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"표시하려면 터치"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d개 더보기"</item> </plurals> diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml index a09a310..3ade551 100644 --- a/packages/SystemUI/res/values-lo-rLA/strings.xml +++ b/packages/SystemUI/res/values-lo-rLA/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"ໂໝດການແກ້ໄຂສີ"</string> <string name="recents_empty_message" msgid="2269156590813544104">"ບໍ່ດົນມານີ້"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"ຂໍ້ມູນແອັບພລິເຄຊັນ"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"ຊອກຫາ"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"ເຄືອຄ່າຍອາດ\nຖືກຕິດຕາມ"</string> <string name="description_target_search" msgid="3091587249776033139">"ຊອກຫາ"</string> <string name="description_direction_up" msgid="7169032478259485180">"ເລື່ອນຂຶ້ນເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"ເຊື່ອງ %d ການແຈ້ງເຕືອນແລ້ວ"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"ແຕະເພື່ອສະແດງ"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d ເພີ່ມເຕີມ"</item> </plurals> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 6fa96aa..3dc6a7a 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Spalvų taisymo režimas"</string> <string name="recents_empty_message" msgid="2269156590813544104">"PASTARIEJI"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Programos informacija"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"paieška"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Tinklas gali\nbūti stebimas"</string> <string name="description_target_search" msgid="3091587249776033139">"Paieška"</string> <string name="description_direction_up" msgid="7169032478259485180">"Slyskite aukštyn link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"Paslėpta pranešimų: %d"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Palieskite, kad būtų rodoma"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Netrukdyti"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Dar %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 19602a6..9405545 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Krāsu korekcijas režīms"</string> <string name="recents_empty_message" msgid="2269156590813544104">"JAUNĀKIE"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informācija par lietojumprogrammu"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"Meklēt"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Tīkls var\ntikt uzraudzīts"</string> <string name="description_target_search" msgid="3091587249776033139">"Meklēt"</string> <string name="description_direction_up" msgid="7169032478259485180">"Velciet uz augšu, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d paziņojumi paslēpti"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Pieskarieties, lai rādītu"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Netraucēt"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"vēl %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml index 1ff647f..99ecacf 100644 --- a/packages/SystemUI/res/values-mn-rMN/strings.xml +++ b/packages/SystemUI/res/values-mn-rMN/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Өнгө залруулах горим"</string> <string name="recents_empty_message" msgid="2269156590813544104">"СҮҮЛИЙН"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Аппликешны мэдээлэл"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"хайх"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Сүлжээ хянагдаж\nбайж болзошгүй"</string> <string name="description_target_search" msgid="3091587249776033139">"Хайх"</string> <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-г гулсуулах."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d мэдэгдлийг нуусан"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Харуулах бол хүрнэ үү"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Бүү саад бол"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"өөр %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml index 77c1c9d..886d644 100644 --- a/packages/SystemUI/res/values-ms-rMY/strings.xml +++ b/packages/SystemUI/res/values-ms-rMY/strings.xml @@ -205,8 +205,8 @@ <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Mod kontras dipertingkat"</string> <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mod pembetulan warna"</string> <string name="recents_empty_message" msgid="2269156590813544104">"TERBAHARU"</string> - <!-- no translation found for recents_app_info_button_label (2890317189376000030) --> - <skip /> + <string name="recents_app_info_button_label" msgid="2890317189376000030">"Maklumat Aplikasi"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"cari"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Rangkaian mungkin\nboleh dipantau"</string> <string name="description_target_search" msgid="3091587249776033139">"Carian"</string> <string name="description_direction_up" msgid="7169032478259485180">"Luncurkan ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -216,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"%d pemberitahuan disembunyikan"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Sentuh untuk menunjukkan"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d lagi"</item> </plurals> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index dd8c531..1892632 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modus for fargekorrigering"</string> <string name="recents_empty_message" msgid="2269156590813544104">"NYLIGE"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformasjon"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"Søk"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Nettverket kan\nvære overvåket"</string> <string name="description_target_search" msgid="3091587249776033139">"Søk"</string> <string name="description_direction_up" msgid="7169032478259485180">"Dra opp for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"%d varsler er skjult"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Trykk for å vise"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d til"</item> </plurals> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index a4d8d22..bf4d765 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modus voor kleurcorrectie"</string> <string name="recents_empty_message" msgid="2269156590813544104">"RECENTE"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"App-informatie"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"zoeken"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Netwerk kan\nworden gecontroleerd"</string> <string name="description_target_search" msgid="3091587249776033139">"Zoeken"</string> <string name="description_direction_up" msgid="7169032478259485180">"Veeg omhoog voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d meldingen verborgen"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Raak aan om weer te geven"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Niet storen"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Nog %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 2a5b0f8..57605b2 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Tryb korekcji kolorów"</string> <string name="recents_empty_message" msgid="2269156590813544104">"OSTATNIE"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacje o aplikacji"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"szukaj"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Sieć może być\nmonitorowana"</string> <string name="description_target_search" msgid="3091587249776033139">"Szukaj"</string> <string name="description_direction_up" msgid="7169032478259485180">"Przesuń w górę: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"Ukryte powiadomienia: %d"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Dotknij, by zobaczyć"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Nie przeszkadzać"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d więcej"</item> </plurals> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 39cfe4d..fc71887 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modo de correção de cor"</string> <string name="recents_empty_message" msgid="2269156590813544104">"RECENTES"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações da aplicação"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"pesquisar"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"A rede pode ser\nmonitorizada"</string> <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string> <string name="description_direction_up" msgid="7169032478259485180">"Deslize para cima para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d notificações ocultas"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toque para mostrar"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Não incomodar"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Mais %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 6d712c3..d1ed7ac 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modo de correção de cor"</string> <string name="recents_empty_message" msgid="2269156590813544104">"RECENTES"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações do aplicativo"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"pesquisar"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"A rede pode estar\nsob monitoração"</string> <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string> <string name="description_direction_up" msgid="7169032478259485180">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para cima."</string> @@ -217,6 +218,8 @@ <item quantity="other" msgid="7388721375827338153">"%d notificações ocultas"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toque para mostrar"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Mais %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml index 4ab5e75..4e0f0f6 100644 --- a/packages/SystemUI/res/values-rm/strings.xml +++ b/packages/SystemUI/res/values-rm/strings.xml @@ -382,6 +382,8 @@ <skip /> <!-- no translation found for recents_app_info_button_label (2890317189376000030) --> <skip /> + <!-- no translation found for recents_search_bar_label (8074997400187836677) --> + <skip /> <!-- no translation found for ssl_ca_cert_warning (9005954106902053641) --> <skip /> <!-- no translation found for description_target_search (3091587249776033139) --> @@ -394,5 +396,7 @@ <!-- no translation found for zen_mode_notification_title:other (7388721375827338153) --> <!-- no translation found for zen_mode_notification_text (8336623711388065713) --> <skip /> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <!-- no translation found for keyguard_more_overflow_text:other (9180696159506883684) --> </resources> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 2e8c7a6..cef305c 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -206,6 +206,8 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mod de corectare a culorilor"</string> <string name="recents_empty_message" msgid="2269156590813544104">"RECENTE"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informații despre aplicație"</string> + <!-- no translation found for recents_search_bar_label (8074997400187836677) --> + <skip /> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Rețeaua poate\nfi monitorizată"</string> <string name="description_target_search" msgid="3091587249776033139">"Căutaţi"</string> <string name="description_direction_up" msgid="7169032478259485180">"Glisaţi în sus pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +217,8 @@ <item quantity="other" msgid="7388721375827338153">"%d de notificări ascunse"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Atingeți pentru a afișa"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Încă %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 643759f..ef4b6ee 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -178,9 +178,7 @@ <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Режим полета"</string> <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> - <!-- String.format failed for translation --> - <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) --> - <skip /> + <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"100%%"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g>)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth выкл."</string> @@ -210,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Коррекция цвета"</string> <string name="recents_empty_message" msgid="2269156590813544104">"НЕДАВНИЕ СООБЩЕНИЯ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Сведения о приложении"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"поиск"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Действия в сети\nмогут отслеживаться"</string> <string name="description_target_search" msgid="3091587249776033139">"Поиск"</string> <string name="description_direction_up" msgid="7169032478259485180">"Проведите вверх, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -219,6 +218,8 @@ <item quantity="other" msgid="7388721375827338153">"Скрыто оповещений: %d"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Нажмите, чтобы открыть"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Ещё %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 3daf9f9..11e8b26 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Režim korekcie farieb"</string> <string name="recents_empty_message" msgid="2269156590813544104">"NEDÁVNE"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informácie o aplikácii"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"hľadať"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Sieť môže byť\nmonitorovaná"</string> <string name="description_target_search" msgid="3091587249776033139">"Vyhľadávanie"</string> <string name="description_direction_up" msgid="7169032478259485180">"Prejdite prstom nahor: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -217,6 +218,8 @@ <item quantity="other" msgid="7388721375827338153">"Skryté upozornenia: %d"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Upozornenie zobrazíte dotykom"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d ďalších"</item> </plurals> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index acda247..00d0086 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Način popravljanja barv"</string> <string name="recents_empty_message" msgid="2269156590813544104">"NEDAVNI"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Podatki o aplikaciji"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"iskanje"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Omrežje je\nlahko spremljano"</string> <string name="description_target_search" msgid="3091587249776033139">"Iskanje"</string> <string name="description_direction_up" msgid="7169032478259485180">"Povlecite navzgor za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"Skritih je toliko obvestil: %d"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Dotaknite se za prikaz"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Ne moti"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"še %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 4331c7f..0f8686c 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Режим корекције боје"</string> <string name="recents_empty_message" msgid="2269156590813544104">"НАЈНОВИЈЕ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Информације о апликацији"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"претражи"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Мрежа се можда\nнадгледа"</string> <string name="description_target_search" msgid="3091587249776033139">"Претрага"</string> <string name="description_direction_up" msgid="7169032478259485180">"Превуците нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"Сакривена обавештења: %d"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Додирните за приказ"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Још %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index cb591c1..a0e1468 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Färgkorrigeringsläge"</string> <string name="recents_empty_message" msgid="2269156590813544104">"NYA"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformation"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"sök"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Nätverket kan\nvara övervakat"</string> <string name="description_target_search" msgid="3091587249776033139">"Sök"</string> <string name="description_direction_up" msgid="7169032478259485180">"Dra uppåt för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d aviseringar har dolts"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Tryck här om du vill visa aviseringar"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Stör ej"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d till"</item> </plurals> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 11e2435..2c84b19 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -204,6 +204,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Hali ya kusahihisha rangi"</string> <string name="recents_empty_message" msgid="2269156590813544104">"YA HIVI KARIBUNI"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Maelezo ya Programu"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"tafuta"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Huenda mtandao\nunafuatiliwa"</string> <string name="description_target_search" msgid="3091587249776033139">"Tafuta"</string> <string name="description_direction_up" msgid="7169032478259485180">"Sogeza juu kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> @@ -213,6 +214,8 @@ <item quantity="other" msgid="7388721375827338153">"Arifa %d zimefichwa"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Gusa ili zionekane"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d zaidi"</item> </plurals> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 33fded2..1ebe21c 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"โหมดการแก้ไขสี"</string> <string name="recents_empty_message" msgid="2269156590813544104">"ล่าสุด"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"ข้อมูลแอปพลิเคชัน"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"ค้นหา"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"เครือข่ายอาจ\nถูกตรวจสอบ"</string> <string name="description_target_search" msgid="3091587249776033139">"ค้นหา"</string> <string name="description_direction_up" msgid="7169032478259485180">"เลื่อนขึ้นเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"ซ่อน %d การแจ้งเตือนแล้ว"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"แตะเพื่อแสดง"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"ห้ามรบกวน"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"อีก %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 57b882c..eb8f236 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mode ng pagtatama ng kulay"</string> <string name="recents_empty_message" msgid="2269156590813544104">"MGA KAMAKAILAN"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Impormasyon ng Application"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"maghanap"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Maaaring\nsinusubaybayan ang network"</string> <string name="description_target_search" msgid="3091587249776033139">"Maghanap"</string> <string name="description_direction_up" msgid="7169032478259485180">"Mag-slide pataas para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"Nakatago ang %d (na) notification"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Pindutin upang ipakita"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d pa"</item> </plurals> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 43e199e..1b57a94 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Renk düzeltme modu"</string> <string name="recents_empty_message" msgid="2269156590813544104">"SON İLETİLER"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Uygulama Bilgileri"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"ara"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Ağ izleniyor\nolabilir"</string> <string name="description_target_search" msgid="3091587249776033139">"Ara"</string> <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için yukarı kaydırın."</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"%d bildirim gizli"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Görüntülemek için dokunun"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d adet daha"</item> </plurals> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index cab6b65..60192d7 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Режим коригування кольору"</string> <string name="recents_empty_message" msgid="2269156590813544104">"ОСТАННІ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Інформація про додаток"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"пошук"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Мережа може\nвідстежуватися"</string> <string name="description_target_search" msgid="3091587249776033139">"Пошук"</string> <string name="description_direction_up" msgid="7169032478259485180">"Проведіть пальцем угору, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"Сховано сповіщень: %d"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Торкніться, щоб показати"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Не турбувати"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"Ще %d"</item> </plurals> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index bfbbf01..8770854 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Chế độ hiệu chỉnh màu sắc"</string> <string name="recents_empty_message" msgid="2269156590813544104">"GẦN ĐÂY"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Thông tin ứng dụng"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"tìm kiếm"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Mạng có thể\nđược giám sát"</string> <string name="description_target_search" msgid="3091587249776033139">"Tìm kiếm"</string> <string name="description_direction_up" msgid="7169032478259485180">"Trượt lên để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,8 @@ <item quantity="other" msgid="7388721375827338153">"%d thông báo ẩn"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Chạm để hiển thị"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d thông báo khác"</item> </plurals> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index ede3b61..89250a5 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"颜色校正模式"</string> <string name="recents_empty_message" msgid="2269156590813544104">"最近"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"应用信息"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"搜索"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"网络可能会\n受到监控"</string> <string name="description_target_search" msgid="3091587249776033139">"搜索"</string> <string name="description_direction_up" msgid="7169032478259485180">"向上滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string> @@ -217,6 +218,8 @@ <item quantity="other" msgid="7388721375827338153">"隐藏了%d条通知"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"触摸即可显示"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"还有%d条"</item> </plurals> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 006ce3e..6fb723e 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"色彩校準模式"</string> <string name="recents_empty_message" msgid="2269156590813544104">"近期"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程式資料"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"網絡可能會\n受到監控"</string> <string name="description_target_search" msgid="3091587249776033139">"搜尋"</string> <string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string> @@ -217,6 +218,7 @@ <item quantity="other" msgid="7388721375827338153">"已隱藏 %d 則通知"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"輕觸即可顯示"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"請勿騷擾"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"還有 %d 個"</item> </plurals> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 2a56c3f..9ceb4e9 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -208,6 +208,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"色彩校正模式"</string> <string name="recents_empty_message" msgid="2269156590813544104">"近期"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程式資訊"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"網路可能\n受到監控"</string> <string name="description_target_search" msgid="3091587249776033139">"搜尋"</string> <string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string> @@ -217,6 +218,8 @@ <item quantity="other" msgid="7388721375827338153">"已隱藏 %d 則通知"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"輕觸即可顯示"</string> + <!-- no translation found for zen_mode_title (8793432092004749188) --> + <skip /> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"還有 %d 則"</item> </plurals> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index a2defee..81a08d9 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -206,6 +206,7 @@ <string name="quick_settings_color_space_label" msgid="853443689745584770">"Imodi yokulungisa umbala"</string> <string name="recents_empty_message" msgid="2269156590813544104">"OKWAKAMUVA"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Ulwazi lohlelo lokusebenza"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"sesha"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Kungenzeka inethiwekhi\niqashiwe"</string> <string name="description_target_search" msgid="3091587249776033139">"Sesha"</string> <string name="description_direction_up" msgid="7169032478259485180">"Shelelisela ngenhla ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> @@ -215,6 +216,7 @@ <item quantity="other" msgid="7388721375827338153">"%d izaziso zifihliwe"</item> </plurals> <string name="zen_mode_notification_text" msgid="8336623711388065713">"Thinta ukuze ubonise"</string> + <string name="zen_mode_title" msgid="8793432092004749188">"Ungaphazamisi"</string> <plurals name="keyguard_more_overflow_text"> <item quantity="other" msgid="9180696159506883684">"%d okuningi"</item> </plurals> diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index 59e8360..9281265 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -49,4 +49,14 @@ <!-- Tint color for the content on the notification overflow card. --> <color name="keyguard_overflow_content_color">#ff666666</color> + + <!-- The default recents task bar background color. --> + <color name="recents_task_bar_default_background_color">#e6444444</color> + <!-- The default recents task bar text color. --> + <color name="recents_task_bar_default_text_color">#ffffffff</color> + <!-- The recents task bar light text color to be drawn on top of dark backgrounds. --> + <color name="recents_task_bar_light_text_color">#ffffffff</color> + <!-- The recents task bar dark text color to be drawn on top of light backgrounds. --> + <color name="recents_task_bar_dark_text_color">#ff222222</color> + </resources> diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java index da265e1..52bba4a 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java @@ -413,6 +413,8 @@ public class RecentsTaskLoader { for (int i = 0; i < taskCount; i++) { ActivityManager.RecentTaskInfo t = tasks.get(i); ActivityInfo info = ssp.getActivityInfo(t.baseIntent.getComponent(), t.userId); + if (info == null) continue; + String activityLabel = (t.activityLabel == null ? ssp.getActivityLabel(info) : t.activityLabel.toString()); BitmapDrawable activityIcon = null; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 8fa076b..ed007e9 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -16369,7 +16369,8 @@ public final class ActivityManagerService extends ActivityManagerNative * background. */ private void updateCurrentProfileIdsLocked() { - final List<UserInfo> profiles = getUserManagerLocked().getProfiles(mCurrentUserId); + final List<UserInfo> profiles = getUserManagerLocked().getProfiles( + mCurrentUserId, false /* enabledOnly */); int[] currentProfileIds = new int[profiles.size()]; // profiles will not be null for (int i = 0; i < currentProfileIds.length; i++) { currentProfileIds[i] = profiles.get(i).id; @@ -16379,7 +16380,8 @@ public final class ActivityManagerService extends ActivityManagerNative private Set getProfileIdsLocked(int userId) { Set userIds = new HashSet<Integer>(); - final List<UserInfo> profiles = getUserManagerLocked().getProfiles(userId); + final List<UserInfo> profiles = getUserManagerLocked().getProfiles( + userId, false /* enabledOnly */); for (UserInfo user : profiles) { userIds.add(Integer.valueOf(user.id)); } @@ -16678,7 +16680,8 @@ public final class ActivityManagerService extends ActivityManagerNative void startProfilesLocked() { if (DEBUG_MU) Slog.i(TAG_MU, "startProfilesLocked"); - List<UserInfo> profiles = getUserManagerLocked().getProfiles(mCurrentUserId); + List<UserInfo> profiles = getUserManagerLocked().getProfiles( + mCurrentUserId, false /* enabledOnly */); List<UserInfo> toStart = new ArrayList<UserInfo>(profiles.size()); for (UserInfo user : profiles) { if ((user.flags & UserInfo.FLAG_INITIALIZED) == UserInfo.FLAG_INITIALIZED diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 0acde09..9f57728 100755 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -793,7 +793,7 @@ final class ActivityStack { prev.task.touchActiveTime(); clearLaunchTime(prev); final ActivityRecord next = mStackSupervisor.topRunningActivityLocked(); - if (next == null || next.task != prev.task) { + if (next == null || next.noDisplay || next.task != prev.task) { prev.updateThumbnail(screenshotActivities(prev), null); } stopFullyDrawnTraceIfNeeded(); diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index afef4ff..e044d3f 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -3000,6 +3000,8 @@ public final class ActivityStackSupervisor implements DisplayListener { } class ActivityContainer extends android.app.IActivityContainer.Stub { + final static int FORCE_NEW_TASK_FLAGS = Intent.FLAG_ACTIVITY_NEW_TASK | + Intent.FLAG_ACTIVITY_MULTIPLE_TASK; final int mStackId; IActivityContainerCallback mCallback = null; final ActivityStack mStack; @@ -3096,6 +3098,7 @@ public final class ActivityStackSupervisor implements DisplayListener { int userId = mService.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), mCurrentUser, false, true, "ActivityContainer", null); // TODO: Switch to user app stacks here. + intent.addFlags(FORCE_NEW_TASK_FLAGS); String mimeType = intent.getType(); if (mimeType == null && intent.getData() != null && "content".equals(intent.getData().getScheme())) { @@ -3114,7 +3117,7 @@ public final class ActivityStackSupervisor implements DisplayListener { } return ((PendingIntentRecord)intentSender).sendInner(0, null, null, null, null, null, - null, 0, 0, 0, null, this); + null, 0, FORCE_NEW_TASK_FLAGS, FORCE_NEW_TASK_FLAGS, null, this); } @Override diff --git a/services/core/java/com/android/server/notification/NotificationListeners.java b/services/core/java/com/android/server/notification/NotificationListeners.java new file mode 100644 index 0000000..91d2f98 --- /dev/null +++ b/services/core/java/com/android/server/notification/NotificationListeners.java @@ -0,0 +1,608 @@ +/** + * Copyright (c) 2014, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.notification; + +import android.app.PendingIntent; +import android.content.ComponentName; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; +import android.content.pm.PackageManager.NameNotFoundException; +import android.database.ContentObserver; +import android.net.Uri; +import android.os.Build; +import android.os.Handler; +import android.os.IBinder; +import android.os.RemoteException; +import android.os.UserHandle; +import android.provider.Settings; +import android.service.notification.INotificationListener; +import android.service.notification.NotificationListenerService; +import android.service.notification.StatusBarNotification; +import android.text.TextUtils; +import android.util.ArraySet; +import android.util.Log; +import android.util.Slog; +import android.util.SparseArray; + +import com.android.internal.R; +import com.android.server.notification.NotificationManagerService.UserProfiles; + +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class NotificationListeners { + private static final String TAG = "NotificationListeners"; + private static final boolean DBG = NotificationManagerService.DBG; + + private static final String ENABLED_NOTIFICATION_LISTENERS_SEPARATOR = ":"; + + private final Context mContext; + private final Handler mHandler; + private final Object mMutex; + private final UserProfiles mUserProfiles; + private final SettingsObserver mSettingsObserver; + + // contains connections to all connected listeners, including app services + // and system listeners + private final ArrayList<NotificationListenerInfo> mListeners + = new ArrayList<NotificationListenerInfo>(); + // things that will be put into mListeners as soon as they're ready + private final ArrayList<String> mServicesBinding = new ArrayList<String>(); + // lists the component names of all enabled (and therefore connected) listener + // app services for current profiles. + private ArraySet<ComponentName> mEnabledListenersForCurrentProfiles + = new ArraySet<ComponentName>(); + // Just the packages from mEnabledListenersForCurrentProfiles + private ArraySet<String> mEnabledListenerPackageNames = new ArraySet<String>(); + + public NotificationListeners(Context context, Handler handler, Object mutex, + UserProfiles userProfiles) { + mContext = context; + mHandler = handler; + mMutex = mutex; + mUserProfiles = userProfiles; + mSettingsObserver = new SettingsObserver(mHandler); + } + + public void onBootPhaseAppsCanStart() { + mSettingsObserver.observe(); + } + + protected void onServiceAdded(INotificationListener mListener) { + // for subclasses + } + + public void dump(PrintWriter pw) { + pw.println(" Listeners (" + mEnabledListenersForCurrentProfiles.size() + + ") enabled for current profiles:"); + for (ComponentName cmpt : mEnabledListenersForCurrentProfiles) { + pw.println(" " + cmpt); + } + + pw.println(" Live listeners (" + mListeners.size() + "):"); + for (NotificationListenerInfo info : mListeners) { + pw.println(" " + info.component + + " (user " + info.userid + "): " + info.listener + + (info.isSystem?" SYSTEM":"")); + } + } + + public void onPackagesChanged(boolean queryReplace, String[] pkgList) { + boolean anyListenersInvolved = false; + if (pkgList != null && (pkgList.length > 0)) { + for (String pkgName : pkgList) { + if (mEnabledListenerPackageNames.contains(pkgName)) { + anyListenersInvolved = true; + } + } + } + + if (anyListenersInvolved) { + // if we're not replacing a package, clean up orphaned bits + if (!queryReplace) { + disableNonexistentListeners(); + } + // make sure we're still bound to any of our + // listeners who may have just upgraded + rebindListenerServices(); + } + } + + /** + * asynchronously notify all listeners about a new notification + */ + public void notifyPostedLocked(StatusBarNotification sbn) { + // make a copy in case changes are made to the underlying Notification object + final StatusBarNotification sbnClone = sbn.clone(); + for (final NotificationListenerInfo info : mListeners) { + mHandler.post(new Runnable() { + @Override + public void run() { + info.notifyPostedIfUserMatch(sbnClone); + } + }); + } + } + + /** + * asynchronously notify all listeners about a removed notification + */ + public void notifyRemovedLocked(StatusBarNotification sbn) { + // make a copy in case changes are made to the underlying Notification object + // NOTE: this copy is lightweight: it doesn't include heavyweight parts of the notification + final StatusBarNotification sbnLight = sbn.cloneLight(); + + for (final NotificationListenerInfo info : mListeners) { + mHandler.post(new Runnable() { + @Override + public void run() { + info.notifyRemovedIfUserMatch(sbnLight); + } + }); + } + } + + public NotificationListenerInfo checkListenerTokenLocked(INotificationListener listener) { + checkNullListener(listener); + final IBinder token = listener.asBinder(); + final int N = mListeners.size(); + for (int i=0; i<N; i++) { + final NotificationListenerInfo info = mListeners.get(i); + if (info.listener.asBinder() == token) return info; + } + throw new SecurityException("Disallowed call from unknown listener: " + listener); + } + + public void unregisterListener(INotificationListener listener, int userid) { + checkNullListener(listener); + // no need to check permissions; if your listener binder is in the list, + // that's proof that you had permission to add it in the first place + unregisterListenerImpl(listener, userid); + } + + public void registerListener(INotificationListener listener, + ComponentName component, int userid) { + checkNullListener(listener); + registerListenerImpl(listener, component, userid); + } + + /** + * Remove notification access for any services that no longer exist. + */ + private void disableNonexistentListeners() { + int[] userIds = mUserProfiles.getCurrentProfileIds(); + final int N = userIds.length; + for (int i = 0 ; i < N; ++i) { + disableNonexistentListeners(userIds[i]); + } + } + + private void disableNonexistentListeners(int userId) { + String flatIn = Settings.Secure.getStringForUser( + mContext.getContentResolver(), + Settings.Secure.ENABLED_NOTIFICATION_LISTENERS, + userId); + if (!TextUtils.isEmpty(flatIn)) { + if (DBG) Slog.v(TAG, "flat before: " + flatIn); + PackageManager pm = mContext.getPackageManager(); + List<ResolveInfo> installedServices = pm.queryIntentServicesAsUser( + new Intent(NotificationListenerService.SERVICE_INTERFACE), + PackageManager.GET_SERVICES | PackageManager.GET_META_DATA, + userId); + + Set<ComponentName> installed = new ArraySet<ComponentName>(); + for (int i = 0, count = installedServices.size(); i < count; i++) { + ResolveInfo resolveInfo = installedServices.get(i); + ServiceInfo info = resolveInfo.serviceInfo; + + if (!android.Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE.equals( + info.permission)) { + Slog.w(TAG, "Skipping notification listener service " + + info.packageName + "/" + info.name + + ": it does not require the permission " + + android.Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE); + continue; + } + installed.add(new ComponentName(info.packageName, info.name)); + } + + String flatOut = ""; + if (!installed.isEmpty()) { + String[] enabled = flatIn.split(ENABLED_NOTIFICATION_LISTENERS_SEPARATOR); + ArrayList<String> remaining = new ArrayList<String>(enabled.length); + for (int i = 0; i < enabled.length; i++) { + ComponentName enabledComponent = ComponentName.unflattenFromString(enabled[i]); + if (installed.contains(enabledComponent)) { + remaining.add(enabled[i]); + } + } + flatOut = TextUtils.join(ENABLED_NOTIFICATION_LISTENERS_SEPARATOR, remaining); + } + if (DBG) Slog.v(TAG, "flat after: " + flatOut); + if (!flatIn.equals(flatOut)) { + Settings.Secure.putStringForUser(mContext.getContentResolver(), + Settings.Secure.ENABLED_NOTIFICATION_LISTENERS, + flatOut, userId); + } + } + } + + /** + * Called whenever packages change, the user switches, or ENABLED_NOTIFICATION_LISTENERS + * is altered. (For example in response to USER_SWITCHED in our broadcast receiver) + */ + private void rebindListenerServices() { + final int[] userIds = mUserProfiles.getCurrentProfileIds(); + final int nUserIds = userIds.length; + + final SparseArray<String> flat = new SparseArray<String>(); + + for (int i = 0; i < nUserIds; ++i) { + flat.put(userIds[i], Settings.Secure.getStringForUser( + mContext.getContentResolver(), + Settings.Secure.ENABLED_NOTIFICATION_LISTENERS, + userIds[i])); + } + + NotificationListenerInfo[] toRemove = new NotificationListenerInfo[mListeners.size()]; + final SparseArray<ArrayList<ComponentName>> toAdd + = new SparseArray<ArrayList<ComponentName>>(); + + synchronized (mMutex) { + // unbind and remove all existing listeners + toRemove = mListeners.toArray(toRemove); + + final ArraySet<ComponentName> newEnabled = new ArraySet<ComponentName>(); + final ArraySet<String> newPackages = new ArraySet<String>(); + + for (int i = 0; i < nUserIds; ++i) { + final ArrayList<ComponentName> add = new ArrayList<ComponentName>(); + toAdd.put(userIds[i], add); + + // decode the list of components + String toDecode = flat.get(userIds[i]); + if (toDecode != null) { + String[] components = toDecode.split(ENABLED_NOTIFICATION_LISTENERS_SEPARATOR); + for (int j = 0; j < components.length; j++) { + final ComponentName component + = ComponentName.unflattenFromString(components[j]); + if (component != null) { + newEnabled.add(component); + add.add(component); + newPackages.add(component.getPackageName()); + } + } + + } + } + mEnabledListenersForCurrentProfiles = newEnabled; + mEnabledListenerPackageNames = newPackages; + } + + for (NotificationListenerInfo info : toRemove) { + final ComponentName component = info.component; + final int oldUser = info.userid; + Slog.v(TAG, "disabling notification listener for user " + + oldUser + ": " + component); + unregisterListenerService(component, info.userid); + } + + for (int i = 0; i < nUserIds; ++i) { + final ArrayList<ComponentName> add = toAdd.get(userIds[i]); + final int N = add.size(); + for (int j = 0; j < N; j++) { + final ComponentName component = add.get(j); + Slog.v(TAG, "enabling notification listener for user " + userIds[i] + ": " + + component); + registerListenerService(component, userIds[i]); + } + } + } + + /** + * Version of registerListener that takes the name of a + * {@link android.service.notification.NotificationListenerService} to bind to. + * + * This is the mechanism by which third parties may subscribe to notifications. + */ + private void registerListenerService(final ComponentName name, final int userid) { + NotificationUtil.checkCallerIsSystem(); + + if (DBG) Slog.v(TAG, "registerListenerService: " + name + " u=" + userid); + + synchronized (mMutex) { + final String servicesBindingTag = name.toString() + "/" + userid; + if (mServicesBinding.contains(servicesBindingTag)) { + // stop registering this thing already! we're working on it + return; + } + mServicesBinding.add(servicesBindingTag); + + final int N = mListeners.size(); + for (int i=N-1; i>=0; i--) { + final NotificationListenerInfo info = mListeners.get(i); + if (name.equals(info.component) + && info.userid == userid) { + // cut old connections + if (DBG) Slog.v(TAG, " disconnecting old listener: " + info.listener); + mListeners.remove(i); + if (info.connection != null) { + mContext.unbindService(info.connection); + } + } + } + + Intent intent = new Intent(NotificationListenerService.SERVICE_INTERFACE); + intent.setComponent(name); + + intent.putExtra(Intent.EXTRA_CLIENT_LABEL, + R.string.notification_listener_binding_label); + + final PendingIntent pendingIntent = PendingIntent.getActivity( + mContext, 0, new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS), 0); + intent.putExtra(Intent.EXTRA_CLIENT_INTENT, pendingIntent); + + ApplicationInfo appInfo = null; + try { + appInfo = mContext.getPackageManager().getApplicationInfo( + name.getPackageName(), 0); + } catch (NameNotFoundException e) { + // Ignore if the package doesn't exist we won't be able to bind to the service. + } + final int targetSdkVersion = + appInfo != null ? appInfo.targetSdkVersion : Build.VERSION_CODES.BASE; + + try { + if (DBG) Slog.v(TAG, "binding: " + intent); + if (!mContext.bindServiceAsUser(intent, + new ServiceConnection() { + INotificationListener mListener; + + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + boolean added = false; + synchronized (mMutex) { + mServicesBinding.remove(servicesBindingTag); + try { + mListener = INotificationListener.Stub.asInterface(service); + NotificationListenerInfo info + = new NotificationListenerInfo( + mListener, name, userid, this, + targetSdkVersion); + service.linkToDeath(info, 0); + added = mListeners.add(info); + } catch (RemoteException e) { + // already dead + } + } + if (added) { + onServiceAdded(mListener); + } + } + + @Override + public void onServiceDisconnected(ComponentName name) { + Slog.v(TAG, "notification listener connection lost: " + name); + } + }, + Context.BIND_AUTO_CREATE, + new UserHandle(userid))) + { + mServicesBinding.remove(servicesBindingTag); + Slog.w(TAG, "Unable to bind listener service: " + intent); + return; + } + } catch (SecurityException ex) { + Slog.e(TAG, "Unable to bind listener service: " + intent, ex); + return; + } + } + } + + /** + * Remove a listener service for the given user by ComponentName + */ + private void unregisterListenerService(ComponentName name, int userid) { + NotificationUtil.checkCallerIsSystem(); + + synchronized (mMutex) { + final int N = mListeners.size(); + for (int i=N-1; i>=0; i--) { + final NotificationListenerInfo info = mListeners.get(i); + if (name.equals(info.component) + && info.userid == userid) { + mListeners.remove(i); + if (info.connection != null) { + try { + mContext.unbindService(info.connection); + } catch (IllegalArgumentException ex) { + // something happened to the service: we think we have a connection + // but it's bogus. + Slog.e(TAG, "Listener " + name + " could not be unbound: " + ex); + } + } + } + } + } + } + + /** + * Removes a listener from the list but does not unbind from the listener's service. + * + * @return the removed listener. + */ + private NotificationListenerInfo removeListenerImpl( + final INotificationListener listener, final int userid) { + NotificationListenerInfo listenerInfo = null; + synchronized (mMutex) { + final int N = mListeners.size(); + for (int i=N-1; i>=0; i--) { + final NotificationListenerInfo info = mListeners.get(i); + if (info.listener.asBinder() == listener.asBinder() + && info.userid == userid) { + listenerInfo = mListeners.remove(i); + } + } + } + return listenerInfo; + } + + private void checkNullListener(INotificationListener listener) { + if (listener == null) { + throw new IllegalArgumentException("Listener must not be null"); + } + } + + private void registerListenerImpl(final INotificationListener listener, + final ComponentName component, final int userid) { + synchronized (mMutex) { + try { + NotificationListenerInfo info + = new NotificationListenerInfo(listener, component, userid, + /*isSystem*/ true, Build.VERSION_CODES.L); + listener.asBinder().linkToDeath(info, 0); + mListeners.add(info); + } catch (RemoteException e) { + // already dead + } + } + } + + /** + * Removes a listener from the list and unbinds from its service. + */ + private void unregisterListenerImpl(final INotificationListener listener, final int userid) { + NotificationListenerInfo info = removeListenerImpl(listener, userid); + if (info != null && info.connection != null) { + mContext.unbindService(info.connection); + } + } + + private class SettingsObserver extends ContentObserver { + private final Uri ENABLED_NOTIFICATION_LISTENERS_URI + = Settings.Secure.getUriFor(Settings.Secure.ENABLED_NOTIFICATION_LISTENERS); + + private SettingsObserver(Handler handler) { + super(handler); + } + + private void observe() { + ContentResolver resolver = mContext.getContentResolver(); + resolver.registerContentObserver(ENABLED_NOTIFICATION_LISTENERS_URI, + false, this, UserHandle.USER_ALL); + update(null); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + update(uri); + } + + private void update(Uri uri) { + if (uri == null || ENABLED_NOTIFICATION_LISTENERS_URI.equals(uri)) { + rebindListenerServices(); + } + } + } + + public class NotificationListenerInfo implements IBinder.DeathRecipient { + public INotificationListener listener; + public ComponentName component; + public int userid; + public boolean isSystem; + public ServiceConnection connection; + public int targetSdkVersion; + + public NotificationListenerInfo(INotificationListener listener, ComponentName component, + int userid, boolean isSystem, int targetSdkVersion) { + this.listener = listener; + this.component = component; + this.userid = userid; + this.isSystem = isSystem; + this.connection = null; + this.targetSdkVersion = targetSdkVersion; + } + + public NotificationListenerInfo(INotificationListener listener, ComponentName component, + int userid, ServiceConnection connection, int targetSdkVersion) { + this.listener = listener; + this.component = component; + this.userid = userid; + this.isSystem = false; + this.connection = connection; + this.targetSdkVersion = targetSdkVersion; + } + + public boolean enabledAndUserMatches(StatusBarNotification sbn) { + final int nid = sbn.getUserId(); + if (!isEnabledForCurrentProfiles()) { + return false; + } + if (this.userid == UserHandle.USER_ALL) return true; + if (nid == UserHandle.USER_ALL || nid == this.userid) return true; + return supportsProfiles() && mUserProfiles.isCurrentProfile(nid); + } + + public boolean supportsProfiles() { + return targetSdkVersion >= Build.VERSION_CODES.L; + } + + public void notifyPostedIfUserMatch(StatusBarNotification sbn) { + if (!enabledAndUserMatches(sbn)) { + return; + } + try { + listener.onNotificationPosted(sbn); + } catch (RemoteException ex) { + Log.e(TAG, "unable to notify listener (posted): " + listener, ex); + } + } + + public void notifyRemovedIfUserMatch(StatusBarNotification sbn) { + if (!enabledAndUserMatches(sbn)) return; + try { + listener.onNotificationRemoved(sbn); + } catch (RemoteException ex) { + Log.e(TAG, "unable to notify listener (removed): " + listener, ex); + } + } + + @Override + public void binderDied() { + // Remove the listener, but don't unbind from the service. The system will bring the + // service back up, and the onServiceConnected handler will readd the listener with the + // new binding. If this isn't a bound service, and is just a registered + // INotificationListener, just removing it from the list is all we need to do anyway. + removeListenerImpl(this.listener, this.userid); + } + + /** convenience method for looking in mEnabledListenersForCurrentProfiles */ + public boolean isEnabledForCurrentProfiles() { + if (this.isSystem) return true; + if (this.connection == null) return false; + return mEnabledListenersForCurrentProfiles.contains(this.component); + } + } +} diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index c8bdb4c..5f096cb 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -22,7 +22,6 @@ import static org.xmlpull.v1.XmlPullParser.START_TAG; import android.app.ActivityManager; import android.app.ActivityManagerNative; -import android.app.AppGlobals; import android.app.AppOpsManager; import android.app.IActivityManager; import android.app.INotificationManager; @@ -36,12 +35,8 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.content.ServiceConnection; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.content.pm.ServiceInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.UserInfo; import android.content.res.Resources; @@ -51,7 +46,6 @@ import android.media.AudioManager; import android.media.IRingtonePlayer; import android.net.Uri; import android.os.Binder; -import android.os.Build; import android.os.Environment; import android.os.Handler; import android.os.IBinder; @@ -63,7 +57,6 @@ import android.os.UserManager; import android.os.Vibrator; import android.provider.Settings; import android.service.notification.INotificationListener; -import android.service.notification.NotificationListenerService; import android.service.notification.StatusBarNotification; import android.service.notification.ZenModeConfig; import android.telephony.TelephonyManager; @@ -82,11 +75,14 @@ import com.android.internal.R; import com.android.internal.notification.NotificationScorer; import com.android.internal.util.FastXmlSerializer; import com.android.server.EventLogTags; -import com.android.server.notification.NotificationUsageStats.SingleNotificationStats; -import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.SystemService; import com.android.server.lights.Light; import com.android.server.lights.LightsManager; +import com.android.server.notification.NotificationListeners.NotificationListenerInfo; +import com.android.server.notification.NotificationUsageStats.SingleNotificationStats; +import com.android.server.statusbar.StatusBarManagerInternal; + +import libcore.io.IoUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -107,9 +103,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; -import java.util.Set; - -import libcore.io.IoUtils; /** {@hide} */ public class NotificationManagerService extends SystemService { @@ -143,8 +136,6 @@ public class NotificationManagerService extends SystemService { static final boolean ENABLE_BLOCKED_NOTIFICATIONS = true; static final boolean ENABLE_BLOCKED_TOASTS = true; - static final String ENABLED_NOTIFICATION_LISTENERS_SEPARATOR = ":"; - private IActivityManager mAm; AudioManager mAudioManager; StatusBarManagerInternal mStatusBar; @@ -185,19 +176,6 @@ public class NotificationManagerService extends SystemService { private AppOpsManager mAppOps; - // contains connections to all connected listeners, including app services - // and system listeners - private ArrayList<NotificationListenerInfo> mListeners - = new ArrayList<NotificationListenerInfo>(); - // things that will be put into mListeners as soon as they're ready - private ArrayList<String> mServicesBinding = new ArrayList<String>(); - // lists the component names of all enabled (and therefore connected) listener - // app services for current profiles. - private HashSet<ComponentName> mEnabledListenersForCurrentProfiles - = new HashSet<ComponentName>(); - // Just the packages from mEnabledListenersForCurrentProfiles - private HashSet<String> mEnabledListenerPackageNames = new HashSet<String>(); - // Notification control database. For now just contains disabled packages. private AtomicFile mPolicyFile; private HashSet<String> mBlockedPackages = new HashSet<String>(); @@ -213,13 +191,13 @@ public class NotificationManagerService extends SystemService { final ArrayList<NotificationScorer> mScorers = new ArrayList<NotificationScorer>(); + private NotificationListeners mListeners; + private final UserProfiles mUserProfiles = new UserProfiles(); + private final NotificationUsageStats mUsageStats = new NotificationUsageStats(); private static final String EXTRA_INTERCEPT = "android.intercept"; - // Profiles of the current user. - final protected SparseArray<UserInfo> mCurrentProfiles = new SparseArray<UserInfo>(); - private static final int MY_UID = Process.myUid(); private static final int MY_PID = Process.myPid(); private static final int REASON_DELEGATE_CLICK = 1; @@ -234,85 +212,6 @@ public class NotificationManagerService extends SystemService { private static final int REASON_LISTENER_CANCEL = 10; private static final int REASON_LISTENER_CANCEL_ALL = 11; - private class NotificationListenerInfo implements IBinder.DeathRecipient { - INotificationListener listener; - ComponentName component; - int userid; - boolean isSystem; - ServiceConnection connection; - int targetSdkVersion; - - public NotificationListenerInfo(INotificationListener listener, ComponentName component, - int userid, boolean isSystem, int targetSdkVersion) { - this.listener = listener; - this.component = component; - this.userid = userid; - this.isSystem = isSystem; - this.connection = null; - this.targetSdkVersion = targetSdkVersion; - } - - public NotificationListenerInfo(INotificationListener listener, ComponentName component, - int userid, ServiceConnection connection, int targetSdkVersion) { - this.listener = listener; - this.component = component; - this.userid = userid; - this.isSystem = false; - this.connection = connection; - this.targetSdkVersion = targetSdkVersion; - } - - boolean enabledAndUserMatches(StatusBarNotification sbn) { - final int nid = sbn.getUserId(); - if (!isEnabledForCurrentProfiles()) { - return false; - } - if (this.userid == UserHandle.USER_ALL) return true; - if (nid == UserHandle.USER_ALL || nid == this.userid) return true; - return supportsProfiles() && isCurrentProfile(nid); - } - - boolean supportsProfiles() { - return targetSdkVersion >= Build.VERSION_CODES.L; - } - - public void notifyPostedIfUserMatch(StatusBarNotification sbn) { - if (!enabledAndUserMatches(sbn)) { - return; - } - try { - listener.onNotificationPosted(sbn); - } catch (RemoteException ex) { - Log.e(TAG, "unable to notify listener (posted): " + listener, ex); - } - } - - public void notifyRemovedIfUserMatch(StatusBarNotification sbn) { - if (!enabledAndUserMatches(sbn)) return; - try { - listener.onNotificationRemoved(sbn); - } catch (RemoteException ex) { - Log.e(TAG, "unable to notify listener (removed): " + listener, ex); - } - } - - @Override - public void binderDied() { - // Remove the listener, but don't unbind from the service. The system will bring the - // service back up, and the onServiceConnected handler will readd the listener with the - // new binding. If this isn't a bound service, and is just a registered - // INotificationListener, just removing it from the list is all we need to do anyway. - removeListenerImpl(this.listener, this.userid); - } - - /** convenience method for looking in mEnabledListenersForCurrentProfiles */ - public boolean isEnabledForCurrentProfiles() { - if (this.isSystem) return true; - if (this.connection == null) return false; - return mEnabledListenersForCurrentProfiles.contains(this.component); - } - } - private static class Archive { static final int BUFFER_SIZE = 250; ArrayDeque<StatusBarNotification> mBuffer = new ArrayDeque<StatusBarNotification>(BUFFER_SIZE); @@ -537,328 +436,6 @@ public class NotificationManagerService extends SystemService { } - /** - * Remove notification access for any services that no longer exist. - */ - void disableNonexistentListeners() { - int[] userIds = getCurrentProfileIds(); - final int N = userIds.length; - for (int i = 0 ; i < N; ++i) { - disableNonexistentListeners(userIds[i]); - } - } - - void disableNonexistentListeners(int userId) { - String flatIn = Settings.Secure.getStringForUser( - getContext().getContentResolver(), - Settings.Secure.ENABLED_NOTIFICATION_LISTENERS, - userId); - if (!TextUtils.isEmpty(flatIn)) { - if (DBG) Slog.v(TAG, "flat before: " + flatIn); - PackageManager pm = getContext().getPackageManager(); - List<ResolveInfo> installedServices = pm.queryIntentServicesAsUser( - new Intent(NotificationListenerService.SERVICE_INTERFACE), - PackageManager.GET_SERVICES | PackageManager.GET_META_DATA, - userId); - - Set<ComponentName> installed = new HashSet<ComponentName>(); - for (int i = 0, count = installedServices.size(); i < count; i++) { - ResolveInfo resolveInfo = installedServices.get(i); - ServiceInfo info = resolveInfo.serviceInfo; - - if (!android.Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE.equals( - info.permission)) { - Slog.w(TAG, "Skipping notification listener service " - + info.packageName + "/" + info.name - + ": it does not require the permission " - + android.Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE); - continue; - } - installed.add(new ComponentName(info.packageName, info.name)); - } - - String flatOut = ""; - if (!installed.isEmpty()) { - String[] enabled = flatIn.split(ENABLED_NOTIFICATION_LISTENERS_SEPARATOR); - ArrayList<String> remaining = new ArrayList<String>(enabled.length); - for (int i = 0; i < enabled.length; i++) { - ComponentName enabledComponent = ComponentName.unflattenFromString(enabled[i]); - if (installed.contains(enabledComponent)) { - remaining.add(enabled[i]); - } - } - flatOut = TextUtils.join(ENABLED_NOTIFICATION_LISTENERS_SEPARATOR, remaining); - } - if (DBG) Slog.v(TAG, "flat after: " + flatOut); - if (!flatIn.equals(flatOut)) { - Settings.Secure.putStringForUser(getContext().getContentResolver(), - Settings.Secure.ENABLED_NOTIFICATION_LISTENERS, - flatOut, userId); - } - } - } - - /** - * Called whenever packages change, the user switches, or ENABLED_NOTIFICATION_LISTENERS - * is altered. (For example in response to USER_SWITCHED in our broadcast receiver) - */ - void rebindListenerServices() { - final int[] userIds = getCurrentProfileIds(); - final int nUserIds = userIds.length; - - final SparseArray<String> flat = new SparseArray<String>(); - - for (int i = 0; i < nUserIds; ++i) { - flat.put(userIds[i], Settings.Secure.getStringForUser( - getContext().getContentResolver(), - Settings.Secure.ENABLED_NOTIFICATION_LISTENERS, - userIds[i])); - } - - NotificationListenerInfo[] toRemove = new NotificationListenerInfo[mListeners.size()]; - final SparseArray<ArrayList<ComponentName>> toAdd - = new SparseArray<ArrayList<ComponentName>>(); - - synchronized (mNotificationList) { - // unbind and remove all existing listeners - toRemove = mListeners.toArray(toRemove); - - final HashSet<ComponentName> newEnabled = new HashSet<ComponentName>(); - final HashSet<String> newPackages = new HashSet<String>(); - - for (int i = 0; i < nUserIds; ++i) { - final ArrayList<ComponentName> add = new ArrayList<ComponentName>(); - toAdd.put(userIds[i], add); - - // decode the list of components - String toDecode = flat.get(userIds[i]); - if (toDecode != null) { - String[] components = toDecode.split(ENABLED_NOTIFICATION_LISTENERS_SEPARATOR); - for (int j = 0; j < components.length; j++) { - final ComponentName component - = ComponentName.unflattenFromString(components[j]); - if (component != null) { - newEnabled.add(component); - add.add(component); - newPackages.add(component.getPackageName()); - } - } - - } - } - mEnabledListenersForCurrentProfiles = newEnabled; - mEnabledListenerPackageNames = newPackages; - } - - for (NotificationListenerInfo info : toRemove) { - final ComponentName component = info.component; - final int oldUser = info.userid; - Slog.v(TAG, "disabling notification listener for user " - + oldUser + ": " + component); - unregisterListenerService(component, info.userid); - } - - for (int i = 0; i < nUserIds; ++i) { - final ArrayList<ComponentName> add = toAdd.get(userIds[i]); - final int N = add.size(); - for (int j = 0; j < N; j++) { - final ComponentName component = add.get(j); - Slog.v(TAG, "enabling notification listener for user " + userIds[i] + ": " - + component); - registerListenerService(component, userIds[i]); - } - } - } - - - /** - * Version of registerListener that takes the name of a - * {@link android.service.notification.NotificationListenerService} to bind to. - * - * This is the mechanism by which third parties may subscribe to notifications. - */ - private void registerListenerService(final ComponentName name, final int userid) { - checkCallerIsSystem(); - - if (DBG) Slog.v(TAG, "registerListenerService: " + name + " u=" + userid); - - synchronized (mNotificationList) { - final String servicesBindingTag = name.toString() + "/" + userid; - if (mServicesBinding.contains(servicesBindingTag)) { - // stop registering this thing already! we're working on it - return; - } - mServicesBinding.add(servicesBindingTag); - - final int N = mListeners.size(); - for (int i=N-1; i>=0; i--) { - final NotificationListenerInfo info = mListeners.get(i); - if (name.equals(info.component) - && info.userid == userid) { - // cut old connections - if (DBG) Slog.v(TAG, " disconnecting old listener: " + info.listener); - mListeners.remove(i); - if (info.connection != null) { - getContext().unbindService(info.connection); - } - } - } - - Intent intent = new Intent(NotificationListenerService.SERVICE_INTERFACE); - intent.setComponent(name); - - intent.putExtra(Intent.EXTRA_CLIENT_LABEL, - R.string.notification_listener_binding_label); - - final PendingIntent pendingIntent = PendingIntent.getActivity( - getContext(), 0, new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS), 0); - intent.putExtra(Intent.EXTRA_CLIENT_INTENT, pendingIntent); - - ApplicationInfo appInfo = null; - try { - appInfo = getContext().getPackageManager().getApplicationInfo( - name.getPackageName(), 0); - } catch (NameNotFoundException e) { - // Ignore if the package doesn't exist we won't be able to bind to the service. - } - final int targetSdkVersion = - appInfo != null ? appInfo.targetSdkVersion : Build.VERSION_CODES.BASE; - - try { - if (DBG) Slog.v(TAG, "binding: " + intent); - if (!getContext().bindServiceAsUser(intent, - new ServiceConnection() { - INotificationListener mListener; - - @Override - public void onServiceConnected(ComponentName name, IBinder service) { - boolean added = false; - synchronized (mNotificationList) { - mServicesBinding.remove(servicesBindingTag); - try { - mListener = INotificationListener.Stub.asInterface(service); - NotificationListenerInfo info - = new NotificationListenerInfo( - mListener, name, userid, this, - targetSdkVersion); - service.linkToDeath(info, 0); - added = mListeners.add(info); - } catch (RemoteException e) { - // already dead - } - } - if (added) { - final String[] keys = - getActiveNotificationKeysFromListener(mListener); - try { - mListener.onListenerConnected(keys); - } catch (RemoteException e) { - // we tried - } - } - } - - @Override - public void onServiceDisconnected(ComponentName name) { - Slog.v(TAG, "notification listener connection lost: " + name); - } - }, - Context.BIND_AUTO_CREATE, - new UserHandle(userid))) - { - mServicesBinding.remove(servicesBindingTag); - Slog.w(TAG, "Unable to bind listener service: " + intent); - return; - } - } catch (SecurityException ex) { - Slog.e(TAG, "Unable to bind listener service: " + intent, ex); - return; - } - } - } - - - /** - * Remove a listener service for the given user by ComponentName - */ - private void unregisterListenerService(ComponentName name, int userid) { - checkCallerIsSystem(); - - synchronized (mNotificationList) { - final int N = mListeners.size(); - for (int i=N-1; i>=0; i--) { - final NotificationListenerInfo info = mListeners.get(i); - if (name.equals(info.component) - && info.userid == userid) { - mListeners.remove(i); - if (info.connection != null) { - try { - getContext().unbindService(info.connection); - } catch (IllegalArgumentException ex) { - // something happened to the service: we think we have a connection - // but it's bogus. - Slog.e(TAG, "Listener " + name + " could not be unbound: " + ex); - } - } - } - } - } - } - - /** - * asynchronously notify all listeners about a new notification - */ - void notifyPostedLocked(NotificationRecord n) { - // make a copy in case changes are made to the underlying Notification object - final StatusBarNotification sbn = n.sbn.clone(); - for (final NotificationListenerInfo info : mListeners) { - mHandler.post(new Runnable() { - @Override - public void run() { - info.notifyPostedIfUserMatch(sbn); - }}); - } - } - - /** - * asynchronously notify all listeners about a removed notification - */ - void notifyRemovedLocked(NotificationRecord n) { - // make a copy in case changes are made to the underlying Notification object - // NOTE: this copy is lightweight: it doesn't include heavyweight parts of the notification - final StatusBarNotification sbn_light = n.sbn.cloneLight(); - - for (final NotificationListenerInfo info : mListeners) { - mHandler.post(new Runnable() { - @Override - public void run() { - info.notifyRemovedIfUserMatch(sbn_light); - }}); - } - } - - // -- APIs to support listeners clicking/clearing notifications -- - - private void checkNullListener(INotificationListener listener) { - if (listener == null) { - throw new IllegalArgumentException("Listener must not be null"); - } - } - - private NotificationListenerInfo checkListenerTokenLocked(INotificationListener listener) { - checkNullListener(listener); - final IBinder token = listener.asBinder(); - final int N = mListeners.size(); - for (int i=0; i<N; i++) { - final NotificationListenerInfo info = mListeners.get(i); - if (info.listener.asBinder() == token) return info; - } - throw new SecurityException("Disallowed call from unknown listener: " + listener); - } - - - - // -- end of listener APIs -- public static final class NotificationRecord { @@ -1159,28 +736,15 @@ public class NotificationManagerService extends SystemService { pkgList = new String[]{pkgName}; } - boolean anyListenersInvolved = false; if (pkgList != null && (pkgList.length > 0)) { for (String pkgName : pkgList) { if (cancelNotifications) { cancelAllNotificationsInt(MY_UID, MY_PID, pkgName, 0, 0, !queryRestart, UserHandle.USER_ALL, REASON_PACKAGE_CHANGED, null); } - if (mEnabledListenerPackageNames.contains(pkgName)) { - anyListenersInvolved = true; - } - } - } - - if (anyListenersInvolved) { - // if we're not replacing a package, clean up orphaned bits - if (!queryReplace) { - disableNonexistentListeners(); } - // make sure we're still bound to any of our - // listeners who may have just upgraded - rebindListenerServices(); } + mListeners.onPackagesChanged(queryReplace, pkgList); } else if (action.equals(Intent.ACTION_SCREEN_ON)) { // Keep track of screen on/off state, but do not turn off the notification light // until user passes through the lock screen or views the notification. @@ -1203,9 +767,9 @@ public class NotificationManagerService extends SystemService { } else if (action.equals(Intent.ACTION_USER_SWITCHED)) { // reload per-user settings mSettingsObserver.update(null); - updateCurrentProfilesCache(context); + mUserProfiles.updateCache(context); } else if (action.equals(Intent.ACTION_USER_ADDED)) { - updateCurrentProfilesCache(context); + mUserProfiles.updateCache(context); } } }; @@ -1214,9 +778,6 @@ public class NotificationManagerService extends SystemService { private final Uri NOTIFICATION_LIGHT_PULSE_URI = Settings.System.getUriFor(Settings.System.NOTIFICATION_LIGHT_PULSE); - private final Uri ENABLED_NOTIFICATION_LISTENERS_URI - = Settings.Secure.getUriFor(Settings.Secure.ENABLED_NOTIFICATION_LISTENERS); - SettingsObserver(Handler handler) { super(handler); } @@ -1225,8 +786,6 @@ public class NotificationManagerService extends SystemService { ContentResolver resolver = getContext().getContentResolver(); resolver.registerContentObserver(NOTIFICATION_LIGHT_PULSE_URI, false, this, UserHandle.USER_ALL); - resolver.registerContentObserver(ENABLED_NOTIFICATION_LISTENERS_URI, - false, this, UserHandle.USER_ALL); update(null); } @@ -1244,9 +803,6 @@ public class NotificationManagerService extends SystemService { updateNotificationPulse(); } } - if (uri == null || ENABLED_NOTIFICATION_LISTENERS_URI.equals(uri)) { - rebindListenerServices(); - } } } @@ -1289,6 +845,18 @@ public class NotificationManagerService extends SystemService { importOldBlockDb(); + mListeners = new NotificationListeners(getContext(), + mHandler, mNotificationList, mUserProfiles) { + @Override + public void onServiceAdded(INotificationListener listener) { + final String[] keys = getActiveNotificationKeysFromListener(listener); + try { + listener.onListenerConnected(keys); + } catch (RemoteException e) { + // we tried + } + } + }; mStatusBar = getLocalService(StatusBarManagerInternal.class); mStatusBar.setNotificationDelegate(mNotificationDelegate); @@ -1324,7 +892,7 @@ public class NotificationManagerService extends SystemService { } mZenModeHelper.updateZenMode(); - updateCurrentProfilesCache(getContext()); + mUserProfiles.updateCache(getContext()); // register for various Intents IntentFilter filter = new IntentFilter(); @@ -1403,6 +971,7 @@ public class NotificationManagerService extends SystemService { // This observer will force an update when observe is called, causing us to // bind to listener services. mSettingsObserver.observe(); + mListeners.onBootPhaseAppsCanStart(); } } @@ -1436,7 +1005,8 @@ public class NotificationManagerService extends SystemService { return ; } - final boolean isSystemToast = isCallerSystem() || ("android".equals(pkg)); + final boolean isSystemToast = + NotificationUtil.isCallerSystem() || ("android".equals(pkg)); if (ENABLE_BLOCKED_TOASTS && !noteNotificationOp(pkg, Binder.getCallingUid())) { if (!isSystemToast) { @@ -1527,7 +1097,7 @@ public class NotificationManagerService extends SystemService { @Override public void cancelNotificationWithTag(String pkg, String tag, int id, int userId) { - checkCallerIsSystemOrSameApp(pkg); + NotificationUtil.checkCallerIsSystemOrSameApp(pkg); userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, true, false, "cancelNotificationWithTag", pkg); // Don't allow client applications to cancel foreground service notis. @@ -1539,7 +1109,7 @@ public class NotificationManagerService extends SystemService { @Override public void cancelAllNotifications(String pkg, int userId) { - checkCallerIsSystemOrSameApp(pkg); + NotificationUtil.checkCallerIsSystemOrSameApp(pkg); userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, true, false, "cancelAllNotifications", pkg); @@ -1553,7 +1123,7 @@ public class NotificationManagerService extends SystemService { @Override public void setNotificationsEnabledForPackage(String pkg, int uid, boolean enabled) { - checkCallerIsSystem(); + NotificationUtil.checkCallerIsSystem(); setNotificationsEnabledForPackageImpl(pkg, uid, enabled); } @@ -1563,7 +1133,7 @@ public class NotificationManagerService extends SystemService { */ @Override public boolean areNotificationsEnabledForPackage(String pkg, int uid) { - checkCallerIsSystem(); + NotificationUtil.checkCallerIsSystem(); return (mAppOps.checkOpNoThrow(AppOpsManager.OP_POST_NOTIFICATION, uid, pkg) == AppOpsManager.MODE_ALLOWED); } @@ -1631,9 +1201,8 @@ public class NotificationManagerService extends SystemService { @Override public void registerListener(final INotificationListener listener, final ComponentName component, final int userid) { - checkCallerIsSystem(); - checkNullListener(listener); - registerListenerImpl(listener, component, userid); + NotificationUtil.checkCallerIsSystem(); + mListeners.registerListener(listener, component, userid); } /** @@ -1641,10 +1210,7 @@ public class NotificationManagerService extends SystemService { */ @Override public void unregisterListener(INotificationListener listener, int userid) { - checkNullListener(listener); - // no need to check permissions; if your listener binder is in the list, - // that's proof that you had permission to add it in the first place - unregisterListenerImpl(listener, userid); + mListeners.unregisterListener(listener, userid); } /** @@ -1661,14 +1227,15 @@ public class NotificationManagerService extends SystemService { long identity = Binder.clearCallingIdentity(); try { synchronized (mNotificationList) { - final NotificationListenerInfo info = checkListenerTokenLocked(token); + final NotificationListenerInfo info = + mListeners.checkListenerTokenLocked(token); if (keys != null) { final int N = keys.length; for (int i = 0; i < N; i++) { NotificationRecord r = mNotificationsByKey.get(keys[i]); final int userId = r.sbn.getUserId(); if (userId != info.userid && userId != UserHandle.USER_ALL && - !isCurrentProfile(userId)) { + !mUserProfiles.isCurrentProfile(userId)) { throw new SecurityException("Disallowed call from listener: " + info.listener); } @@ -1711,7 +1278,8 @@ public class NotificationManagerService extends SystemService { long identity = Binder.clearCallingIdentity(); try { synchronized (mNotificationList) { - final NotificationListenerInfo info = checkListenerTokenLocked(token); + final NotificationListenerInfo info = + mListeners.checkListenerTokenLocked(token); if (info.supportsProfiles()) { Log.e(TAG, "Ignoring deprecated cancelNotification(pkg, tag, id) " + "from " + info.component @@ -1737,7 +1305,7 @@ public class NotificationManagerService extends SystemService { public StatusBarNotification[] getActiveNotificationsFromListener( INotificationListener token, String[] keys) { synchronized (mNotificationList) { - final NotificationListenerInfo info = checkListenerTokenLocked(token); + final NotificationListenerInfo info = mListeners.checkListenerTokenLocked(token); final ArrayList<StatusBarNotification> list = new ArrayList<StatusBarNotification>(); if (keys == null) { @@ -1768,13 +1336,13 @@ public class NotificationManagerService extends SystemService { @Override public ZenModeConfig getZenModeConfig() { - checkCallerIsSystem(); + NotificationUtil.checkCallerIsSystem(); return mZenModeHelper.getConfig(); } @Override public boolean setZenModeConfig(ZenModeConfig config) { - checkCallerIsSystem(); + NotificationUtil.checkCallerIsSystem(); return mZenModeHelper.setConfig(config); } @@ -1794,7 +1362,7 @@ public class NotificationManagerService extends SystemService { private String[] getActiveNotificationKeysFromListener(INotificationListener token) { synchronized (mNotificationList) { - final NotificationListenerInfo info = checkListenerTokenLocked(token); + final NotificationListenerInfo info = mListeners.checkListenerTokenLocked(token); final ArrayList<String> keys = new ArrayList<String>(); final int N = mNotificationList.size(); for (int i=0; i<N; i++) { @@ -1810,18 +1378,7 @@ public class NotificationManagerService extends SystemService { void dumpImpl(PrintWriter pw) { pw.println("Current Notification Manager state:"); - pw.println(" Listeners (" + mEnabledListenersForCurrentProfiles.size() - + ") enabled for current profiles:"); - for (ComponentName cmpt : mEnabledListenersForCurrentProfiles) { - pw.println(" " + cmpt); - } - - pw.println(" Live listeners (" + mListeners.size() + "):"); - for (NotificationListenerInfo info : mListeners) { - pw.println(" " + info.component - + " (user " + info.userid + "): " + info.listener - + (info.isSystem?" SYSTEM":"")); - } + mListeners.dump(pw); int N; @@ -1898,8 +1455,9 @@ public class NotificationManagerService extends SystemService { Slog.v(TAG, "enqueueNotificationInternal: pkg=" + pkg + " id=" + id + " notification=" + notification); } - checkCallerIsSystemOrSameApp(pkg); - final boolean isSystemNotification = isUidSystem(callingUid) || ("android".equals(pkg)); + NotificationUtil.checkCallerIsSystemOrSameApp(pkg); + final boolean isSystemNotification = + NotificationUtil.isUidSystem(callingUid) || ("android".equals(pkg)); final int userId = ActivityManager.handleIncomingUser(callingPid, callingUid, incomingUserId, true, false, "enqueueNotification", pkg); @@ -2081,7 +1639,7 @@ public class NotificationManagerService extends SystemService { sendAccessibilityEvent(notification, pkg); } - notifyPostedLocked(r); + mListeners.notifyPostedLocked(r.sbn); } else { Slog.e(TAG, "Not posting notification with icon==0: " + notification); if (old != null && old.statusBarKey != null) { @@ -2092,7 +1650,7 @@ public class NotificationManagerService extends SystemService { Binder.restoreCallingIdentity(identity); } - notifyRemovedLocked(r); + mListeners.notifyRemovedLocked(r.sbn); } // ATTENTION: in a future release we will bail out here // so that we do not play sounds, show lights, etc. for invalid @@ -2107,7 +1665,7 @@ public class NotificationManagerService extends SystemService { && (notification.flags & Notification.FLAG_ONLY_ALERT_ONCE) != 0 )) && (r.getUserId() == UserHandle.USER_ALL || (r.getUserId() == userId && r.getUserId() == currentUser) || - isCurrentProfile(r.getUserId())) + mUserProfiles.isCurrentProfile(r.getUserId())) && canInterrupt && mSystemReady && mAudioManager != null) { @@ -2238,52 +1796,6 @@ public class NotificationManagerService extends SystemService { idOut[0] = id; } - void registerListenerImpl(final INotificationListener listener, - final ComponentName component, final int userid) { - synchronized (mNotificationList) { - try { - NotificationListenerInfo info - = new NotificationListenerInfo(listener, component, userid, - /*isSystem*/ true, Build.VERSION_CODES.L); - listener.asBinder().linkToDeath(info, 0); - mListeners.add(info); - } catch (RemoteException e) { - // already dead - } - } - } - - /** - * Removes a listener from the list and unbinds from its service. - */ - void unregisterListenerImpl(final INotificationListener listener, final int userid) { - NotificationListenerInfo info = removeListenerImpl(listener, userid); - if (info != null && info.connection != null) { - getContext().unbindService(info.connection); - } - } - - /** - * Removes a listener from the list but does not unbind from the listener's service. - * - * @return the removed listener. - */ - NotificationListenerInfo removeListenerImpl( - final INotificationListener listener, final int userid) { - NotificationListenerInfo listenerInfo = null; - synchronized (mNotificationList) { - final int N = mListeners.size(); - for (int i=N-1; i>=0; i--) { - final NotificationListenerInfo info = mListeners.get(i); - if (info.listener.asBinder() == listener.asBinder() - && info.userid == userid) { - listenerInfo = mListeners.remove(i); - } - } - } - return listenerInfo; - } - void showNextToastLocked() { ToastRecord record = mToastQueue.get(0); while (record != null) { @@ -2449,7 +1961,7 @@ public class NotificationManagerService extends SystemService { Binder.restoreCallingIdentity(identity); } r.statusBarKey = null; - notifyRemovedLocked(r); + mListeners.notifyRemovedLocked(r.sbn); } // sound @@ -2578,7 +2090,7 @@ public class NotificationManagerService extends SystemService { */ private boolean notificationMatchesCurrentProfiles(NotificationRecord r, int userId) { return notificationMatchesUserId(r, userId) - || isCurrentProfile(r.getUserId()); + || mUserProfiles.isCurrentProfile(r.getUserId()); } /** @@ -2628,44 +2140,6 @@ public class NotificationManagerService extends SystemService { } } - - - // Return true if the UID is a system or phone UID and therefore should not have - // any notifications or toasts blocked. - boolean isUidSystem(int uid) { - final int appid = UserHandle.getAppId(uid); - return (appid == Process.SYSTEM_UID || appid == Process.PHONE_UID || uid == 0); - } - - // same as isUidSystem(int, int) for the Binder caller's UID. - boolean isCallerSystem() { - return isUidSystem(Binder.getCallingUid()); - } - - void checkCallerIsSystem() { - if (isCallerSystem()) { - return; - } - throw new SecurityException("Disallowed call for uid " + Binder.getCallingUid()); - } - - void checkCallerIsSystemOrSameApp(String pkg) { - if (isCallerSystem()) { - return; - } - final int uid = Binder.getCallingUid(); - try { - ApplicationInfo ai = AppGlobals.getPackageManager().getApplicationInfo( - pkg, 0, UserHandle.getCallingUserId()); - if (!UserHandle.isSameApp(ai.uid, uid)) { - throw new SecurityException("Calling uid " + uid + " gave package" - + pkg + " which is owned by uid " + ai.uid); - } - } catch (RemoteException re) { - throw new SecurityException("Unknown package " + pkg + "\n" + re); - } - } - void cancelAllLocked(int callingUid, int callingPid, int userId, int reason, NotificationListenerInfo listener, boolean includeCurrentProfiles) { EventLogTags.writeNotificationCancelAll(callingUid, callingPid, @@ -2760,34 +2234,39 @@ public class NotificationManagerService extends SystemService { } } - private void updateCurrentProfilesCache(Context context) { - UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE); - if (userManager != null) { - int currentUserId = ActivityManager.getCurrentUser(); - List<UserInfo> profiles = userManager.getProfiles(currentUserId); - synchronized (mCurrentProfiles) { - mCurrentProfiles.clear(); - for (UserInfo user : profiles) { - mCurrentProfiles.put(user.id, user); + public static class UserProfiles { + // Profiles of the current user. + private final SparseArray<UserInfo> mCurrentProfiles = new SparseArray<UserInfo>(); + + private void updateCache(Context context) { + UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE); + if (userManager != null) { + int currentUserId = ActivityManager.getCurrentUser(); + List<UserInfo> profiles = userManager.getProfiles(currentUserId); + synchronized (mCurrentProfiles) { + mCurrentProfiles.clear(); + for (UserInfo user : profiles) { + mCurrentProfiles.put(user.id, user); + } } } } - } - private int[] getCurrentProfileIds() { - synchronized (mCurrentProfiles) { - int[] users = new int[mCurrentProfiles.size()]; - final int N = mCurrentProfiles.size(); - for (int i = 0; i < N; ++i) { - users[i] = mCurrentProfiles.keyAt(i); + public int[] getCurrentProfileIds() { + synchronized (mCurrentProfiles) { + int[] users = new int[mCurrentProfiles.size()]; + final int N = mCurrentProfiles.size(); + for (int i = 0; i < N; ++i) { + users[i] = mCurrentProfiles.keyAt(i); + } + return users; } - return users; } - } - private boolean isCurrentProfile(int userId) { - synchronized (mCurrentProfiles) { - return mCurrentProfiles.get(userId) != null; + public boolean isCurrentProfile(int userId) { + synchronized (mCurrentProfiles) { + return mCurrentProfiles.get(userId) != null; + } } } } diff --git a/services/core/java/com/android/server/notification/NotificationUtil.java b/services/core/java/com/android/server/notification/NotificationUtil.java new file mode 100644 index 0000000..459adce --- /dev/null +++ b/services/core/java/com/android/server/notification/NotificationUtil.java @@ -0,0 +1,63 @@ +/** + * Copyright (c) 2014, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.notification; + +import android.app.AppGlobals; +import android.content.pm.ApplicationInfo; +import android.os.Binder; +import android.os.Process; +import android.os.RemoteException; +import android.os.UserHandle; + +public class NotificationUtil { + + // Return true if the UID is a system or phone UID and therefore should not have + // any notifications or toasts blocked. + public static boolean isUidSystem(int uid) { + final int appid = UserHandle.getAppId(uid); + return (appid == Process.SYSTEM_UID || appid == Process.PHONE_UID || uid == 0); + } + + // same as isUidSystem(int, int) for the Binder caller's UID. + public static boolean isCallerSystem() { + return isUidSystem(Binder.getCallingUid()); + } + + public static void checkCallerIsSystem() { + if (isCallerSystem()) { + return; + } + throw new SecurityException("Disallowed call for uid " + Binder.getCallingUid()); + } + + public static void checkCallerIsSystemOrSameApp(String pkg) { + if (isCallerSystem()) { + return; + } + final int uid = Binder.getCallingUid(); + try { + ApplicationInfo ai = AppGlobals.getPackageManager().getApplicationInfo( + pkg, 0, UserHandle.getCallingUserId()); + if (!UserHandle.isSameApp(ai.uid, uid)) { + throw new SecurityException("Calling uid " + uid + " gave package" + + pkg + " which is owned by uid " + ai.uid); + } + } catch (RemoteException re) { + throw new SecurityException("Unknown package " + pkg + "\n" + re); + } + } +} diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java index 27c7b39..6030d4d 100644 --- a/services/core/java/com/android/server/pm/LauncherAppsService.java +++ b/services/core/java/com/android/server/pm/LauncherAppsService.java @@ -144,6 +144,7 @@ public class LauncherAppsService extends ILauncherApps.Stub { final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); + mainIntent.setPackage(packageName); long ident = Binder.clearCallingIdentity(); try { List<ResolveInfo> apps = mPm.queryIntentActivitiesAsUser(mainIntent, 0, diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 53db9ef..210e151 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -24,6 +24,7 @@ import android.app.ActivityManagerNative; import android.app.ActivityThread; import android.app.admin.DevicePolicyManager; import android.app.IStopUserCallback; +import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -258,11 +259,20 @@ public class UserManagerService extends IUserManager.Stub { } @Override - public List<UserInfo> getProfiles(int userId) { + public List<UserInfo> getProfiles(int userId, boolean enabledOnly) { if (userId != UserHandle.getCallingUserId()) { checkManageUsersPermission("getting profiles related to user " + userId); } synchronized (mPackagesLock) { + // Getting the service here is not good for testing purposes. However, this service + // is not available when UserManagerService starts up so we need a lazy load. + + DevicePolicyManager dpm = null; + if (enabledOnly) { + dpm = (DevicePolicyManager) + mContext.getSystemService(Context.DEVICE_POLICY_SERVICE); + } + UserInfo user = getUserInfoLocked(userId); ArrayList<UserInfo> users = new ArrayList<UserInfo>(mUsers.size()); for (int i = 0; i < mUsers.size(); i++) { @@ -270,6 +280,23 @@ public class UserManagerService extends IUserManager.Stub { if (!isProfileOf(user, profile)) { continue; } + + if (enabledOnly && profile.isManagedProfile()) { + if (dpm != null) { + if(!dpm.isProfileEnabled(profile.id)) { + continue; + } + } else { + Log.w(LOG_TAG, + "Attempting to reach DevicePolicyManager before it was started"); + // TODO: There might be system apps that need to call this. Make sure that + // DevicePolicyManagerService is ready at that time (otherwise, any default + // value is a bad one). + throw new IllegalArgumentException(String.format( + "Attempting to get enabled profiles for %d before " + + "DevicePolicyManagerService has been started.", userId)); + } + } users.add(profile); } return users; diff --git a/services/core/java/com/android/server/wm/CircularDisplayMask.java b/services/core/java/com/android/server/wm/CircularDisplayMask.java index fbfca93..35d19c1 100644 --- a/services/core/java/com/android/server/wm/CircularDisplayMask.java +++ b/services/core/java/com/android/server/wm/CircularDisplayMask.java @@ -22,7 +22,6 @@ import android.graphics.Color; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; -import android.util.Log; import android.view.Display; import android.view.Surface; import android.view.Surface.OutOfResourcesException; @@ -40,6 +39,7 @@ class CircularDisplayMask { private int mLastDH; private boolean mDrawNeeded; private Paint mPaint; + private int mRotation; public CircularDisplayMask(Display display, SurfaceSession session, int zOrder) { SurfaceControl ctrl = null; @@ -78,7 +78,26 @@ class CircularDisplayMask { if (c == null) { return; } - c.drawCircle(160, 160, 160, mPaint); + int cx = 160; + int cy = 160; + switch (mRotation) { + case Surface.ROTATION_0: + case Surface.ROTATION_90: + // chin bottom or right + cx = 160; + cy = 160; + break; + case Surface.ROTATION_180: + // chin top + cx = 160; + cy = 145; + break; + case Surface.ROTATION_270: + cx = 145; + cy = 160; + break; + } + c.drawCircle(cx, cy, 160, mPaint); mSurface.unlockCanvasAndPost(c); } @@ -97,7 +116,7 @@ class CircularDisplayMask { } } - void positionSurface(int dw, int dh) { + void positionSurface(int dw, int dh, int rotation) { if (mLastDW == dw && mLastDH == dh) { return; } @@ -105,6 +124,7 @@ class CircularDisplayMask { mLastDH = dh; mSurfaceControl.setSize(dw, dh); mDrawNeeded = true; + mRotation = rotation; } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 524d78b..b56377c 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -287,8 +287,6 @@ public class WindowManagerService extends IWindowManager.Stub private static final String DENSITY_OVERRIDE = "ro.config.density_override"; private static final String SIZE_OVERRIDE = "ro.config.size_override"; - private static final String SCREEN_CIRCULAR = "ro.display.circular"; - private static final int MAX_SCREENSHOT_RETRIES = 3; final private KeyguardDisableHandler mKeyguardDisableHandler; @@ -5489,7 +5487,9 @@ public class WindowManagerService extends IWindowManager.Stub } public void showCircularDisplayMaskIfNeeded() { - if (SystemProperties.getBoolean(SCREEN_CIRCULAR, false)) { + // we're fullscreen and not hosted in an ActivityView + if (mContext.getResources().getBoolean( + com.android.internal.R.bool.config_windowIsRound)) { mH.sendMessage(mH.obtainMessage(H.SHOW_DISPLAY_MASK)); } } @@ -9001,7 +9001,7 @@ public class WindowManagerService extends IWindowManager.Stub mStrictModeFlash.positionSurface(defaultDw, defaultDh); } if (mCircularDisplayMask != null) { - mCircularDisplayMask.positionSurface(defaultDw, defaultDh); + mCircularDisplayMask.positionSurface(defaultDw, defaultDh, mRotation); } boolean focusDisplayed = false; diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java b/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java index 1b048a1..629dea2 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java @@ -53,6 +53,7 @@ public class DeviceOwner { private static final String ATTR_NAME = "name"; private static final String ATTR_PACKAGE = "package"; private static final String ATTR_USERID = "userId"; + private static final String ATTR_ENABLED = "profileEnabled"; private AtomicFile fileForWriting; @@ -61,11 +62,10 @@ public class DeviceOwner { private OutputStream mOutputStreamForTest; // Internal state for the device owner package. - private String mDeviceOwnerPackageName; - private String mDeviceOwnerName; + private OwnerInfo mDeviceOwner; // Internal state for the profile owner packages. - private final HashMap<Integer, String[]> mProfileOwners = new HashMap<Integer, String[]>(); + private final HashMap<Integer, OwnerInfo> mProfileOwners = new HashMap<Integer, OwnerInfo>(); // Private default constructor. private DeviceOwner() { @@ -95,8 +95,7 @@ public class DeviceOwner { */ static DeviceOwner createWithDeviceOwner(String packageName, String ownerName) { DeviceOwner owner = new DeviceOwner(); - owner.mDeviceOwnerPackageName = packageName; - owner.mDeviceOwnerName = ownerName; + owner.mDeviceOwner = new OwnerInfo(ownerName, packageName); return owner; } @@ -105,25 +104,25 @@ public class DeviceOwner { */ static DeviceOwner createWithProfileOwner(String packageName, String ownerName, int userId) { DeviceOwner owner = new DeviceOwner(); - owner.mProfileOwners.put(userId, new String[] { packageName, ownerName }); + owner.mProfileOwners.put( + userId, new OwnerInfo(ownerName, packageName, false /* disabled */)); return owner; } String getDeviceOwnerPackageName() { - return mDeviceOwnerPackageName; + return mDeviceOwner != null ? mDeviceOwner.packageName : null; } String getDeviceOwnerName() { - return mDeviceOwnerName; + return mDeviceOwner != null ? mDeviceOwner.name : null; } void setDeviceOwner(String packageName, String ownerName) { - mDeviceOwnerPackageName = packageName; - mDeviceOwnerName = ownerName; + mDeviceOwner = new OwnerInfo(ownerName, packageName); } void setProfileOwner(String packageName, String ownerName, int userId) { - mProfileOwners.put(userId, new String[] { packageName, ownerName }); + mProfileOwners.put(userId, new OwnerInfo(ownerName, packageName, false /* disabled */)); } void removeProfileOwner(int userId) { @@ -131,17 +130,30 @@ public class DeviceOwner { } String getProfileOwnerPackageName(int userId) { - String[] profileOwner = mProfileOwners.get(userId); - return profileOwner != null ? profileOwner[0] : null; + OwnerInfo profileOwner = mProfileOwners.get(userId); + return profileOwner != null ? profileOwner.packageName : null; } String getProfileOwnerName(int userId) { - String[] profileOwner = mProfileOwners.get(userId); - return profileOwner != null ? profileOwner[1] : null; + OwnerInfo profileOwner = mProfileOwners.get(userId); + return profileOwner != null ? profileOwner.name : null; + } + + boolean isProfileEnabled(int userId) { + OwnerInfo profileOwner = mProfileOwners.get(userId); + return profileOwner != null ? profileOwner.enabled : true; + } + + void setProfileEnabled(int userId) { + OwnerInfo profileOwner = mProfileOwners.get(userId); + if (profileOwner == null) { + throw new IllegalArgumentException("No profile owner exists."); + } + profileOwner.enabled = true; } boolean hasDeviceOwner() { - return mDeviceOwnerPackageName != null; + return mDeviceOwner != null; } static boolean isInstalled(String packageName, PackageManager pm) { @@ -185,14 +197,18 @@ public class DeviceOwner { String tag = parser.getName(); if (tag.equals(TAG_DEVICE_OWNER)) { - mDeviceOwnerPackageName = parser.getAttributeValue(null, ATTR_PACKAGE); - mDeviceOwnerName = parser.getAttributeValue(null, ATTR_NAME); + mDeviceOwner = new OwnerInfo( + parser.getAttributeValue(null, ATTR_NAME), + parser.getAttributeValue(null, ATTR_PACKAGE)); } else if (tag.equals(TAG_PROFILE_OWNER)) { String profileOwnerPackageName = parser.getAttributeValue(null, ATTR_PACKAGE); String profileOwnerName = parser.getAttributeValue(null, ATTR_NAME); + Boolean profileEnabled = Boolean.parseBoolean( + parser.getAttributeValue(null, ATTR_ENABLED)); int userId = Integer.parseInt(parser.getAttributeValue(null, ATTR_USERID)); mProfileOwners.put(userId, - new String[] { profileOwnerPackageName, profileOwnerName }); + new OwnerInfo( + profileOwnerPackageName, profileOwnerName, profileEnabled)); } else { throw new XmlPullParserException( "Unexpected tag in device owner file: " + tag); @@ -220,21 +236,22 @@ public class DeviceOwner { out.startDocument(null, true); // Write device owner tag - if (mDeviceOwnerPackageName != null) { + if (mDeviceOwner != null) { out.startTag(null, TAG_DEVICE_OWNER); - out.attribute(null, ATTR_PACKAGE, mDeviceOwnerPackageName); - if (mDeviceOwnerName != null) { - out.attribute(null, ATTR_NAME, mDeviceOwnerName); + out.attribute(null, ATTR_PACKAGE, mDeviceOwner.packageName); + if (mDeviceOwner.packageName != null) { + out.attribute(null, ATTR_NAME, mDeviceOwner.packageName); } out.endTag(null, TAG_DEVICE_OWNER); } // Write profile owner tags if (mProfileOwners.size() > 0) { - for (HashMap.Entry<Integer, String[]> owner : mProfileOwners.entrySet()) { + for (HashMap.Entry<Integer, OwnerInfo> owner : mProfileOwners.entrySet()) { out.startTag(null, TAG_PROFILE_OWNER); - out.attribute(null, ATTR_PACKAGE, owner.getValue()[0]); - out.attribute(null, ATTR_NAME, owner.getValue()[1]); + out.attribute(null, ATTR_PACKAGE, owner.getValue().packageName); + out.attribute(null, ATTR_NAME, owner.getValue().name); + out.attribute(null, ATTR_ENABLED, String.valueOf(owner.getValue().enabled)); out.attribute(null, ATTR_USERID, Integer.toString(owner.getKey())); out.endTag(null, TAG_PROFILE_OWNER); } @@ -271,4 +288,20 @@ public class DeviceOwner { fileForWriting.finishWrite((FileOutputStream) stream); } } + + static class OwnerInfo { + public String name; + public String packageName; + public boolean enabled = true; // only makes sense for managed profiles + + public OwnerInfo(String name, String packageName, boolean enabled) { + this(name, packageName); + this.enabled = enabled; + } + + public OwnerInfo(String name, String packageName) { + this.name = name; + this.packageName = packageName; + } + } }
\ No newline at end of file diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index d6f9dea..b82a126 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -2828,7 +2828,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { return null; } synchronized (this) { - if (mDeviceOwner != null) { + if (mDeviceOwner != null && mDeviceOwner.hasDeviceOwner()) { return mDeviceOwner.getDeviceOwnerPackageName(); } } @@ -2900,9 +2900,13 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } // Check if this is the profile owner who is calling getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER); - Slog.d(LOG_TAG, "Enabling the profile for: " + UserHandle.getCallingUserId()); - long id = Binder.clearCallingIdentity(); + int userId = UserHandle.getCallingUserId(); + Slog.d(LOG_TAG, "Enabling the profile for: " + userId); + mDeviceOwner.setProfileEnabled(userId); + mDeviceOwner.writeOwnerFile(); + + long id = Binder.clearCallingIdentity(); try { Intent intent = new Intent(Intent.ACTION_MANAGED_PROFILE_ADDED); intent.putExtra(Intent.EXTRA_USER, new UserHandle(UserHandle.getCallingUserId())); @@ -2944,6 +2948,23 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { return null; } + @Override + public boolean isProfileEnabled(int userHandle) { + if (!mHasFeature) { + // If device policy management is not enabled, then the userHandle cannot belong to a + // managed profile. All other profiles are considered enabled. + return true; + } + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null); + + synchronized (this) { + if (mDeviceOwner != null) { + return mDeviceOwner.isProfileEnabled(userHandle); + } + } + return true; + } + private boolean isDeviceProvisioned() { return Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0) > 0; diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml index 0ad3456..ac741e7 100644 --- a/tests/HwAccelerationTest/AndroidManifest.xml +++ b/tests/HwAccelerationTest/AndroidManifest.xml @@ -867,5 +867,16 @@ </intent-filter> </activity> + <activity + android:name=".ProjectionClippingActivity" + android:label="Reordering/Projection Clipping"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="com.android.test.hwui.TEST" /> + + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> </application> </manifest> diff --git a/tests/HwAccelerationTest/res/drawable/round_rect_background.xml b/tests/HwAccelerationTest/res/drawable/round_rect_background.xml new file mode 100644 index 0000000..14d4073 --- /dev/null +++ b/tests/HwAccelerationTest/res/drawable/round_rect_background.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape + xmlns:android="http://schemas.android.com/apk/res/android" > + <solid android:color="#eee" /> + <corners android:radius="30dp" /> +</shape>
\ No newline at end of file diff --git a/tests/HwAccelerationTest/res/layout/projection_clipping.xml b/tests/HwAccelerationTest/res/layout/projection_clipping.xml new file mode 100644 index 0000000..7caf90a --- /dev/null +++ b/tests/HwAccelerationTest/res/layout/projection_clipping.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <FrameLayout + android:translationX="50dp" + android:translationY="50dp" + android:translationZ="30dp" + android:layout_width="200dp" + android:layout_height="200dp" + android:background="@drawable/round_rect_background"> + <View + android:id="@+id/clickable1" + android:layout_width="100dp" + android:layout_height="100dp" + android:background="?android:attr/selectableItemBackground"/> + <View + android:id="@+id/clickable2" + android:translationX="50dp" + android:translationY="10dp" + android:layout_width="150dp" + android:layout_height="100dp" + android:background="?android:attr/selectableItemBackground"/> + </FrameLayout> +</LinearLayout>
\ No newline at end of file diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionClippingActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionClippingActivity.java new file mode 100644 index 0000000..2ae960b --- /dev/null +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionClippingActivity.java @@ -0,0 +1,27 @@ +package com.android.test.hwui; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; +import android.os.Bundle; +import android.util.AttributeSet; +import android.view.RenderNode; +import android.view.View; + +public class ProjectionClippingActivity extends Activity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.projection_clipping); + View.OnClickListener listener = new View.OnClickListener() { + @Override + public void onClick(View v) { + // woo! nothing! + } + }; + findViewById(R.id.clickable1).setOnClickListener(listener); + findViewById(R.id.clickable2).setOnClickListener(listener); + } +} diff --git a/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java b/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java index 22232f3..0dddf3d 100644 --- a/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java +++ b/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java @@ -23,7 +23,6 @@ import com.android.internal.view.menu.BridgeMenuItemImpl; import com.android.internal.view.menu.MenuView; import com.android.layoutlib.bridge.Bridge; import com.android.layoutlib.bridge.android.BridgeContext; -import com.android.layoutlib.bridge.android.BridgeXmlBlockParser; import com.android.tools.layoutlib.annotations.LayoutlibDelegate; import android.util.AttributeSet; @@ -45,7 +44,7 @@ import android.util.AttributeSet; public class MenuInflater_Delegate { @LayoutlibDelegate - /*package*/ static void emptyMethod(MenuInflater thisInflater, MenuItem menuItem, + /*package*/ static void registerMenu(MenuInflater thisInflater, MenuItem menuItem, AttributeSet attrs) { if (menuItem instanceof BridgeMenuItemImpl) { Context context = thisInflater.getContext(); @@ -67,9 +66,9 @@ public class MenuInflater_Delegate { } @LayoutlibDelegate - /*package*/ static void emptyMethod(MenuInflater thisInflater, SubMenu subMenu, + /*package*/ static void registerMenu(MenuInflater thisInflater, SubMenu subMenu, AttributeSet parser) { - emptyMethod(thisInflater, subMenu.getItem(), parser); + registerMenu(thisInflater, subMenu.getItem(), parser); } } diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java index 986b911..813a895 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java @@ -143,7 +143,7 @@ public final class CreateInfo implements ICreateInfo { "android.view.ViewRootImpl#isInTouchMode", "android.view.WindowManagerGlobal#getWindowManagerService", "android.view.inputmethod.InputMethodManager#getInstance", - "android.view.MenuInflater#emptyMethod", + "android.view.MenuInflater#registerMenu", "com.android.internal.view.menu.MenuBuilder#createNewMenuItem", "com.android.internal.util.XmlUtils#convertValueToInt", "com.android.internal.textservice.ITextServicesManager$Stub#asInterface", |
