diff options
Diffstat (limited to 'core')
159 files changed, 5891 insertions, 1365 deletions
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java index 04f62e3..3c3df01 100644 --- a/core/java/android/app/ActionBar.java +++ b/core/java/android/app/ActionBar.java @@ -932,6 +932,66 @@ public abstract class ActionBar { */ public void setHomeActionContentDescription(int resId) { } + /** + * Enable hiding the action bar on content scroll. + * + * <p>If enabled, the action bar will scroll out of sight along with a + * {@link View#setNestedScrollingEnabled(boolean) nested scrolling child} view's content. + * The action bar must be in {@link Window#FEATURE_ACTION_BAR_OVERLAY overlay mode} + * to enable hiding on content scroll.</p> + * + * <p>When partially scrolled off screen the action bar is considered + * {@link #hide() hidden}. A call to {@link #show() show} will cause it to return to full view. + * </p> + * @param hideOnContentScroll true to enable hiding on content scroll. + */ + public void setHideOnContentScrollEnabled(boolean hideOnContentScroll) { + if (hideOnContentScroll) { + throw new UnsupportedOperationException("Hide on content scroll is not supported in " + + "this action bar configuration."); + } + } + + /** + * Return whether the action bar is configured to scroll out of sight along with + * a {@link View#setNestedScrollingEnabled(boolean) nested scrolling child}. + * + * @return true if hide-on-content-scroll is enabled + * @see #setHideOnContentScrollEnabled(boolean) + */ + public boolean isHideOnContentScrollEnabled() { + return false; + } + + /** + * Return the current vertical offset of the action bar. + * + * <p>The action bar's current hide offset is the distance that the action bar is currently + * scrolled offscreen in pixels. The valid range is 0 (fully visible) to the action bar's + * current measured {@link #getHeight() height} (fully invisible).</p> + * + * @return The action bar's offset toward its fully hidden state in pixels + */ + public int getHideOffset() { + return 0; + } + + /** + * Set the current hide offset of the action bar. + * + * <p>The action bar's current hide offset is the distance that the action bar is currently + * scrolled offscreen in pixels. The valid range is 0 (fully visible) to the action bar's + * current measured {@link #getHeight() height} (fully invisible).</p> + * + * @param offset The action bar's offset toward its fully hidden state in pixels. + */ + public void setHideOffset(int offset) { + if (offset != 0) { + throw new UnsupportedOperationException("Setting an explicit action bar hide offset " + + "is not supported in this action bar configuration."); + } + } + /** @hide */ public void setDefaultDisplayHomeAsUpEnabled(boolean enabled) { } diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 018e949..9239faf 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -1627,13 +1627,6 @@ public class ActivityManager { public int lastTrimLevel; /** - * Constant for {@link #importance}: this is a persistent process. - * Only used when reporting to process observers. - * @hide - */ - public static final int IMPORTANCE_PERSISTENT = 50; - - /** * Constant for {@link #importance}: this process is running the * foreground UI. */ @@ -1748,9 +1741,16 @@ public class ActivityManager { */ public int importanceReasonImportance; + /** + * Current process state, as per PROCESS_STATE_* constants. + * @hide + */ + public int processState; + public RunningAppProcessInfo() { importance = IMPORTANCE_FOREGROUND; importanceReasonCode = REASON_UNKNOWN; + processState = PROCESS_STATE_IMPORTANT_FOREGROUND; } public RunningAppProcessInfo(String pProcessName, int pPid, String pArr[]) { @@ -1776,6 +1776,7 @@ public class ActivityManager { dest.writeInt(importanceReasonPid); ComponentName.writeToParcel(importanceReasonComponent, dest); dest.writeInt(importanceReasonImportance); + dest.writeInt(processState); } public void readFromParcel(Parcel source) { @@ -1791,6 +1792,7 @@ public class ActivityManager { importanceReasonPid = source.readInt(); importanceReasonComponent = ComponentName.readFromParcel(source); importanceReasonImportance = source.readInt(); + processState = source.readInt(); } public static final Creator<RunningAppProcessInfo> CREATOR = diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index 85464c47..a49359f 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -649,13 +649,31 @@ public class ActivityOptions { /** * Called when the start state for shared elements is captured on enter. + * + * @param sharedElementNames The names of the shared elements that were accepted into + * the View hierarchy. + * @param sharedElements The shared elements that are part of the View hierarchy. + * @param sharedElementSnapshots The Views containing snap shots of the shared element + * from the launching Window. These elements will not + * be part of the scene, but will be positioned relative + * to the Window decor View. */ - public void onCaptureSharedElementStart() {} + public void onCaptureSharedElementStart(List<String> sharedElementNames, + List<View> sharedElements, List<View> sharedElementSnapshots) {} /** * Called when the end state for shared elements is captured on enter. + * + * @param sharedElementNames The names of the shared elements that were accepted into + * the View hierarchy. + * @param sharedElements The shared elements that are part of the View hierarchy. + * @param sharedElementSnapshots The Views containing snap shots of the shared element + * from the launching Window. These elements will not + * be part of the scene, but will be positioned relative + * to the Window decor View. */ - public void onCaptureSharedElementEnd() {} + public void onCaptureSharedElementEnd(List<String> sharedElementNames, + List<View> sharedElements, List<View> sharedElementSnapshots) {} /** * Called when the enter Transition has been started. @@ -700,6 +718,22 @@ public class ActivityOptions { * call. */ public Pair<View, String>[] getSharedElementsMapping() { return null; } + + /** + * Returns <code>true</code> if the ActivityTransitionListener will handle removing + * rejected shared elements from the scene. If <code>false</code> is returned, a default + * animation will be used to remove the rejected shared elements from the scene. + * + * @param rejectedSharedElements Views containing visual information of shared elements + * that are not part of the entering scene. These Views + * are positioned relative to the Window decor View. + * @return <code>false</code> if the default animation should be used to remove the + * rejected shared elements from the scene or <code>true</code> if the listener provides + * custom handling. + */ + public boolean handleRejectedSharedElements(List<View> rejectedSharedElements) { + return false; + } } private static class SharedElementMappingListener extends ActivityTransitionListener { diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java index d8a356f..3c1455b 100644 --- a/core/java/android/app/ActivityTransitionCoordinator.java +++ b/core/java/android/app/ActivityTransitionCoordinator.java @@ -15,6 +15,12 @@ */ package android.app; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ObjectAnimator; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; @@ -26,8 +32,10 @@ import android.util.ArrayMap; import android.util.Pair; import android.view.View; import android.view.ViewGroup; +import android.view.ViewGroupOverlay; import android.view.ViewTreeObserver; import android.view.Window; +import android.widget.ImageView; import java.util.ArrayList; import java.util.Collection; @@ -129,6 +137,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { private static final String KEY_WIDTH = "shared_element:width"; private static final String KEY_HEIGHT = "shared_element:height"; private static final String KEY_NAME = "shared_element:name"; + private static final String KEY_BITMAP = "shared_element:bitmap"; /** * Sent by the exiting coordinator (either EnterTransitionCoordinator @@ -197,6 +206,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { private ResultReceiver mRemoteResultReceiver; private boolean mNotifiedSharedElementTransitionComplete; private boolean mNotifiedExitTransitionComplete; + private boolean mSharedElementTransitionStarted; private FixedEpicenterCallback mEpicenterCallback = new FixedEpicenterCallback(); @@ -241,7 +251,11 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { onPrepareRestore(); break; case MSG_EXIT_TRANSITION_COMPLETE: - onRemoteSceneExitComplete(); + if (!mSharedElementTransitionStarted) { + send(resultCode, resultData); + } else { + onRemoteSceneExitComplete(); + } break; case MSG_TAKE_SHARED_ELEMENTS: ArrayList<String> sharedElementNames @@ -305,16 +319,23 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { setSharedElements(); reconcileSharedElements(sharedElementNames); mEnteringViews.removeAll(mSharedElements); - setSharedElementState(state); + final ArrayList<View> accepted = new ArrayList<View>(); + final ArrayList<View> rejected = new ArrayList<View>(); + createSharedElementImages(accepted, rejected, sharedElementNames, state); + setSharedElementState(state, accepted); + handleRejected(rejected); + if (getViewsTransition() != null) { setViewVisibility(mEnteringViews, View.INVISIBLE); } setViewVisibility(mSharedElements, View.VISIBLE); Transition transition = beginTransition(mEnteringViews, true, allowOverlappingTransitions(), true); + if (allowOverlappingTransitions()) { onStartEnterTransition(transition, mEnteringViews); } + mRemoteResultReceiver.send(MSG_HIDE_SHARED_ELEMENTS, null); } @@ -440,9 +461,13 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { mTargetSharedNames.clear(); if (sharedElements == null) { ArrayMap<String, View> map = new ArrayMap<String, View>(); - setViewVisibility(mEnteringViews, View.VISIBLE); + if (getViewsTransition() != null) { + setViewVisibility(mEnteringViews, View.VISIBLE); + } getDecor().findSharedElements(map); - setViewVisibility(mEnteringViews, View.INVISIBLE); + if (getViewsTransition() != null) { + setViewVisibility(mEnteringViews, View.INVISIBLE); + } for (int i = 0; i < map.size(); i++) { View view = map.valueAt(i); String name = map.keyAt(i); @@ -513,35 +538,60 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } private void reconcileSharedElements(ArrayList<String> sharedElementNames) { - Rect epicenter = null; - for (int i = mTargetSharedNames.size() - 1; i >= 0; i--) { - if (!sharedElementNames.contains(mTargetSharedNames.get(i))) { - mTargetSharedNames.remove(i); - mSharedElements.remove(i); + // keep only those that are in sharedElementNames. + int numSharedElements = sharedElementNames.size(); + int targetIndex = 0; + for (int i = 0; i < numSharedElements; i++) { + String name = sharedElementNames.get(i); + int index = mTargetSharedNames.indexOf(name); + if (index >= 0) { + // Swap the items at the indexes if necessary. + if (index != targetIndex) { + View temp = mSharedElements.get(index); + mSharedElements.set(index, mSharedElements.get(targetIndex)); + mSharedElements.set(targetIndex, temp); + mTargetSharedNames.set(index, mTargetSharedNames.get(targetIndex)); + mTargetSharedNames.set(targetIndex, name); + } + targetIndex++; } } - if (!mSharedElements.isEmpty()) { + for (int i = mSharedElements.size() - 1; i >= targetIndex; i--) { + mSharedElements.remove(i); + mTargetSharedNames.remove(i); + } + Rect epicenter = null; + if (!mTargetSharedNames.isEmpty() + && mTargetSharedNames.get(0).equals(sharedElementNames.get(0))) { epicenter = calcEpicenter(mSharedElements.get(0)); } mEpicenterCallback.setEpicenter(epicenter); } - private void setSharedElementState(Bundle sharedElementState) { + private void setSharedElementState(Bundle sharedElementState, + final ArrayList<View> acceptedOverlayViews) { + final int[] tempLoc = new int[2]; if (sharedElementState != null) { - int[] tempLoc = new int[2]; for (int i = 0; i < mSharedElements.size(); i++) { View sharedElement = mSharedElements.get(i); + View parent = (View) sharedElement.getParent(); + parent.getLocationOnScreen(tempLoc); String name = mTargetSharedNames.get(i); setSharedElementState(sharedElement, name, sharedElementState, tempLoc); + sharedElement.requestLayout(); } } - mListener.onCaptureSharedElementStart(); + mListener.onCaptureSharedElementStart(mTargetSharedNames, mSharedElements, + acceptedOverlayViews); + getDecor().getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { getDecor().getViewTreeObserver().removeOnPreDrawListener(this); - mListener.onCaptureSharedElementEnd(); + mListener.onCaptureSharedElementEnd(mTargetSharedNames, mSharedElements, + acceptedOverlayViews); + mSharedElementTransitionStarted = true; return true; } } @@ -555,10 +605,10 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { * @param name The shared element name given from the source Activity. * @param transitionArgs A <code>Bundle</code> containing all placementinformation for named * shared elements in the scene. - * @param tempLoc A temporary int[2] for capturing the current location of views. + * @param parentLoc The x and y coordinates of the parent's screen position. */ private static void setSharedElementState(View view, String name, Bundle transitionArgs, - int[] tempLoc) { + int[] parentLoc) { Bundle sharedElementBundle = transitionArgs.getBundle(name); if (sharedElementBundle == null) { return; @@ -576,15 +626,11 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { int heightSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY); view.measure(widthSpec, heightSpec); - ViewGroup parent = (ViewGroup) view.getParent(); - parent.getLocationOnScreen(tempLoc); - int left = x - tempLoc[0]; - int top = y - tempLoc[1]; + int left = x - parentLoc[0]; + int top = y - parentLoc[1]; int right = left + width; int bottom = top + height; view.layout(left, top, right, bottom); - - view.requestLayout(); } /** @@ -615,6 +661,11 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { sharedElementBundle.putString(KEY_NAME, view.getSharedElementName()); + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + view.draw(canvas); + sharedElementBundle.putParcelable(KEY_BITMAP, bitmap); + transitionArgs.putBundle(name, sharedElementBundle); } @@ -723,6 +774,61 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { return transition; } + private void handleRejected(final ArrayList<View> rejected) { + int numRejected = rejected.size(); + if (numRejected == 0) { + return; + } + boolean rejectionHandled = mListener.handleRejectedSharedElements(rejected); + if (rejectionHandled) { + return; + } + + ViewGroupOverlay overlay = getDecor().getOverlay(); + ObjectAnimator animator = null; + for (int i = 0; i < numRejected; i++) { + View view = rejected.get(i); + overlay.add(view); + animator = ObjectAnimator.ofFloat(view, View.ALPHA, 1, 0); + animator.start(); + } + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + ViewGroupOverlay overlay = getDecor().getOverlay(); + for (int i = rejected.size() - 1; i >= 0; i--) { + overlay.remove(rejected.get(i)); + } + } + }); + } + + private void createSharedElementImages(ArrayList<View> accepted, ArrayList<View> rejected, + ArrayList<String> sharedElementNames, Bundle state) { + int numSharedElements = sharedElementNames.size(); + Context context = getWindow().getContext(); + int[] parentLoc = new int[2]; + getDecor().getLocationOnScreen(parentLoc); + for (int i = 0; i < numSharedElements; i++) { + String name = sharedElementNames.get(i); + Bundle sharedElementBundle = state.getBundle(name); + if (sharedElementBundle != null) { + Bitmap bitmap = sharedElementBundle.getParcelable(KEY_BITMAP); + ImageView imageView = new ImageView(context); + imageView.setId(com.android.internal.R.id.shared_element); + imageView.setScaleType(ImageView.ScaleType.CENTER); + imageView.setImageBitmap(bitmap); + imageView.setSharedElementName(name); + setSharedElementState(imageView, name, state, parentLoc); + if (mTargetSharedNames.contains(name)) { + accepted.add(imageView); + } else { + rejected.add(imageView); + } + } + } + } + private static class FixedEpicenterCallback extends Transition.EpicenterCallback { private Rect mEpicenter; diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index fe532bf..a4b2651 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -473,14 +473,14 @@ class ContextImpl extends Context { registerService(NOTIFICATION_SERVICE, new ServiceFetcher() { public Object createService(ContextImpl ctx) { final Context outerContext = ctx.getOuterContext(); + // TODO: Why are we not just using the theme attribute + // that defines the dialog theme? return new NotificationManager( new ContextThemeWrapper(outerContext, - Resources.selectSystemTheme(0, + outerContext.getResources().selectSystemTheme(0, outerContext.getApplicationInfo().targetSdkVersion, - com.android.internal.R.style.Theme_Dialog, - com.android.internal.R.style.Theme_Holo_Dialog, - com.android.internal.R.style.Theme_DeviceDefault_Dialog, - com.android.internal.R.style.Theme_DeviceDefault_Light_Dialog)), + com.android.internal.R.array.system_theme_sdks, + com.android.internal.R.array.system_theme_dialog_styles)), ctx.mMainThread.getHandler()); }}); @@ -731,7 +731,7 @@ class ContextImpl extends Context { @Override public Resources.Theme getTheme() { if (mTheme == null) { - mThemeResource = Resources.selectDefaultTheme(mThemeResource, + mThemeResource = mResources.selectDefaultTheme(mThemeResource, getOuterContext().getApplicationInfo().targetSdkVersion); mTheme = mResources.newTheme(); mTheme.applyStyle(mThemeResource, true); diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java index aa097e0..cbb8359 100644 --- a/core/java/android/app/EnterTransitionCoordinator.java +++ b/core/java/android/app/EnterTransitionCoordinator.java @@ -23,8 +23,6 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.ResultReceiver; import android.transition.Transition; -import android.util.ArrayMap; -import android.util.Pair; import android.view.View; import android.view.ViewTreeObserver; import android.view.Window; @@ -135,11 +133,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator } @Override - protected void onRemoteSceneExitComplete() { - super.onRemoteSceneExitComplete(); - } - - @Override protected void onTakeSharedElements(ArrayList<String> sharedElementNames, Bundle state) { mEnteringSharedElementNames = new ArrayList<String>(); mEnteringSharedElementNames.addAll(sharedElementNames); @@ -149,6 +142,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator @Override protected void sharedElementTransitionComplete(Bundle bundle) { notifySharedElementTransitionComplete(bundle); + exitAfterSharedElementTransition(); } @Override @@ -223,6 +217,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator @Override protected void startExitTransition(ArrayList<String> sharedElements) { + mMakeOpaque = false; notifyPrepareRestore(); if (getDecor().getBackground() == null) { @@ -264,7 +259,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator mExitTransitionComplete = true; exitAfterSharedElementTransition(); super.onExitTransitionEnd(); - clearConnections(); } @Override @@ -281,12 +275,13 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator } private void exitAfterSharedElementTransition() { - if (mSharedElementTransitionComplete && mExitTransitionComplete) { + if (mSharedElementTransitionComplete && mExitTransitionComplete && mBackgroundFadedOut) { mActivity.finish(); if (mSupportsTransition) { mActivity.overridePendingTransition(0, 0); } notifyExitTransitionComplete(); + clearConnections(); } } } diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl index ad4027d..b917263 100644 --- a/core/java/android/app/INotificationManager.aidl +++ b/core/java/android/app/INotificationManager.aidl @@ -58,6 +58,8 @@ interface INotificationManager ZenModeConfig getZenModeConfig(); boolean setZenModeConfig(in ZenModeConfig config); oneway void notifyConditions(String pkg, in IConditionProvider provider, in Condition[] conditions); - oneway void requestZenModeConditions(in IConditionListener callback, boolean requested); + oneway void requestZenModeConditions(in IConditionListener callback, int relevance); oneway void setZenModeCondition(in Uri conditionId); + oneway void setAutomaticZenModeConditions(in Uri[] conditionIds); + Condition[] getAutomaticZenModeConditions(); }
\ No newline at end of file diff --git a/core/java/android/app/IProcessObserver.aidl b/core/java/android/app/IProcessObserver.aidl index e587912..ecf2c73 100644 --- a/core/java/android/app/IProcessObserver.aidl +++ b/core/java/android/app/IProcessObserver.aidl @@ -20,7 +20,7 @@ package android.app; oneway interface IProcessObserver { void onForegroundActivitiesChanged(int pid, int uid, boolean foregroundActivities); - void onImportanceChanged(int pid, int uid, int importance); + void onProcessStateChanged(int pid, int uid, int procState); void onProcessDied(int pid, int uid); } diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index 5cf61a8..ce5306f 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -60,6 +60,7 @@ public class StatusBarManager { | DISABLE_SEARCH; public static final int NAVIGATION_HINT_BACK_ALT = 1 << 0; + public static final int NAVIGATION_HINT_IME_SHOWN = 1 << 1; public static final int WINDOW_STATUS_BAR = 1; public static final int WINDOW_NAVIGATION_BAR = 2; diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index 5f8ebbe..58d707c 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -651,6 +651,10 @@ public class WallpaperManager { * not "image/*" */ public Intent getCropAndSetWallpaperIntent(Uri imageUri) { + if (imageUri == null) { + throw new IllegalArgumentException("Image URI must not be null"); + } + if (!ContentResolver.SCHEME_CONTENT.equals(imageUri.getScheme())) { throw new IllegalArgumentException("Image URI must be of the " + ContentResolver.SCHEME_CONTENT + " scheme type"); diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 68ab611..6f68dfb 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -172,6 +172,16 @@ public class DevicePolicyManager { @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_SET_NEW_PASSWORD = "android.app.action.SET_NEW_PASSWORD"; + /** + * Flag for {@link #forwardMatchingIntents}: the intents will forwarded to the primary user. + */ + public static int FLAG_TO_PRIMARY_USER = 0x0001; + + /** + * Flag for {@link #forwardMatchingIntents}: the intents will be forwarded to the managed + * profile. + */ + public static int FLAG_TO_MANAGED_PROFILE = 0x0002; /** * Return true if the given administrator component is currently @@ -1778,7 +1788,7 @@ public class DevicePolicyManager { * Sets the enabled state of the profile. A profile should be enabled only once it is ready to * be used. Only the profile owner can call this. * - * @see #isPRofileOwnerApp + * @see #isProfileOwnerApp * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. */ @@ -1834,27 +1844,6 @@ 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. @@ -1953,6 +1942,39 @@ public class DevicePolicyManager { } /** + * Called by a profile owner to forward intents sent from the managed profile to the owner, or + * from the owner to the managed profile. + * If an intent matches this intent filter, then activities belonging to the other user can + * respond to this intent. + * @param admin Which {@link DeviceAdminReceiver} this request is associated with. + * @param filter if an intent matches this IntentFilter, then it can be forwarded. + */ + public void forwardMatchingIntents(ComponentName admin, IntentFilter filter, int flags) { + if (mService != null) { + try { + mService.forwardMatchingIntents(admin, filter, flags); + } catch (RemoteException e) { + Log.w(TAG, "Failed talking with device policy service", e); + } + } + } + + /** + * Called by a profile owner to remove all the forwarding intent filters from the current user + * and from the owner. + * @param admin Which {@link DeviceAdminReceiver} this request is associated with. + */ + public void clearForwardingIntentFilters(ComponentName admin) { + if (mService != null) { + try { + mService.clearForwardingIntentFilters(admin); + } catch (RemoteException e) { + Log.w(TAG, "Failed talking with device policy service", e); + } + } + } + + /** * Called by a profile or device owner to get the application restrictions for a given target * application running in the managed profile. * diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 72b3c20..495a5f9 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -109,7 +109,6 @@ 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); @@ -121,4 +120,6 @@ interface IDevicePolicyManager { Bundle getApplicationRestrictions(in ComponentName who, in String packageName); void setUserRestriction(in ComponentName who, in String key, boolean enable); + void forwardMatchingIntents(in ComponentName admin, in IntentFilter filter, int flags); + void clearForwardingIntentFilters(in ComponentName admin); } diff --git a/core/java/android/app/task/ITaskCallback.aidl b/core/java/android/app/task/ITaskCallback.aidl new file mode 100644 index 0000000..ffa57d1 --- /dev/null +++ b/core/java/android/app/task/ITaskCallback.aidl @@ -0,0 +1,53 @@ +/** + * Copyright 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 android.app.task; + +import android.app.task.ITaskService; +import android.app.task.TaskParams; + +/** + * The server side of the TaskManager IPC protocols. The app-side implementation + * invokes on this interface to indicate completion of the (asynchronous) instructions + * issued by the server. + * + * In all cases, the 'who' parameter is the caller's service binder, used to track + * which Task Service instance is reporting. + * + * {@hide} + */ +interface ITaskCallback { + /** + * Immediate callback to the system after sending a start signal, used to quickly detect ANR. + * + * @param taskId Unique integer used to identify this task. + */ + void acknowledgeStartMessage(int taskId); + /** + * Immediate callback to the system after sending a stop signal, used to quickly detect ANR. + * + * @param taskId Unique integer used to identify this task. + */ + void acknowledgeStopMessage(int taskId); + /* + * Tell the task manager that the client is done with its execution, so that it can go on to + * the next one and stop attributing wakelock time to us etc. + * + * @param taskId Unique integer used to identify this task. + * @param reschedule Whether or not to reschedule this task. + */ + void taskFinished(int taskId, boolean reschedule); +} diff --git a/core/java/android/app/task/ITaskService.aidl b/core/java/android/app/task/ITaskService.aidl new file mode 100644 index 0000000..87b0191 --- /dev/null +++ b/core/java/android/app/task/ITaskService.aidl @@ -0,0 +1,35 @@ +/** + * Copyright 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 android.app.task; + +import android.app.task.ITaskCallback; +import android.app.task.TaskParams; + +import android.os.Bundle; + +/** + * Interface that the framework uses to communicate with application code that implements a + * TaskService. End user code does not implement this interface directly; instead, the app's + * service implementation will extend android.app.task.TaskService. + * {@hide} + */ +oneway interface ITaskService { + /** Begin execution of application's task. */ + void startTask(in TaskParams taskParams); + /** Stop execution of application's task. */ + void stopTask(in TaskParams taskParams); +} diff --git a/core/java/android/app/task/TaskParams.aidl b/core/java/android/app/task/TaskParams.aidl new file mode 100644 index 0000000..9b25855 --- /dev/null +++ b/core/java/android/app/task/TaskParams.aidl @@ -0,0 +1,19 @@ +/** + * Copyright 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 android.app.task; + +parcelable TaskParams;
\ No newline at end of file diff --git a/core/java/android/app/task/TaskParams.java b/core/java/android/app/task/TaskParams.java new file mode 100644 index 0000000..429281c --- /dev/null +++ b/core/java/android/app/task/TaskParams.java @@ -0,0 +1,87 @@ +/* + * 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 android.app.task; + +import android.os.Bundle; +import android.os.IBinder; +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Contains the parameters used to configure/identify your task. You do not create this object + * yourself, instead it is handed in to your application by the System. + */ +public class TaskParams implements Parcelable { + + private final int taskId; + private final Bundle extras; + private final IBinder mCallback; + + /** + * @return The unique id of this task, specified at creation time using + * {@link android.content.Task.Builder#Builder(int, Class)}. + */ + public int getTaskId() { + return taskId; + } + + /** + * @return The extras you passed in when constructing this task with + * {@link android.content.Task.Builder#setExtras(android.os.Bundle)}. This will + * never be null. If you did not set any extras this will be an empty bundle. + */ + public Bundle getExtras() { + return extras; + } + + /** + * @hide + */ + public ITaskCallback getCallback() { + return ITaskCallback.Stub.asInterface(mCallback); + } + + private TaskParams(Parcel in) { + taskId = in.readInt(); + extras = in.readBundle(); + mCallback = in.readStrongBinder(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(taskId); + dest.writeBundle(extras); + dest.writeStrongBinder(mCallback); + } + + public static final Creator<TaskParams> CREATOR = new Creator<TaskParams>() { + @Override + public TaskParams createFromParcel(Parcel in) { + return new TaskParams(in); + } + + @Override + public TaskParams[] newArray(int size) { + return new TaskParams[size]; + } + }; +} diff --git a/core/java/android/app/task/TaskService.java b/core/java/android/app/task/TaskService.java new file mode 100644 index 0000000..81333be --- /dev/null +++ b/core/java/android/app/task/TaskService.java @@ -0,0 +1,260 @@ +/* + * 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 android.app.task; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.IBinder; +import android.os.Looper; +import android.os.Message; +import android.os.RemoteException; +import android.util.Log; + +import com.android.internal.annotations.GuardedBy; + +/** + * <p>Entry point for the callback from the {@link android.content.TaskManager}.</p> + * <p>This is the base class that handles asynchronous requests that were previously scheduled. You + * are responsible for overriding {@link TaskService#onStartTask(TaskParams)}, which is where + * you will implement your task logic.</p> + * <p>This service executes each incoming task on a {@link android.os.Handler} running on your + * application's main thread. This means that you <b>must</b> offload your execution logic to + * another thread/handler/{@link android.os.AsyncTask} of your choosing. Not doing so will result + * in blocking any future callbacks from the TaskManager - specifically + * {@link #onStopTask(android.app.task.TaskParams)}, which is meant to inform you that the + * scheduling requirements are no longer being met.</p> + */ +public abstract class TaskService extends Service { + private static final String TAG = "TaskService"; + + /** + * Task services must be protected with this permission: + * + * <pre class="prettyprint"> + * <service android:name="MyTaskService" + * android:permission="android.permission.BIND_TASK_SERVICE" > + * ... + * </service> + * </pre> + * + * <p>If a task service is declared in the manifest but not protected with this + * permission, that service will be ignored by the OS. + */ + public static final String PERMISSION_BIND = + "android.permission.BIND_TASK_SERVICE"; + + /** + * Identifier for a message that will result in a call to + * {@link #onStartTask(android.app.task.TaskParams)}. + */ + private final int MSG_EXECUTE_TASK = 0; + /** + * Message that will result in a call to {@link #onStopTask(android.app.task.TaskParams)}. + */ + private final int MSG_STOP_TASK = 1; + /** + * Message that the client has completed execution of this task. + */ + private final int MSG_TASK_FINISHED = 2; + + /** Lock object for {@link #mHandler}. */ + private final Object mHandlerLock = new Object(); + + /** + * Handler we post tasks to. Responsible for calling into the client logic, and handling the + * callback to the system. + */ + @GuardedBy("mHandlerLock") + TaskHandler mHandler; + + /** Binder for this service. */ + ITaskService mBinder = new ITaskService.Stub() { + @Override + public void startTask(TaskParams taskParams) { + ensureHandler(); + Message m = Message.obtain(mHandler, MSG_EXECUTE_TASK, taskParams); + m.sendToTarget(); + } + @Override + public void stopTask(TaskParams taskParams) { + ensureHandler(); + Message m = Message.obtain(mHandler, MSG_STOP_TASK, taskParams); + m.sendToTarget(); + } + }; + + /** @hide */ + void ensureHandler() { + synchronized (mHandlerLock) { + if (mHandler == null) { + mHandler = new TaskHandler(getMainLooper()); + } + } + } + + /** + * Runs on application's main thread - callbacks are meant to offboard work to some other + * (app-specified) mechanism. + * @hide + */ + class TaskHandler extends Handler { + TaskHandler(Looper looper) { + super(looper); + } + + @Override + public void handleMessage(Message msg) { + final TaskParams params = (TaskParams) msg.obj; + switch (msg.what) { + case MSG_EXECUTE_TASK: + try { + TaskService.this.onStartTask(params); + } catch (Exception e) { + Log.e(TAG, "Error while executing task: " + params.getTaskId()); + throw new RuntimeException(e); + } finally { + maybeAckMessageReceived(params, MSG_EXECUTE_TASK); + } + break; + case MSG_STOP_TASK: + try { + TaskService.this.onStopTask(params); + } catch (Exception e) { + Log.e(TAG, "Application unable to handle onStopTask.", e); + throw new RuntimeException(e); + } finally { + maybeAckMessageReceived(params, MSG_STOP_TASK); + } + break; + case MSG_TASK_FINISHED: + final boolean needsReschedule = (msg.arg2 == 1); + ITaskCallback callback = params.getCallback(); + if (callback != null) { + try { + callback.taskFinished(params.getTaskId(), needsReschedule); + } catch (RemoteException e) { + Log.e(TAG, "Error reporting task finish to system: binder has gone" + + "away."); + } + } else { + Log.e(TAG, "finishTask() called for a nonexistent task id."); + } + break; + default: + Log.e(TAG, "Unrecognised message received."); + break; + } + } + + /** + * Messages come in on the application's main thread, so rather than run the risk of + * waiting for an app that may be doing something foolhardy, we ack to the system after + * processing a message. This allows us to throw up an ANR dialogue as quickly as possible. + * @param params id of the task we're acking. + * @param state Information about what message we're acking. + */ + private void maybeAckMessageReceived(TaskParams params, int state) { + final ITaskCallback callback = params.getCallback(); + final int taskId = params.getTaskId(); + if (callback != null) { + try { + if (state == MSG_EXECUTE_TASK) { + callback.acknowledgeStartMessage(taskId); + } else if (state == MSG_STOP_TASK) { + callback.acknowledgeStopMessage(taskId); + } + } catch(RemoteException e) { + Log.e(TAG, "System unreachable for starting task."); + } + } else { + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, state + ": Attempting to ack a task that has already been" + + "processed."); + } + } + } + } + + /** @hide */ + public final IBinder onBind(Intent intent) { + return mBinder.asBinder(); + } + + /** + * Override this method with the callback logic for your task. Any such logic needs to be + * performed on a separate thread, as this function is executed on your application's main + * thread. + * + * @param params Parameters specifying info about this task, including the extras bundle you + * optionally provided at task-creation time. + */ + public abstract void onStartTask(TaskParams params); + + /** + * This method is called if your task should be stopped even before you've called + * {@link #taskFinished(TaskParams, boolean)}. + * + * <p>This will happen if the requirements specified at schedule time are no longer met. For + * example you may have requested WiFi with + * {@link android.content.Task.Builder#setRequiredNetworkCapabilities(int)}, yet while your + * task was executing the user toggled WiFi. Another example is if you had specified + * {@link android.content.Task.Builder#setRequiresDeviceIdle(boolean)}, and the phone left its + * idle maintenance window. You are solely responsible for the behaviour of your application + * upon receipt of this message; your app will likely start to misbehave if you ignore it. One + * repercussion is that the system will cease to hold a wakelock for you.</p> + * + * <p>After you've done your clean-up you are still expected to call + * {@link #taskFinished(TaskParams, boolean)} this will inform the TaskManager that all is well, and + * allow you to reschedule your task as it is probably uncompleted. Until you call + * taskFinished() you will not receive any newly scheduled tasks with the given task id as the + * TaskManager will consider the task to be in an error state.</p> + * + * @param params Parameters specifying info about this task. + * @return True to indicate to the TaskManager whether you'd like to reschedule this task based + * on the criteria provided at task creation-time. False to drop the task. Regardless of the + * value returned, your task must stop executing. + */ + public abstract boolean onStopTask(TaskParams params); + + /** + * Callback to inform the TaskManager you have completed execution. This can be called from any + * thread, as it will ultimately be run on your application's main thread. When the system + * receives this message it will release the wakelock being held. + * <p> + * You can specify post-execution behaviour to the scheduler here with <code>needsReschedule + * </code>. This will apply a back-off timer to your task based on the default, or what was + * set with {@link android.content.Task.Builder#setBackoffCriteria(long, int)}. The + * original requirements are always honoured even for a backed-off task. + * Note that a task running in idle mode will not be backed-off. Instead what will happen + * is the task will be re-added to the queue and re-executed within a future idle + * maintenance window. + * </p> + * + * @param params Parameters specifying system-provided info about this task, this was given to + * your application in {@link #onStartTask(TaskParams)}. + * @param needsReschedule True if this task is complete, false if you want the TaskManager to + * reschedule you. + */ + public final void taskFinished(TaskParams params, boolean needsReschedule) { + ensureHandler(); + Message m = Message.obtain(mHandler, MSG_TASK_FINISHED, params); + m.arg2 = needsReschedule ? 1 : 0; + m.sendToTarget(); + } +}
\ No newline at end of file diff --git a/core/java/android/content/Task.java b/core/java/android/content/Task.java new file mode 100644 index 0000000..ed5ed88 --- /dev/null +++ b/core/java/android/content/Task.java @@ -0,0 +1,400 @@ +/* + * 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 android.content; + +import android.app.task.TaskService; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Container of data passed to the {@link android.content.TaskManager} fully encapsulating the + * parameters required to schedule work against the calling application. These are constructed + * using the {@link Task.Builder}. + */ +public class Task implements Parcelable { + + public interface NetworkType { + public final int ANY = 0; + public final int UNMETERED = 1; + } + + /** + * Linear: retry_time(failure_time, t) = failure_time + initial_retry_delay * t, t >= 1 + * Expon: retry_time(failure_time, t) = failure_time + initial_retry_delay ^ t, t >= 1 + */ + public interface BackoffPolicy { + public final int LINEAR = 0; + public final int EXPONENTIAL = 1; + } + + /** + * Unique task id associated with this class. This is assigned to your task by the scheduler. + */ + public int getTaskId() { + return taskId; + } + + /** + * Bundle of extras which are returned to your application at execution time. + */ + public Bundle getExtras() { + return extras; + } + + /** + * Name of the service endpoint that will be called back into by the TaskManager. + */ + public String getServiceClassName() { + return serviceClassName; + } + + /** + * Whether this task needs the device to be plugged in. + */ + public boolean isRequireCharging() { + return requireCharging; + } + + /** + * Whether this task needs the device to be in an Idle maintenance window. + */ + public boolean isRequireDeviceIdle() { + return requireDeviceIdle; + } + + /** + * See {@link android.content.Task.NetworkType} for a description of this value. + */ + public int getNetworkCapabilities() { + return networkCapabilities; + } + + /** + * Set for a task that does not recur periodically, to specify a delay after which the task + * will be eligible for execution. This value is not set if the task recurs periodically. + */ + public long getMinLatencyMillis() { + return minLatencyMillis; + } + + /** + * See {@link Builder#setOverrideDeadline(long)}. This value is not set if the task recurs + * periodically. + */ + public long getMaxExecutionDelayMillis() { + return maxExecutionDelayMillis; + } + + /** + * Track whether this task will repeat with a given period. + */ + public boolean isPeriodic() { + return isPeriodic; + } + + /** + * Set to the interval between occurrences of this task. This value is <b>not</b> set if the + * task does not recur periodically. + */ + public long getIntervalMillis() { + return intervalMillis; + } + + /** + * The amount of time the TaskManager will wait before rescheduling a failed task. This value + * will be increased depending on the backoff policy specified at task creation time. Defaults + * to 5 seconds. + */ + public long getInitialBackoffMillis() { + return initialBackoffMillis; + } + + /** + * See {@link android.content.Task.BackoffPolicy} for an explanation of the values this field + * can take. This defaults to exponential. + */ + public int getBackoffPolicy() { + return backoffPolicy; + } + + private final int taskId; + // TODO: Change this to use PersistableBundle when that lands in master. + private final Bundle extras; + private final String serviceClassName; + private final boolean requireCharging; + private final boolean requireDeviceIdle; + private final int networkCapabilities; + private final long minLatencyMillis; + private final long maxExecutionDelayMillis; + private final boolean isPeriodic; + private final long intervalMillis; + private final long initialBackoffMillis; + private final int backoffPolicy; + + private Task(Parcel in) { + taskId = in.readInt(); + extras = in.readBundle(); + serviceClassName = in.readString(); + requireCharging = in.readInt() == 1; + requireDeviceIdle = in.readInt() == 1; + networkCapabilities = in.readInt(); + minLatencyMillis = in.readLong(); + maxExecutionDelayMillis = in.readLong(); + isPeriodic = in.readInt() == 1; + intervalMillis = in.readLong(); + initialBackoffMillis = in.readLong(); + backoffPolicy = in.readInt(); + } + + private Task(Task.Builder b) { + taskId = b.mTaskId; + extras = new Bundle(b.mExtras); + serviceClassName = b.mTaskServiceClassName; + requireCharging = b.mRequiresCharging; + requireDeviceIdle = b.mRequiresDeviceIdle; + networkCapabilities = b.mNetworkCapabilities; + minLatencyMillis = b.mMinLatencyMillis; + maxExecutionDelayMillis = b.mMaxExecutionDelayMillis; + isPeriodic = b.mIsPeriodic; + intervalMillis = b.mIntervalMillis; + initialBackoffMillis = b.mInitialBackoffMillis; + backoffPolicy = b.mBackoffPolicy; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(taskId); + out.writeBundle(extras); + out.writeString(serviceClassName); + out.writeInt(requireCharging ? 1 : 0); + out.writeInt(requireDeviceIdle ? 1 : 0); + out.writeInt(networkCapabilities); + out.writeLong(minLatencyMillis); + out.writeLong(maxExecutionDelayMillis); + out.writeInt(isPeriodic ? 1 : 0); + out.writeLong(intervalMillis); + out.writeLong(initialBackoffMillis); + out.writeInt(backoffPolicy); + } + + public static final Creator<Task> CREATOR = new Creator<Task>() { + @Override + public Task createFromParcel(Parcel in) { + return new Task(in); + } + + @Override + public Task[] newArray(int size) { + return new Task[size]; + } + }; + + /** + * Builder class for constructing {@link Task} objects. + */ + public final class Builder { + private int mTaskId; + private Bundle mExtras; + private String mTaskServiceClassName; + // Requirements. + private boolean mRequiresCharging; + private boolean mRequiresDeviceIdle; + private int mNetworkCapabilities; + // One-off parameters. + private long mMinLatencyMillis; + private long mMaxExecutionDelayMillis; + // Periodic parameters. + private boolean mIsPeriodic; + private long mIntervalMillis; + // Back-off parameters. + private long mInitialBackoffMillis = 5000L; + private int mBackoffPolicy = BackoffPolicy.EXPONENTIAL; + /** Easy way to track whether the client has tried to set a back-off policy. */ + private boolean mBackoffPolicySet = false; + + /** + * @param taskId Application-provided id for this task. Subsequent calls to cancel, or + * tasks created with the same taskId, will update the pre-existing task with + * the same id. + * @param cls The endpoint that you implement that will receive the callback from the + * TaskManager. + */ + public Builder(int taskId, Class<TaskService> cls) { + mTaskServiceClassName = cls.getClass().getName(); + mTaskId = taskId; + } + + /** + * Set optional extras. This is persisted, so we only allow primitive types. + * @param extras Bundle containing extras you want the scheduler to hold on to for you. + */ + public Builder setExtras(Bundle extras) { + mExtras = extras; + return this; + } + + /** + * Set some description of the kind of network capabilities you would like to have. This + * will be a parameter defined in {@link android.content.Task.NetworkType}. + * Not calling this function means the network is not necessary. + * Bear in mind that calling this function defines network as a strict requirement for your + * task if the network requested is not available your task will never run. See + * {@link #setOverrideDeadline(long)} to change this behaviour. + */ + public Builder setRequiredNetworkCapabilities(int networkCapabilities) { + mNetworkCapabilities = networkCapabilities; + return this; + } + + /* + * Specify that to run this task, the device needs to be plugged in. This defaults to + * false. + * @param requireCharging Whether or not the device is plugged in. + */ + public Builder setRequiresCharging(boolean requiresCharging) { + mRequiresCharging = requiresCharging; + return this; + } + + /** + * Specify that to run, the task needs the device to be in idle mode. This defaults to + * false. + * <p>Idle mode is a loose definition provided by the system, which means that the device + * is not in use, and has not been in use for some time. As such, it is a good time to + * perform resource heavy tasks. Bear in mind that battery usage will still be attributed + * to your application, and surfaced to the user in battery stats.</p> + * @param requiresDeviceIdle Whether or not the device need be within an idle maintenance + * window. + */ + public Builder setRequiresDeviceIdle(boolean requiresDeviceIdle) { + mRequiresDeviceIdle = requiresDeviceIdle; + return this; + } + + /** + * Specify that this task should recur with the provided interval, not more than once per + * period. You have no control over when within this interval this task will be executed, + * only the guarantee that it will be executed at most once within this interval. + * A periodic task will be repeated until the phone is turned off, however it will only be + * persisted if the client app has declared the + * {@link android.Manifest.permission#RECEIVE_BOOT_COMPLETED} permission. You can schedule + * periodic tasks without this permission, they simply will cease to exist after the phone + * restarts. + * Setting this function on the builder with {@link #setMinimumLatency(long)} or + * {@link #setOverrideDeadline(long)} will result in an error. + * @param intervalMillis Millisecond interval for which this task will repeat. + */ + public Builder setPeriodic(long intervalMillis) { + mIsPeriodic = true; + mIntervalMillis = intervalMillis; + return this; + } + + /** + * Specify that this task should be delayed by the provided amount of time. + * Because it doesn't make sense setting this property on a periodic task, doing so will + * throw an {@link java.lang.IllegalArgumentException} when + * {@link android.content.Task.Builder#build()} is called. + * @param minLatencyMillis Milliseconds before which this task will not be considered for + * execution. + */ + public Builder setMinimumLatency(long minLatencyMillis) { + mMinLatencyMillis = minLatencyMillis; + return this; + } + + /** + * Set deadline which is the maximum scheduling latency. The task will be run by this + * deadline even if other requirements are not met. Because it doesn't make sense setting + * this property on a periodic task, doing so will throw an + * {@link java.lang.IllegalArgumentException} when + * {@link android.content.Task.Builder#build()} is called. + */ + public Builder setOverrideDeadline(long maxExecutionDelayMillis) { + mMaxExecutionDelayMillis = maxExecutionDelayMillis; + return this; + } + + /** + * Set up the back-off/retry policy. + * This defaults to some respectable values: {5 seconds, Exponential}. We cap back-off at + * 1hr. + * Note that trying to set a backoff criteria for a task with + * {@link #setRequiresDeviceIdle(boolean)} will throw an exception when you call build(). + * This is because back-off typically does not make sense for these types of tasks. See + * {@link android.app.task.TaskService#taskFinished(android.app.task.TaskParams, boolean)} + * for more description of the return value for the case of a task executing while in idle + * mode. + * @param initialBackoffMillis Millisecond time interval to wait initially when task has + * failed. + * @param backoffPolicy is one of {@link BackoffPolicy} + */ + public Builder setBackoffCriteria(long initialBackoffMillis, int backoffPolicy) { + mBackoffPolicySet = true; + mInitialBackoffMillis = initialBackoffMillis; + mBackoffPolicy = backoffPolicy; + return this; + } + + /** + * @return The task object to hand to the TaskManager. This object is immutable. + */ + public Task build() { + // Check that extras bundle only contains primitive types. + try { + for (String key : extras.keySet()) { + Object value = extras.get(key); + if (value == null) continue; + if (value instanceof Long) continue; + if (value instanceof Integer) continue; + if (value instanceof Boolean) continue; + if (value instanceof Float) continue; + if (value instanceof Double) continue; + if (value instanceof String) continue; + throw new IllegalArgumentException("Unexpected value type: " + + value.getClass().getName()); + } + } catch (IllegalArgumentException e) { + throw e; + } catch (RuntimeException exc) { + throw new IllegalArgumentException("error unparcelling Bundle", exc); + } + // Check that a deadline was not set on a periodic task. + if (mIsPeriodic && (mMaxExecutionDelayMillis != 0L)) { + throw new IllegalArgumentException("Can't call setOverrideDeadline() on a " + + "periodic task."); + } + if (mIsPeriodic && (mMinLatencyMillis != 0L)) { + throw new IllegalArgumentException("Can't call setMinimumLatency() on a " + + "periodic task"); + } + if (mBackoffPolicySet && mRequiresDeviceIdle) { + throw new IllegalArgumentException("An idle mode task will not respect any" + + " back-off policy, so calling setBackoffCriteria with" + + " setRequiresDeviceIdle is an error."); + } + return new Task(this); + } + } + +} diff --git a/core/java/android/content/TaskManager.java b/core/java/android/content/TaskManager.java new file mode 100644 index 0000000..d28d78a --- /dev/null +++ b/core/java/android/content/TaskManager.java @@ -0,0 +1,66 @@ +/* + * 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 android.content; + +import java.util.List; + +/** + * Class for scheduling various types of tasks with the scheduling framework on the device. + * + * Get an instance of this class through {@link Context#getSystemService(String)}. + */ +public abstract class TaskManager { + /* + * Returned from {@link #schedule(Task)} when an invalid parameter was supplied. This can occur + * if the run-time for your task is too short, or perhaps the system can't resolve the + * requisite {@link TaskService} in your package. + */ + static final int RESULT_INVALID_PARAMETERS = -1; + /** + * Returned from {@link #schedule(Task)} if this application has made too many requests for + * work over too short a time. + */ + // TODO: Determine if this is necessary. + static final int RESULT_OVER_QUOTA = -2; + + /* + * @param task The task you wish scheduled. See {@link Task#TaskBuilder} for more detail on + * the sorts of tasks you can schedule. + * @return If >0, this int corresponds to the taskId of the successfully scheduled task. + * Otherwise you have to compare the return value to the error codes defined in this class. + */ + public abstract int schedule(Task task); + + /** + * Cancel a task that is pending in the TaskManager. + * @param taskId unique identifier for this task. Obtain this value from the tasks returned by + * {@link #getAllPendingTasks()}. + * @return + */ + public abstract void cancel(int taskId); + + /** + * Cancel all tasks that have been registered with the TaskManager by this package. + */ + public abstract void cancelAll(); + + /** + * @return a list of all the tasks registered by this package that have not yet been executed. + */ + public abstract List<Task> getAllPendingTasks(); + +} diff --git a/core/java/android/content/pm/ILauncherApps.aidl b/core/java/android/content/pm/ILauncherApps.aidl index 796b113..0acf043 100644 --- a/core/java/android/content/pm/ILauncherApps.aidl +++ b/core/java/android/content/pm/ILauncherApps.aidl @@ -35,4 +35,6 @@ interface ILauncherApps { ResolveInfo resolveActivity(in Intent intent, in UserHandle user); void startActivityAsUser(in ComponentName component, in Rect sourceBounds, in Bundle opts, in UserHandle user); + boolean isPackageEnabled(String packageName, in UserHandle user); + boolean isActivityEnabled(in ComponentName component, in UserHandle user); } diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 488e25f..cf9a296 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -111,6 +111,8 @@ interface IPackageManager { ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags, int userId); + boolean canForwardTo(in Intent intent, String resolvedType, int userIdFrom, int userIdDest); + List<ResolveInfo> queryIntentActivities(in Intent intent, String resolvedType, int flags, int userId); @@ -245,6 +247,10 @@ interface IPackageManager { void clearPackagePersistentPreferredActivities(String packageName, int userId); + void addForwardingIntentFilter(in IntentFilter filter, int userIdOrig, int userIdDest); + + void clearForwardingIntentFilters(int userIdOrig); + /** * Report the set of 'Home' activity candidates, plus (if any) which of them * is the current "always use this one" setting. diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java index 5187181..8025b60 100644 --- a/core/java/android/content/pm/LauncherApps.java +++ b/core/java/android/content/pm/LauncherApps.java @@ -187,6 +187,39 @@ public class LauncherApps { } /** + * Checks if the package is installed and enabled for a profile. + * + * @param packageName The package to check. + * @param user The UserHandle of the profile. + * + * @return true if the package exists and is enabled. + */ + public boolean isPackageEnabledForProfile(String packageName, UserHandle user) { + try { + return mService.isPackageEnabled(packageName, user); + } catch (RemoteException re) { + return false; + } + } + + /** + * Checks if the activity exists and it enabled for a profile. + * + * @param component The activity to check. + * @param user The UserHandle of the profile. + * + * @return true if the activity exists and is enabled. + */ + public boolean isActivityEnabledForProfile(ComponentName component, UserHandle user) { + try { + return mService.isActivityEnabled(component, user); + } catch (RemoteException re) { + return false; + } + } + + + /** * Adds a listener for changes to packages in current and managed profiles. * * @param listener The listener to add. diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java index f53aa4c..c0383a3 100644 --- a/core/java/android/content/pm/UserInfo.java +++ b/core/java/android/content/pm/UserInfo.java @@ -27,8 +27,8 @@ import android.os.UserHandle; */ public class UserInfo implements Parcelable { - /** 6 bits for user type */ - public static final int FLAG_MASK_USER_TYPE = 0x0000003F; + /** 8 bits for user type */ + public static final int FLAG_MASK_USER_TYPE = 0x000000FF; /** * *************************** NOTE *************************** @@ -70,6 +70,11 @@ public class UserInfo implements Parcelable { */ public static final int FLAG_MANAGED_PROFILE = 0x00000020; + /** + * Indicates that this user is disabled. + */ + public static final int FLAG_DISABLED = 0x00000040; + public static final int NO_PROFILE_GROUP_ID = -1; @@ -117,6 +122,10 @@ public class UserInfo implements Parcelable { return (flags & FLAG_MANAGED_PROFILE) == FLAG_MANAGED_PROFILE; } + public boolean isEnabled() { + return (flags & FLAG_DISABLED) != FLAG_DISABLED; + } + /** * @return true if this user can be switched to. **/ diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index 4879c23..1331777 100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -137,42 +137,45 @@ public class Resources { /** * Returns the most appropriate default theme for the specified target SDK version. - * <ul> - * <li>Below API 11: Gingerbread - * <li>APIs 11 thru 14: Holo - * <li>APIs 14 thru XX: Device default dark - * <li>API XX and above: Device default light with dark action bar - * </ul> * * @param curTheme The current theme, or 0 if not specified. * @param targetSdkVersion The target SDK version. * @return A theme resource identifier * @hide */ - public static int selectDefaultTheme(int curTheme, int targetSdkVersion) { + public int selectDefaultTheme(int curTheme, int targetSdkVersion) { return selectSystemTheme(curTheme, targetSdkVersion, - com.android.internal.R.style.Theme, - com.android.internal.R.style.Theme_Holo, - com.android.internal.R.style.Theme_DeviceDefault, - com.android.internal.R.style.Theme_DeviceDefault_Light_DarkActionBar); + com.android.internal.R.array.system_theme_sdks, + com.android.internal.R.array.system_theme_styles); } - /** @hide */ - public static int selectSystemTheme(int curTheme, int targetSdkVersion, int orig, int holo, - int dark, int deviceDefault) { + /** + * Returns the most appropriate default theme for the specified target SDK version. + * + * @param curTheme The current theme, or 0 if not specified. + * @param targetSdkVersion The target SDK version. + * @param sdkArrayId Identifier for integer array resource containing + * sorted minimum SDK versions. First entry must be 0. + * @param themeArrayId Identifier for array resource containing the + * default themes that map to SDK versions. + * @return A theme resource identifier + * @hide + */ + public int selectSystemTheme( + int curTheme, int targetSdkVersion, int sdkArrayId, int themeArrayId) { if (curTheme != 0) { return curTheme; } - if (targetSdkVersion < Build.VERSION_CODES.HONEYCOMB) { - return orig; - } - if (targetSdkVersion < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - return holo; - } - if (targetSdkVersion < Build.VERSION_CODES.CUR_DEVELOPMENT) { - return dark; + + final int[] targetSdks = getIntArray(sdkArrayId); + final TypedArray defaultThemes = obtainTypedArray(themeArrayId); + for (int i = targetSdks.length - 1; i > 0; i--) { + if (targetSdkVersion >= targetSdks[i]) { + return defaultThemes.getResourceId(i, 0); + } } - return deviceDefault; + + return defaultThemes.getResourceId(0, 0); } /** @@ -2308,8 +2311,8 @@ public class Resources { */ private Drawable loadDrawableForCookie(TypedValue value, int id, Theme theme) { if (value.string == null) { - throw new NotFoundException( - "Resource is not a Drawable (color or path): " + value); + throw new NotFoundException("Resource \"" + getResourceName(id) + "\" (" + + Integer.toHexString(id) + ") is not a Drawable (color or path): " + value); } final String file = value.string.toString(); diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java index 528e119..722d956 100644 --- a/core/java/android/hardware/camera2/CameraCharacteristics.java +++ b/core/java/android/hardware/camera2/CameraCharacteristics.java @@ -455,22 +455,25 @@ public final class CameraCharacteristics extends CameraMetadata { * <p>The maximum numbers of different types of output streams * that can be configured and used simultaneously by a camera device.</p> * <p>This is a 3 element tuple that contains the max number of output simultaneous - * streams for raw sensor, processed (and uncompressed), and JPEG formats respectively. - * For example, if max raw sensor format output stream number is 1, max YUV streams + * streams for raw sensor, processed (but not stalling), and processed (and stalling) + * formats respectively. For example, assuming that JPEG is typically a processed and + * stalling stream, if max raw sensor format output stream number is 1, max YUV streams * number is 3, and max JPEG stream number is 2, then this tuple should be <code>(1, 3, 2)</code>.</p> * <p>This lists the upper bound of the number of output streams supported by * the camera device. Using more streams simultaneously may require more hardware and * CPU resources that will consume more power. The image format for a output stream can - * be any supported format provided by {@link CameraCharacteristics#SCALER_AVAILABLE_FORMATS android.scaler.availableFormats}. The formats - * defined in {@link CameraCharacteristics#SCALER_AVAILABLE_FORMATS android.scaler.availableFormats} can be catergorized into the 3 stream types - * as below:</p> + * be any supported format provided by {@link CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS android.scaler.availableStreamConfigurations}. + * The formats defined in {@link CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS android.scaler.availableStreamConfigurations} can be catergorized + * into the 3 stream types as below:</p> * <ul> - * <li>JPEG-compressed format: BLOB.</li> - * <li>Raw formats: RAW_SENSOR and RAW_OPAQUE.</li> - * <li>processed, uncompressed formats: YCbCr_420_888, YCrCb_420_SP, YV12.</li> + * <li>Processed (but stalling): any non-RAW format with a stallDurations > 0. + * Typically JPEG format (ImageFormat#JPEG).</li> + * <li>Raw formats: ImageFormat#RAW_SENSOR and ImageFormat#RAW_OPAQUE.</li> + * <li>Processed (but not-stalling): any non-RAW format without a stall duration. + * Typically ImageFormat#YUV_420_888, ImageFormat#NV21, ImageFormat#YV12.</li> * </ul> * - * @see CameraCharacteristics#SCALER_AVAILABLE_FORMATS + * @see CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS */ public static final Key<int[]> REQUEST_MAX_NUM_OUTPUT_STREAMS = new Key<int[]>("android.request.maxNumOutputStreams", int[].class); diff --git a/core/java/android/hardware/hdmi/HdmiCec.java b/core/java/android/hardware/hdmi/HdmiCec.java index 8578a32..eafaed6 100644 --- a/core/java/android/hardware/hdmi/HdmiCec.java +++ b/core/java/android/hardware/hdmi/HdmiCec.java @@ -85,7 +85,7 @@ public final class HdmiCec { public static final int ADDR_RESERVED_2 = 13; /** Logical address for TV other than the one assigned with {@link #ADDR_TV} */ - public static final int ADDR_FREE_USE = 14; + public static final int ADDR_SPECIFIC_USE = 14; /** Logical address for devices to which address cannot be allocated */ public static final int ADDR_UNREGISTERED = 15; @@ -179,6 +179,7 @@ public final class HdmiCec { DEVICE_RECORDER, // ADDR_RECORDER_3 DEVICE_TUNER, // ADDR_TUNER_4 DEVICE_PLAYBACK, // ADDR_PLAYBACK_3 + DEVICE_TV, // ADDR_SPECIFIC_USE }; private static final String[] DEFAULT_NAMES = { @@ -194,6 +195,7 @@ public final class HdmiCec { "Recorder_3", "Tuner_4", "Playback_3", + "Secondary_TV", }; private HdmiCec() { } // Prevents instantiation. @@ -221,9 +223,7 @@ public final class HdmiCec { * @return true if the given address is valid */ public static boolean isValidAddress(int address) { - // TODO: We leave out the address 'free use(14)' for now. Check this later - // again to make sure it is a valid address for communication. - return (ADDR_TV <= address && address <= ADDR_PLAYBACK_3); + return (ADDR_TV <= address && address <= ADDR_SPECIFIC_USE); } /** diff --git a/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java b/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java new file mode 100644 index 0000000..9698445 --- /dev/null +++ b/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java @@ -0,0 +1,168 @@ +/* + * 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 android.hardware.hdmi; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * A class to encapsulate device information for HDMI-CEC. This container + * include basic information such as logical address, physical address and + * device type, and additional information like vendor id and osd name. + */ +public final class HdmiCecDeviceInfo implements Parcelable { + // Logical address, phsical address, device type, vendor id and display name + // are immutable value. + private final int mLogicalAddress; + private final int mPhysicalAddress; + private final int mDeviceType; + private final int mVendorId; + private final String mDisplayName; + + + /** + * A helper class to deserialize {@link HdmiCecDeviceInfo} for a parcel. + */ + public static final Parcelable.Creator<HdmiCecDeviceInfo> CREATOR = + new Parcelable.Creator<HdmiCecDeviceInfo>() { + @Override + public HdmiCecDeviceInfo createFromParcel(Parcel source) { + int logicalAddress = source.readInt(); + int physicalAddress = source.readInt(); + int deviceType = source.readInt(); + int vendorId = source.readInt(); + String displayName = source.readString(); + return new HdmiCecDeviceInfo(logicalAddress, physicalAddress, deviceType, + vendorId, displayName); + } + + @Override + public HdmiCecDeviceInfo[] newArray(int size) { + return new HdmiCecDeviceInfo[size]; + } + }; + + /** + * Constructor. + * + * @param logicalAddress logical address of HDMI-Cec device. + * For more details, refer {@link HdmiCec} + * @param physicalAddress physical address of HDMI-Cec device + * @param deviceType type of device. For more details, refer {@link HdmiCec} + * @param vendorId vendor id of device. It's used for vendor specific command + * @param displayName name of device + * @hide + */ + public HdmiCecDeviceInfo(int logicalAddress, int physicalAddress, int deviceType, + int vendorId, String displayName) { + mLogicalAddress = logicalAddress; + mPhysicalAddress = physicalAddress; + mDeviceType = deviceType; + mDisplayName = displayName; + mVendorId = vendorId; + } + + /** + * Return the logical address of the device. It can have 0-15 values. + * For more details, refer constants between {@link HdmiCec#ADDR_TV} + * and {@link HdmiCec#ADDR_UNREGISTERED}. + */ + public int getLogicalAddress() { + return mLogicalAddress; + } + + /** + * Return the physical address of the device. + */ + public int getPhysicalAddress() { + return mPhysicalAddress; + } + + /** + * Return type of the device. For more details, refer constants between + * {@link HdmiCec#DEVICE_TV} and {@link HdmiCec#DEVICE_INACTIVE}. + */ + public int getDeviceType() { + return mDeviceType; + } + + /** + * Return display (OSD) name of the device. + */ + public String getDisplayName() { + return mDisplayName; + } + + /** + * Return vendor id of the device. Vendor id is used to distinguish devices + * built by other manufactures. This is required for vendor-specific command + * on CEC standard. + */ + public int getVendorId() { + return mVendorId; + } + + /** + * Describe the kinds of special objects contained in this Parcelable's + * marshalled representation. + */ + @Override + public int describeContents() { + return 0; + } + + /** + * Serialize this object into a {@link Parcel}. + * + * @param dest The Parcel in which the object should be written. + * @param flags Additional flags about how the object should be written. + * May be 0 or {@link Parcelable#PARCELABLE_WRITE_RETURN_VALUE}. + */ + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(mLogicalAddress); + dest.writeInt(mPhysicalAddress); + dest.writeInt(mDeviceType); + dest.writeInt(mVendorId); + dest.writeString(mDisplayName); + } + + @Override + public String toString() { + StringBuffer s = new StringBuffer(); + s.append("logical_address: ").append(mLogicalAddress).append(", "); + s.append("physical_address: ").append(mPhysicalAddress).append(", "); + s.append("device_type: ").append(mDeviceType).append(", "); + s.append("vendor_id: ").append(mVendorId).append(", "); + s.append("display_name: ").append(mDisplayName); + return s.toString(); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof HdmiCecDeviceInfo)) { + return false; + } + + HdmiCecDeviceInfo other = (HdmiCecDeviceInfo) obj; + return mLogicalAddress == other.mLogicalAddress + && mPhysicalAddress == other.mPhysicalAddress + && mDeviceType == other.mDeviceType + && mVendorId == other.mVendorId + && mDisplayName.equals(other.mDisplayName); + } +} diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index 505ef9c..e6dbcd0 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -654,13 +654,11 @@ public class InputMethodService extends AbstractInputMethodService { return false; } - @Override public void onCreate() { - mTheme = Resources.selectSystemTheme(mTheme, - getApplicationInfo().targetSdkVersion, - android.R.style.Theme_InputMethod, - android.R.style.Theme_Holo_InputMethod, - android.R.style.Theme_DeviceDefault_InputMethod, - android.R.style.Theme_DeviceDefault_InputMethod); + @Override + public void onCreate() { + mTheme = getResources().selectSystemTheme(mTheme, getApplicationInfo().targetSdkVersion, + com.android.internal.R.array.system_theme_sdks, + com.android.internal.R.array.system_theme_ime_styles); super.setTheme(mTheme); super.onCreate(); mImm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java index a470e88..30b61c5 100644 --- a/core/java/android/net/MobileDataStateTracker.java +++ b/core/java/android/net/MobileDataStateTracker.java @@ -54,7 +54,7 @@ import java.util.concurrent.atomic.AtomicBoolean; public class MobileDataStateTracker extends BaseNetworkStateTracker { private static final String TAG = "MobileDataStateTracker"; - private static final boolean DBG = true; + private static final boolean DBG = false; private static final boolean VDBG = false; private PhoneConstants.DataState mMobileDataState; diff --git a/core/java/android/net/Proxy.java b/core/java/android/net/Proxy.java index 033332c..bea8d1c 100644 --- a/core/java/android/net/Proxy.java +++ b/core/java/android/net/Proxy.java @@ -274,48 +274,6 @@ public final class Proxy { return PROXY_VALID; } - static class AndroidProxySelectorRoutePlanner - extends org.apache.http.impl.conn.ProxySelectorRoutePlanner { - - private Context mContext; - - public AndroidProxySelectorRoutePlanner(SchemeRegistry schreg, ProxySelector prosel, - Context context) { - super(schreg, prosel); - mContext = context; - } - - @Override - protected java.net.Proxy chooseProxy(List<java.net.Proxy> proxies, HttpHost target, - HttpRequest request, HttpContext context) { - return getProxy(mContext, target.getHostName()); - } - - @Override - protected HttpHost determineProxy(HttpHost target, HttpRequest request, - HttpContext context) { - return getPreferredHttpHost(mContext, target.getHostName()); - } - - @Override - public HttpRoute determineRoute(HttpHost target, HttpRequest request, - HttpContext context) { - HttpHost proxy = getPreferredHttpHost(mContext, target.getHostName()); - if (proxy == null) { - return new HttpRoute(target); - } else { - return new HttpRoute(target, null, proxy, false); - } - } - } - - /** @hide */ - public static final HttpRoutePlanner getAndroidProxySelectorRoutePlanner(Context context) { - AndroidProxySelectorRoutePlanner ret = new AndroidProxySelectorRoutePlanner( - new SchemeRegistry(), ProxySelector.getDefault(), context); - return ret; - } - /** @hide */ public static final void setHttpProxySystemProperty(ProxyProperties p) { String host = null; diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index f05ddde..9e9820f 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -173,6 +173,8 @@ public abstract class BatteryStats implements Parcelable { private static final String BLUETOOTH_STATE_COUNT_DATA = "bsc"; private static final String POWER_USE_SUMMARY_DATA = "pws"; private static final String POWER_USE_ITEM_DATA = "pwi"; + private static final String DISCHARGE_STEP_DATA = "dsd"; + private static final String CHARGE_STEP_DATA = "csd"; private final StringBuilder mFormatBuilder = new StringBuilder(32); private final Formatter mFormatter = new Formatter(mFormatBuilder); @@ -1340,6 +1342,18 @@ public abstract class BatteryStats implements Parcelable { public abstract long computeBatteryTimeRemaining(long curTime); /** + * Return the historical number of discharge steps we currently have. + */ + public abstract int getNumDischargeStepDurations(); + + /** + * Return the array of discharge step durations; the number of valid + * items in it is returned by {@link #getNumDischargeStepDurations()}. + * These values are in milliseconds. + */ + public abstract long[] getDischargeStepDurationsArray(); + + /** * Compute an approximation for how much time (in microseconds) remains until the battery * is fully charged. Returns -1 if no time can be computed: either there is not * enough current data to make a decision, or the battery is currently @@ -1349,6 +1363,18 @@ public abstract class BatteryStats implements Parcelable { */ public abstract long computeChargeTimeRemaining(long curTime); + /** + * Return the historical number of charge steps we currently have. + */ + public abstract int getNumChargeStepDurations(); + + /** + * Return the array of charge step durations; the number of valid + * items in it is returned by {@link #getNumChargeStepDurations()}. + * These values are in milliseconds. + */ + public abstract long[] getChargeStepDurationsArray(); + public abstract Map<String, ? extends LongCounter> getWakeupReasonStats(); public abstract Map<String, ? extends Timer> getKernelWakelockStats(); @@ -3120,6 +3146,28 @@ public abstract class BatteryStats implements Parcelable { pw.print(suffix); } + private static boolean dumpDurationSteps(PrintWriter pw, String header, long[] steps, + int count, boolean checkin) { + if (count <= 0) { + return false; + } + if (!checkin) { + pw.println(header); + } + String[] lineArgs = new String[1]; + for (int i=0; i<count; i++) { + if (checkin) { + lineArgs[0] = Long.toString(steps[i]); + dumpLine(pw, 0 /* uid */, "i" /* category */, header, (Object[])lineArgs); + } else { + pw.print(" #"); pw.print(i); pw.print(": "); + TimeUtils.formatDuration(steps[i], pw); + pw.println(); + } + } + return true; + } + public static final int DUMP_UNPLUGGED_ONLY = 1<<0; public static final int DUMP_CHARGED_ONLY = 1<<1; public static final int DUMP_HISTORY_ONLY = 1<<2; @@ -3239,7 +3287,27 @@ public abstract class BatteryStats implements Parcelable { } } if (didPid) { - pw.println(""); + pw.println(); + } + if (dumpDurationSteps(pw, "Discharge step durations:", getDischargeStepDurationsArray(), + getNumDischargeStepDurations(), false)) { + long timeRemaining = computeBatteryTimeRemaining(SystemClock.elapsedRealtime()); + if (timeRemaining >= 0) { + pw.print(" Estimated discharge time remaining: "); + TimeUtils.formatDuration(timeRemaining / 1000, pw); + pw.println(); + } + pw.println(); + } + if (dumpDurationSteps(pw, "Charge step durations:", getChargeStepDurationsArray(), + getNumChargeStepDurations(), false)) { + long timeRemaining = computeChargeTimeRemaining(SystemClock.elapsedRealtime()); + if (timeRemaining >= 0) { + pw.print(" Estimated charge time remaining: "); + TimeUtils.formatDuration(timeRemaining / 1000, pw); + pw.println(); + } + pw.println(); } } @@ -3248,7 +3316,7 @@ public abstract class BatteryStats implements Parcelable { pw.println(" System starts: " + getStartCount() + ", currently on battery: " + getIsOnBattery()); dumpLocked(context, pw, "", STATS_SINCE_CHARGED, reqUid); - pw.println(""); + pw.println(); } if (!filtering || (flags&DUMP_UNPLUGGED_ONLY) != 0) { pw.println("Statistics since last unplugged:"); @@ -3352,6 +3420,12 @@ public abstract class BatteryStats implements Parcelable { } } } + if (!filtering) { + dumpDurationSteps(pw, DISCHARGE_STEP_DATA, getDischargeStepDurationsArray(), + getNumDischargeStepDurations(), true); + dumpDurationSteps(pw, CHARGE_STEP_DATA, getChargeStepDurationsArray(), + getNumChargeStepDurations(), true); + } if (!filtering || (flags&DUMP_CHARGED_ONLY) != 0) { dumpCheckinLocked(context, pw, STATS_SINCE_CHARGED, -1); } diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java index 0336dd6..1ca6b90 100644 --- a/core/java/android/os/Build.java +++ b/core/java/android/os/Build.java @@ -81,12 +81,38 @@ public class Build { public static final String SERIAL = getString("ro.serialno"); /** - * A list of ABIs (in priority) order supported by this device. + * An ordered list of ABIs supported by this device. The most preferred ABI is the first + * element in the list. + * + * See {@link #SUPPORTED_32_BIT_ABIS} and {@link #SUPPORTED_64_BIT_ABIS}. * * @hide */ public static final String[] SUPPORTED_ABIS = getString("ro.product.cpu.abilist").split(","); + /** + * An ordered list of <b>32 bit</b> ABIs supported by this device. The most preferred ABI + * is the first element in the list. + * + * See {@link #SUPPORTED_ABIS} and {@link #SUPPORTED_64_BIT_ABIS}. + * + * @hide + */ + public static final String[] SUPPORTED_32_BIT_ABIS = getString("ro.product.cpu.abilist32") + .split(","); + + /** + * An ordered list of <b>64 bit</b> ABIs supported by this device. The most preferred ABI + * is the first element in the list. + * + * See {@link #SUPPORTED_ABIS} and {@link #SUPPORTED_32_BIT_ABIS}. + * + * @hide + */ + public static final String[] SUPPORTED_64_BIT_ABIS = getString("ro.product.cpu.abilist64") + .split(","); + + /** Various version strings. */ public static class VERSION { /** diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl index c3f7370..899a958 100644 --- a/core/java/android/os/IUserManager.aidl +++ b/core/java/android/os/IUserManager.aidl @@ -29,6 +29,7 @@ import android.graphics.Bitmap; interface IUserManager { UserInfo createUser(in String name, int flags); UserInfo createProfileForUser(in String name, int flags, int userHandle); + void setUserEnabled(int userHandle); boolean removeUser(int userHandle); void setUserName(int userHandle, String name); void setUserIcon(int userHandle, in Bitmap icon); diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index b4ed68c..1b3aa0a 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -707,16 +707,6 @@ public class Process { return primaryZygoteState; } - // TODO: Get rid of this. This is a temporary workaround until all the - // compilation related pieces for the dual zygote stack are ready. - // b/3647418. - if (System.getenv("ANDROID_SOCKET_" + SECONDARY_ZYGOTE_SOCKET) == null) { - Log.e(LOG_TAG, "Forcing app to primary zygote, secondary unavailable (ABI= " + abi + ")"); - // Should be : - // throw new ZygoteStartFailedEx("Unsupported zygote ABI: " + abi); - return primaryZygoteState; - } - // The primary zygote didn't match. Try the secondary. if (secondaryZygoteState == null || secondaryZygoteState.isClosed()) { secondaryZygoteState = ZygoteState.connect(SECONDARY_ZYGOTE_SOCKET, diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 1fe9337..1b2b798 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -437,6 +437,22 @@ public class UserManager { } /** + * Sets the user as enabled, if such an user exists. + * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. + * Note that the default is true, it's only that managed profiles might not be enabled. + * + * @param userHandle the id of the profile to enable + * @hide + */ + public void setUserEnabled(int userHandle) { + try { + mService.setUserEnabled(userHandle); + } catch (RemoteException e) { + Log.w(TAG, "Could not enable the profile", e); + } + } + + /** * Return the number of users currently created on the device. */ public int getUserCount() { @@ -488,8 +504,7 @@ public class UserManager { ArrayList<UserHandle> profiles = new ArrayList<UserHandle>(); List<UserInfo> users = new ArrayList<UserInfo>(); try { - // TODO: Switch enabledOnly to true once client apps are updated - users = mService.getProfiles(UserHandle.myUserId(), false /* enabledOnly */); + users = mService.getProfiles(UserHandle.myUserId(), true /* enabledOnly */); } catch (RemoteException re) { Log.w(TAG, "Could not get user list", re); return null; diff --git a/core/java/android/provider/TvContract.java b/core/java/android/provider/TvContract.java index 233e0ca..62252be 100644 --- a/core/java/android/provider/TvContract.java +++ b/core/java/android/provider/TvContract.java @@ -16,9 +16,13 @@ package android.provider; +import android.content.ComponentName; +import android.content.ContentResolver; import android.content.ContentUris; import android.net.Uri; +import java.util.List; + /** * <p> * The contract between the TV provider and applications. Contains definitions for the supported @@ -42,6 +46,35 @@ public final class TvContract { /** The authority for the TV provider. */ public static final String AUTHORITY = "com.android.tv"; + private static final String PATH_CHANNEL = "channel"; + private static final String PATH_PROGRAM = "program"; + private static final String PATH_INPUT = "input"; + + /** + * An optional query, update or delete URI parameter that allows the caller to specify start + * time (in milliseconds since the epoch) to filter programs. + * + * @hide + */ + public static final String PARAM_START_TIME = "start_time"; + + /** + * An optional query, update or delete URI parameter that allows the caller to specify end time + * (in milliseconds since the epoch) to filter programs. + * + * @hide + */ + public static final String PARAM_END_TIME = "end_time"; + + /** + * A query, update or delete URI parameter that allows the caller to operate on all or + * browsable-only channels. If set to "true", the rows that contain non-browsable channels are + * not affected. + * + * @hide + */ + public static final String PARAM_BROWSABLE_ONLY = "browable_only"; + /** * Builds a URI that points to a specific channel. * @@ -52,6 +85,32 @@ public final class TvContract { } /** + * Builds a URI that points to all browsable channels from a given TV input. + * + * @param name {@link ComponentName} of the {@link android.tv.TvInputService} that implements + * the given TV input. + */ + public static final Uri buildChannelsUriForInput(ComponentName name) { + return buildChannelsUriForInput(name, true); + } + + /** + * Builds a URI that points to all or browsable-only channels from a given TV input. + * + * @param name {@link ComponentName} of the {@link android.tv.TvInputService} that implements + * the given TV input. + * @param browsableOnly If set to {@code true} the URI points to only browsable channels. If set + * to {@code false} the URI points to all channels regardless of whether they are + * browsable or not. + */ + public static final Uri buildChannelsUriForInput(ComponentName name, boolean browsableOnly) { + return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY) + .appendPath(PATH_INPUT).appendPath(name.getPackageName()) + .appendPath(name.getClassName()).appendPath(PATH_CHANNEL) + .appendQueryParameter(PARAM_BROWSABLE_ONLY, String.valueOf(browsableOnly)).build(); + } + + /** * Builds a URI that points to a specific program. * * @param programId The ID of the program to point to. @@ -61,6 +120,37 @@ public final class TvContract { } /** + * Builds a URI that points to all programs on a given channel. + * + * @param channelUri The URI of the channel to return programs for. + */ + public static final Uri buildProgramsUriForChannel(Uri channelUri) { + if (!PATH_CHANNEL.equals(channelUri.getPathSegments().get(0))) { + throw new IllegalArgumentException("Not a channel: " + channelUri); + } + String channelId = String.valueOf(ContentUris.parseId(channelUri)); + return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY) + .appendPath(PATH_CHANNEL).appendPath(channelId).appendPath(PATH_PROGRAM).build(); + } + + /** + * Builds a URI that points to programs on a specific channel whose schedules overlap with the + * given time frame. + * + * @param channelUri The URI of the channel to return programs for. + * @param startTime The start time used to filter programs. The returned programs should have + * {@link Programs#END_TIME_UTC_MILLIS} that is greater than this time. + * @param endTime The end time used to filter programs. The returned programs should have + * {@link Programs#START_TIME_UTC_MILLIS} that is less than this time. + */ + public static final Uri buildProgramsUriForChannel(Uri channelUri, long startTime, + long endTime) { + Uri uri = buildProgramsUriForChannel(channelUri); + return uri.buildUpon().appendQueryParameter(PARAM_START_TIME, String.valueOf(startTime)) + .appendQueryParameter(PARAM_END_TIME, String.valueOf(endTime)).build(); + } + + /** * Builds a URI that points to a specific program the user watched. * * @param watchedProgramId The ID of the watched program to point to. @@ -70,6 +160,61 @@ public final class TvContract { return ContentUris.withAppendedId(WatchedPrograms.CONTENT_URI, watchedProgramId); } + /** + * Extracts the {@link Channels#PACKAGE_NAME} from a given URI. + * + * @param channelsUri A URI constructed by {@link #buildChannelsUriForInput(ComponentName)} or + * {@link #buildChannelsUriForInput(ComponentName, boolean)}. + * @hide + */ + public static final String getPackageName(Uri channelsUri) { + final List<String> paths = channelsUri.getPathSegments(); + if (paths.size() < 4) { + throw new IllegalArgumentException("Not channels: " + channelsUri); + } + if (!PATH_INPUT.equals(paths.get(0)) || !PATH_CHANNEL.equals(paths.get(3))) { + throw new IllegalArgumentException("Not channels: " + channelsUri); + } + return paths.get(1); + } + + /** + * Extracts the {@link Channels#SERVICE_NAME} from a given URI. + * + * @param channelsUri A URI constructed by {@link #buildChannelsUriForInput(ComponentName)} or + * {@link #buildChannelsUriForInput(ComponentName, boolean)}. + * @hide + */ + public static final String getServiceName(Uri channelsUri) { + final List<String> paths = channelsUri.getPathSegments(); + if (paths.size() < 4) { + throw new IllegalArgumentException("Not channels: " + channelsUri); + } + if (!PATH_INPUT.equals(paths.get(0)) || !PATH_CHANNEL.equals(paths.get(3))) { + throw new IllegalArgumentException("Not channels: " + channelsUri); + } + return paths.get(2); + } + + /** + * Extracts the {@link Channels#_ID} from a given URI. + * + * @param programsUri A URI constructed by {@link #buildProgramsUriForChannel(Uri)} or + * {@link #buildProgramsUriForChannel(Uri, long, long)}. + * @hide + */ + public static final String getChannelId(Uri programsUri) { + final List<String> paths = programsUri.getPathSegments(); + if (paths.size() < 3) { + throw new IllegalArgumentException("Not programs: " + programsUri); + } + if (!PATH_CHANNEL.equals(paths.get(0)) || !PATH_PROGRAM.equals(paths.get(2))) { + throw new IllegalArgumentException("Not programs: " + programsUri); + } + return paths.get(1); + } + + private TvContract() {} /** @@ -93,7 +238,8 @@ public final class TvContract { public static final class Channels implements BaseTvColumns { /** The content:// style URI for this table. */ - public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/channel"); + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + + PATH_CHANNEL); /** The MIME type of a directory of TV channels. */ public static final String CONTENT_TYPE = @@ -276,7 +422,8 @@ public final class TvContract { public static final class Programs implements BaseTvColumns { /** The content:// style URI for this table. */ - public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/program"); + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + + PATH_PROGRAM); /** The MIME type of a directory of TV programs. */ public static final String CONTENT_TYPE = diff --git a/core/java/android/service/notification/Condition.java b/core/java/android/service/notification/Condition.java index 71e3166..aa724f0 100644 --- a/core/java/android/service/notification/Condition.java +++ b/core/java/android/service/notification/Condition.java @@ -41,16 +41,25 @@ public class Condition implements Parcelable { public static final int FLAG_RELEVANT_ALWAYS = 1 << 1; public final Uri id; - public String caption; - public int state; - public int flags; - - public Condition(Uri id, String caption, int state, int flags) { + public final String summary; + public final String line1; + public final String line2; + public final int icon; + public final int state; + public final int flags; + + public Condition(Uri id, String summary, String line1, String line2, int icon, + int state, int flags) { if (id == null) throw new IllegalArgumentException("id is required"); - if (caption == null) throw new IllegalArgumentException("caption is required"); + if (summary == null) throw new IllegalArgumentException("summary is required"); + if (line1 == null) throw new IllegalArgumentException("line1 is required"); + if (line2 == null) throw new IllegalArgumentException("line2 is required"); if (!isValidState(state)) throw new IllegalArgumentException("state is invalid: " + state); this.id = id; - this.caption = caption; + this.summary = summary; + this.line1 = line1; + this.line2 = line2; + this.icon = icon; this.state = state; this.flags = flags; } @@ -58,6 +67,9 @@ public class Condition implements Parcelable { private Condition(Parcel source) { this((Uri)source.readParcelable(Condition.class.getClassLoader()), source.readString(), + source.readString(), + source.readString(), + source.readInt(), source.readInt(), source.readInt()); } @@ -69,16 +81,22 @@ public class Condition implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeParcelable(id, 0); - dest.writeString(caption); + dest.writeString(summary); + dest.writeString(line1); + dest.writeString(line2); + dest.writeInt(icon); dest.writeInt(state); - dest.writeInt(flags); + dest.writeInt(this.flags); } @Override public String toString() { return new StringBuilder(Condition.class.getSimpleName()).append('[') .append("id=").append(id) - .append(",caption=").append(caption) + .append(",summary=").append(summary) + .append(",line1=").append(line1) + .append(",line2=").append(line2) + .append(",icon=").append(icon) .append(",state=").append(stateToString(state)) .append(",flags=").append(flags) .append(']').toString(); @@ -92,20 +110,31 @@ public class Condition implements Parcelable { throw new IllegalArgumentException("state is invalid: " + state); } + public static String relevanceToString(int flags) { + final boolean now = (flags & FLAG_RELEVANT_NOW) != 0; + final boolean always = (flags & FLAG_RELEVANT_ALWAYS) != 0; + if (!now && !always) return "NONE"; + if (now && always) return "NOW, ALWAYS"; + return now ? "NOW" : "ALWAYS"; + } + @Override public boolean equals(Object o) { if (!(o instanceof Condition)) return false; if (o == this) return true; final Condition other = (Condition) o; return Objects.equals(other.id, id) - && Objects.equals(other.caption, caption) + && Objects.equals(other.summary, summary) + && Objects.equals(other.line1, line1) + && Objects.equals(other.line2, line2) + && other.icon == icon && other.state == state && other.flags == flags; } @Override public int hashCode() { - return Objects.hash(id, caption, state, flags); + return Objects.hash(id, summary, line1, line2, icon, state, flags); } @Override diff --git a/core/java/android/service/notification/ConditionProviderService.java b/core/java/android/service/notification/ConditionProviderService.java index d6ef8f5..326412f 100644 --- a/core/java/android/service/notification/ConditionProviderService.java +++ b/core/java/android/service/notification/ConditionProviderService.java @@ -22,7 +22,9 @@ import android.app.Service; import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.os.Handler; import android.os.IBinder; +import android.os.Message; import android.os.ServiceManager; import android.util.Log; @@ -46,6 +48,8 @@ public abstract class ConditionProviderService extends Service { private final String TAG = ConditionProviderService.class.getSimpleName() + "[" + getClass().getSimpleName() + "]"; + private final H mHandler = new H(); + private Provider mProvider; private INotificationManager mNoMan; @@ -100,41 +104,57 @@ public abstract class ConditionProviderService extends Service { } private final class Provider extends IConditionProvider.Stub { - private final ConditionProviderService mService = ConditionProviderService.this; - @Override public void onConnected() { - try { - mService.onConnected(); - } catch (Throwable t) { - Log.w(TAG, "Error running onConnected", t); - } + mHandler.obtainMessage(H.ON_CONNECTED).sendToTarget(); } @Override public void onRequestConditions(int relevance) { - try { - mService.onRequestConditions(relevance); - } catch (Throwable t) { - Log.w(TAG, "Error running onRequestConditions", t); - } + mHandler.obtainMessage(H.ON_REQUEST_CONDITIONS, relevance, 0).sendToTarget(); } @Override public void onSubscribe(Uri conditionId) { - try { - mService.onSubscribe(conditionId); - } catch (Throwable t) { - Log.w(TAG, "Error running onSubscribe", t); - } + mHandler.obtainMessage(H.ON_SUBSCRIBE, conditionId).sendToTarget(); } @Override public void onUnsubscribe(Uri conditionId) { + mHandler.obtainMessage(H.ON_UNSUBSCRIBE, conditionId).sendToTarget(); + } + } + + private final class H extends Handler { + private static final int ON_CONNECTED = 1; + private static final int ON_REQUEST_CONDITIONS = 2; + private static final int ON_SUBSCRIBE = 3; + private static final int ON_UNSUBSCRIBE = 4; + + @Override + public void handleMessage(Message msg) { + String name = null; try { - mService.onUnsubscribe(conditionId); + switch(msg.what) { + case ON_CONNECTED: + name = "onConnected"; + onConnected(); + break; + case ON_REQUEST_CONDITIONS: + name = "onRequestConditions"; + onRequestConditions(msg.arg1); + break; + case ON_SUBSCRIBE: + name = "onSubscribe"; + onSubscribe((Uri)msg.obj); + break; + case ON_UNSUBSCRIBE: + name = "onUnsubscribe"; + onUnsubscribe((Uri)msg.obj); + break; + } } catch (Throwable t) { - Log.w(TAG, "Error running onUnsubscribe", t); + Log.w(TAG, "Error running " + name, t); } } } diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java index 925ddcf..846e292 100644 --- a/core/java/android/service/notification/ZenModeConfig.java +++ b/core/java/android/service/notification/ZenModeConfig.java @@ -16,6 +16,8 @@ package android.service.notification; +import android.content.ComponentName; +import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -25,6 +27,8 @@ import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Objects; /** @@ -51,6 +55,10 @@ public class ZenModeConfig implements Parcelable { private static final String SLEEP_ATT_END_HR = "endHour"; private static final String SLEEP_ATT_END_MIN = "endMin"; + private static final String CONDITION_TAG = "condition"; + private static final String CONDITION_ATT_COMPONENT = "component"; + private static final String CONDITION_ATT_ID = "id"; + public boolean allowCalls; public boolean allowMessages; @@ -59,6 +67,8 @@ public class ZenModeConfig implements Parcelable { public int sleepStartMinute; public int sleepEndHour; public int sleepEndMinute; + public ComponentName[] conditionComponents; + public Uri[] conditionIds; public ZenModeConfig() { } @@ -72,6 +82,16 @@ public class ZenModeConfig implements Parcelable { sleepStartMinute = source.readInt(); sleepEndHour = source.readInt(); sleepEndMinute = source.readInt(); + int len = source.readInt(); + if (len > 0) { + conditionComponents = new ComponentName[len]; + source.readTypedArray(conditionComponents, ComponentName.CREATOR); + } + len = source.readInt(); + if (len > 0) { + conditionIds = new Uri[len]; + source.readTypedArray(conditionIds, Uri.CREATOR); + } } @Override @@ -88,6 +108,18 @@ public class ZenModeConfig implements Parcelable { dest.writeInt(sleepStartMinute); dest.writeInt(sleepEndHour); dest.writeInt(sleepEndMinute); + if (conditionComponents != null && conditionComponents.length > 0) { + dest.writeInt(conditionComponents.length); + dest.writeTypedArray(conditionComponents, 0); + } else { + dest.writeInt(0); + } + if (conditionIds != null && conditionIds.length > 0) { + dest.writeInt(conditionIds.length); + dest.writeTypedArray(conditionIds, 0); + } else { + dest.writeInt(0); + } } @Override @@ -98,6 +130,10 @@ public class ZenModeConfig implements Parcelable { .append(",sleepMode=").append(sleepMode) .append(",sleepStart=").append(sleepStartHour).append('.').append(sleepStartMinute) .append(",sleepEnd=").append(sleepEndHour).append('.').append(sleepEndMinute) + .append(",conditionComponents=") + .append(conditionComponents == null ? null : TextUtils.join(",", conditionComponents)) + .append(",conditionIds=") + .append(conditionIds == null ? null : TextUtils.join(",", conditionIds)) .append(']').toString(); } @@ -112,13 +148,16 @@ public class ZenModeConfig implements Parcelable { && other.sleepStartHour == sleepStartHour && other.sleepStartMinute == sleepStartMinute && other.sleepEndHour == sleepEndHour - && other.sleepEndMinute == sleepEndMinute; + && other.sleepEndMinute == sleepEndMinute + && Objects.deepEquals(other.conditionComponents, conditionComponents) + && Objects.deepEquals(other.conditionIds, conditionIds); } @Override public int hashCode() { return Objects.hash(allowCalls, allowMessages, sleepMode, sleepStartHour, - sleepStartMinute, sleepEndHour, sleepEndMinute); + sleepStartMinute, sleepEndHour, sleepEndMinute, + Arrays.hashCode(conditionComponents), Arrays.hashCode(conditionIds)); } public boolean isValid() { @@ -136,9 +175,18 @@ public class ZenModeConfig implements Parcelable { if (!ZEN_TAG.equals(tag)) return null; final ZenModeConfig rt = new ZenModeConfig(); final int version = Integer.parseInt(parser.getAttributeValue(null, ZEN_ATT_VERSION)); + final ArrayList<ComponentName> conditionComponents = new ArrayList<ComponentName>(); + final ArrayList<Uri> conditionIds = new ArrayList<Uri>(); while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) { tag = parser.getName(); - if (type == XmlPullParser.END_TAG && ZEN_TAG.equals(tag)) return rt; + if (type == XmlPullParser.END_TAG && ZEN_TAG.equals(tag)) { + if (!conditionComponents.isEmpty()) { + rt.conditionComponents = conditionComponents + .toArray(new ComponentName[conditionComponents.size()]); + rt.conditionIds = conditionIds.toArray(new Uri[conditionIds.size()]); + } + return rt; + } if (type == XmlPullParser.START_TAG) { if (ALLOW_TAG.equals(tag)) { rt.allowCalls = safeBoolean(parser, ALLOW_ATT_CALLS, false); @@ -155,10 +203,18 @@ public class ZenModeConfig implements Parcelable { rt.sleepStartMinute = isValidMinute(startMinute) ? startMinute : 0; rt.sleepEndHour = isValidHour(endHour) ? endHour : 0; rt.sleepEndMinute = isValidMinute(endMinute) ? endMinute : 0; + } else if (CONDITION_TAG.equals(tag)) { + final ComponentName component = + safeComponentName(parser, CONDITION_ATT_COMPONENT); + final Uri conditionId = safeUri(parser, CONDITION_ATT_ID); + if (component != null && conditionId != null) { + conditionComponents.add(component); + conditionIds.add(conditionId); + } } } } - return rt; + throw new IllegalStateException("Failed to reach END_DOCUMENT"); } public void writeXml(XmlSerializer out) throws IOException { @@ -180,6 +236,16 @@ public class ZenModeConfig implements Parcelable { out.attribute(null, SLEEP_ATT_END_MIN, Integer.toString(sleepEndMinute)); out.endTag(null, SLEEP_TAG); + if (conditionComponents != null && conditionIds != null + && conditionComponents.length == conditionIds.length) { + for (int i = 0; i < conditionComponents.length; i++) { + out.startTag(null, CONDITION_TAG); + out.attribute(null, CONDITION_ATT_COMPONENT, + conditionComponents[i].flattenToString()); + out.attribute(null, CONDITION_ATT_ID, conditionIds[i].toString()); + out.endTag(null, CONDITION_TAG); + } + } out.endTag(null, ZEN_TAG); } @@ -203,6 +269,18 @@ public class ZenModeConfig implements Parcelable { return Integer.valueOf(val); } + private static ComponentName safeComponentName(XmlPullParser parser, String att) { + final String val = parser.getAttributeValue(null, att); + if (TextUtils.isEmpty(val)) return null; + return ComponentName.unflattenFromString(val); + } + + private static Uri safeUri(XmlPullParser parser, String att) { + final String val = parser.getAttributeValue(null, att); + if (TextUtils.isEmpty(val)) return null; + return Uri.parse(val); + } + @Override public int describeContents() { return 0; diff --git a/core/java/android/transition/ChangeClipBounds.java b/core/java/android/transition/ChangeClipBounds.java new file mode 100644 index 0000000..a61b29d --- /dev/null +++ b/core/java/android/transition/ChangeClipBounds.java @@ -0,0 +1,96 @@ +/* + * 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 android.transition; + +import android.animation.Animator; +import android.animation.ObjectAnimator; +import android.animation.RectEvaluator; +import android.graphics.Rect; +import android.view.View; +import android.view.ViewGroup; + +/** + * ChangeClipBounds captures the {@link android.view.View#getClipBounds()} before and after the + * scene change and animates those changes during the transition. + */ +public class ChangeClipBounds extends Transition { + + private static final String TAG = "ChangeTransform"; + + private static final String PROPNAME_CLIP = "android:clipBounds:clip"; + private static final String PROPNAME_BOUNDS = "android:clipBounds:bounds"; + + private static final String[] sTransitionProperties = { + PROPNAME_CLIP, + }; + + @Override + public String[] getTransitionProperties() { + return sTransitionProperties; + } + + private void captureValues(TransitionValues values) { + View view = values.view; + if (view.getVisibility() == View.GONE) { + return; + } + + Rect clip = view.getClipBounds(); + values.values.put(PROPNAME_CLIP, clip); + if (clip == null) { + Rect bounds = new Rect(0, 0, view.getWidth(), view.getHeight()); + values.values.put(PROPNAME_BOUNDS, bounds); + } + } + + @Override + public void captureStartValues(TransitionValues transitionValues) { + captureValues(transitionValues); + } + + @Override + public void captureEndValues(TransitionValues transitionValues) { + captureValues(transitionValues); + } + + @Override + public Animator createAnimator(final ViewGroup sceneRoot, TransitionValues startValues, + TransitionValues endValues) { + if (startValues == null || endValues == null + || !startValues.values.containsKey(PROPNAME_CLIP) + || !endValues.values.containsKey(PROPNAME_CLIP)) { + return null; + } + Rect start = (Rect) startValues.values.get(PROPNAME_CLIP); + Rect end = (Rect) endValues.values.get(PROPNAME_CLIP); + if (start == null && end == null) { + return null; // No animation required since there is no clip. + } + + if (start == null) { + start = (Rect) startValues.values.get(PROPNAME_BOUNDS); + } else if (end == null) { + end = (Rect) endValues.values.get(PROPNAME_BOUNDS); + } + if (start.equals(end)) { + return null; + } + + endValues.view.setClipBounds(start); + RectEvaluator evaluator = new RectEvaluator(new Rect()); + return ObjectAnimator.ofObject(endValues.view, "clipBounds", evaluator, start, end); + } +} diff --git a/core/java/android/transition/ChangeTransform.java b/core/java/android/transition/ChangeTransform.java new file mode 100644 index 0000000..85cb2c7 --- /dev/null +++ b/core/java/android/transition/ChangeTransform.java @@ -0,0 +1,163 @@ +/* + * 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 android.transition; + +import android.animation.Animator; +import android.animation.FloatArrayEvaluator; +import android.animation.ObjectAnimator; +import android.util.FloatProperty; +import android.util.Property; +import android.view.View; +import android.view.ViewGroup; + +/** + * This Transition captures scale and rotation for Views before and after the + * scene change and animates those changes during the transition. + * + * <p>ChangeTransform does not work when the pivot changes between scenes, so either the + * pivot must be set to prevent automatic pivot adjustment or the View's size must be unchanged.</p> + */ +public class ChangeTransform extends Transition { + + private static final String TAG = "ChangeTransform"; + + private static final String PROPNAME_SCALE_X = "android:changeTransform:scaleX"; + private static final String PROPNAME_SCALE_Y = "android:changeTransform:scaleY"; + private static final String PROPNAME_ROTATION_X = "android:changeTransform:rotationX"; + private static final String PROPNAME_ROTATION_Y = "android:changeTransform:rotationY"; + private static final String PROPNAME_ROTATION_Z = "android:changeTransform:rotationZ"; + private static final String PROPNAME_PIVOT_X = "android:changeTransform:pivotX"; + private static final String PROPNAME_PIVOT_Y = "android:changeTransform:pivotY"; + + private static final String[] sTransitionProperties = { + PROPNAME_SCALE_X, + PROPNAME_SCALE_Y, + PROPNAME_ROTATION_X, + PROPNAME_ROTATION_Y, + PROPNAME_ROTATION_Z, + }; + + private static final FloatProperty<View>[] sChangedProperties = new FloatProperty[] { + (FloatProperty) View.SCALE_X, + (FloatProperty) View.SCALE_Y, + (FloatProperty) View.ROTATION_X, + (FloatProperty) View.ROTATION_Y, + (FloatProperty) View.ROTATION, + }; + + private static Property<View, float[]> TRANSFORMS = new Property<View, float[]>(float[].class, + "transforms") { + @Override + public float[] get(View object) { + return null; + } + + @Override + public void set(View view, float[] values) { + for (int i = 0; i < values.length; i++) { + float value = values[i]; + if (value != Float.NaN) { + sChangedProperties[i].setValue(view, value); + } + } + } + }; + + @Override + public String[] getTransitionProperties() { + return sTransitionProperties; + } + + private void captureValues(TransitionValues values) { + View view = values.view; + if (view.getVisibility() == View.GONE) { + return; + } + + values.values.put(PROPNAME_SCALE_X, view.getScaleX()); + values.values.put(PROPNAME_SCALE_Y, view.getScaleY()); + values.values.put(PROPNAME_PIVOT_X, view.getPivotX()); + values.values.put(PROPNAME_PIVOT_Y, view.getPivotY()); + values.values.put(PROPNAME_ROTATION_X, view.getRotationX()); + values.values.put(PROPNAME_ROTATION_Y, view.getRotationY()); + values.values.put(PROPNAME_ROTATION_Z, view.getRotation()); + } + + @Override + public void captureStartValues(TransitionValues transitionValues) { + captureValues(transitionValues); + } + + @Override + public void captureEndValues(TransitionValues transitionValues) { + captureValues(transitionValues); + } + + @Override + public Animator createAnimator(final ViewGroup sceneRoot, TransitionValues startValues, + TransitionValues endValues) { + if (startValues == null || endValues == null + || !startValues.values.containsKey(PROPNAME_SCALE_X) + || !endValues.values.containsKey(PROPNAME_SCALE_X) + || !isPivotSame(startValues, endValues) + || !isChanged(startValues, endValues)) { + return null; + } + + float[] start = createValues(startValues); + float[] end = createValues(endValues); + for (int i = 0; i < start.length; i++) { + if (start[i] == end[i]) { + start[i] = Float.NaN; + end[i] = Float.NaN; + } else { + sChangedProperties[i].setValue(endValues.view, start[i]); + } + } + FloatArrayEvaluator evaluator = new FloatArrayEvaluator(new float[start.length]); + return ObjectAnimator.ofObject(endValues.view, TRANSFORMS, evaluator, start, end); + } + + private static float[] createValues(TransitionValues transitionValues) { + float[] values = new float[sChangedProperties.length]; + for (int i = 0; i < values.length; i++) { + values[i] = (Float) transitionValues.values.get(sTransitionProperties[i]); + } + return values; + } + + private static boolean isPivotSame(TransitionValues startValues, TransitionValues endValues) { + float startPivotX = (Float) startValues.values.get(PROPNAME_PIVOT_X); + float startPivotY = (Float) startValues.values.get(PROPNAME_PIVOT_Y); + float endPivotX = (Float) endValues.values.get(PROPNAME_PIVOT_X); + float endPivotY = (Float) endValues.values.get(PROPNAME_PIVOT_Y); + + // We don't support pivot changes, because they could be automatically set + // and we can't end the state in an automatic state. + return startPivotX == endPivotX && startPivotY == endPivotY; + } + + private static boolean isChanged(TransitionValues startValues, TransitionValues endValues) { + for (int i = 0; i < sChangedProperties.length; i++) { + Object start = startValues.values.get(sTransitionProperties[i]); + Object end = endValues.values.get(sTransitionProperties[i]); + if (!start.equals(end)) { + return true; + } + } + return false; + } +} diff --git a/core/java/android/transition/CircularPropagation.java b/core/java/android/transition/CircularPropagation.java index 18a3d22..51beb51 100644 --- a/core/java/android/transition/CircularPropagation.java +++ b/core/java/android/transition/CircularPropagation.java @@ -34,7 +34,7 @@ import android.view.ViewGroup; public class CircularPropagation extends VisibilityPropagation { private static final String TAG = "CircularPropagation"; - private float mPropagationSpeed = 4.0f; + private float mPropagationSpeed = 3.0f; /** * Sets the speed at which transition propagation happens, relative to the duration of the @@ -91,8 +91,12 @@ public class CircularPropagation extends VisibilityPropagation { float maxDistance = distance(0, 0, sceneRoot.getWidth(), sceneRoot.getHeight()); float distanceFraction = distance/maxDistance; - return Math.round(transition.getDuration() * directionMultiplier / mPropagationSpeed - * distanceFraction); + long duration = transition.getDuration(); + if (duration < 0) { + duration = 300; + } + + return Math.round(duration * directionMultiplier / mPropagationSpeed * distanceFraction); } private static float distance(float x1, float y1, float x2, float y2) { diff --git a/core/java/android/transition/MoveImage.java b/core/java/android/transition/MoveImage.java index d68e971..e4c3939 100644 --- a/core/java/android/transition/MoveImage.java +++ b/core/java/android/transition/MoveImage.java @@ -170,13 +170,20 @@ public class MoveImage extends Transition { drawable = drawable.getConstantState().newDrawable(); final MatrixClippedDrawable matrixClippedDrawable = new MatrixClippedDrawable(drawable); + final ImageView overlayImage = new ImageView(imageView.getContext()); + final ViewGroupOverlay overlay = sceneRoot.getOverlay(); + overlay.add(overlayImage); + overlayImage.setLeft(0); + overlayImage.setTop(0); + overlayImage.setRight(sceneRoot.getWidth()); + overlayImage.setBottom(sceneRoot.getBottom()); + overlayImage.setScaleType(ImageView.ScaleType.MATRIX); + overlayImage.setImageDrawable(matrixClippedDrawable); matrixClippedDrawable.setMatrix(startMatrix); matrixClippedDrawable.setBounds(startBounds); matrixClippedDrawable.setClipRect(startClip); imageView.setVisibility(View.INVISIBLE); - final ViewGroupOverlay overlay = sceneRoot.getOverlay(); - overlay.add(matrixClippedDrawable); ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(matrixClippedDrawable, changes.toArray(new PropertyValuesHolder[changes.size()])); @@ -184,19 +191,24 @@ public class MoveImage extends Transition { @Override public void onAnimationEnd(Animator animation) { imageView.setVisibility(View.VISIBLE); - overlay.remove(matrixClippedDrawable); + overlay.remove(overlayImage); } @Override public void onAnimationPause(Animator animation) { imageView.setVisibility(View.VISIBLE); - overlay.remove(matrixClippedDrawable); + overlayImage.setVisibility(View.INVISIBLE); } @Override public void onAnimationResume(Animator animation) { imageView.setVisibility(View.INVISIBLE); - overlay.add(matrixClippedDrawable); + overlayImage.setVisibility(View.VISIBLE); + } + + @Override + public void onAnimationCancel(Animator animation) { + onAnimationEnd(animation); } }; diff --git a/core/java/android/transition/SidePropagation.java b/core/java/android/transition/SidePropagation.java index c331945..5d38ac8 100644 --- a/core/java/android/transition/SidePropagation.java +++ b/core/java/android/transition/SidePropagation.java @@ -52,7 +52,7 @@ public class SidePropagation extends VisibilityPropagation { */ public static final int BOTTOM = Slide.BOTTOM; - private float mPropagationSpeed = 4.0f; + private float mPropagationSpeed = 3.0f; private int mSide = BOTTOM; /** @@ -129,8 +129,12 @@ public class SidePropagation extends VisibilityPropagation { float maxDistance = getMaxDistance(sceneRoot); float distanceFraction = distance/maxDistance; - return Math.round(transition.getDuration() * directionMultiplier / mPropagationSpeed - * distanceFraction); + long duration = transition.getDuration(); + if (duration < 0) { + duration = 300; + } + + return Math.round(duration * directionMultiplier / mPropagationSpeed * distanceFraction); } private int distance(int viewX, int viewY, int epicenterX, int epicenterY, diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java index c67d6fa..2549fde 100644 --- a/core/java/android/transition/Transition.java +++ b/core/java/android/transition/Transition.java @@ -66,13 +66,12 @@ import java.util.List; * * {@sample development/samples/ApiDemos/res/transition/changebounds.xml ChangeBounds} * - * <p>{@link android.transition.Explode} transition:</p> + * <p>This TransitionSet contains {@link android.transition.Explode} for visibility, + * {@link android.transition.ChangeBounds}, {@link android.transition.ChangeTransform}, + * and {@link android.transition.ChangeClipBounds} for non-<code>ImageView</code>s and + * {@link android.transition.MoveImage} for <code>ImageView</code>s:</p> * - * {@sample development/samples/ApiDemos/res/transition/explode.xml Explode} - * - * <p>{@link android.transition.MoveImage} transition:</p> - * - * {@sample development/samples/ApiDemos/res/transition/move_image.xml MoveImage} + * {@sample development/samples/ApiDemos/res/transition/explode_move_together.xml MultipleTransform} * * <p>Note that attributes for the transition are not required, just as they are * optional when declared in code; Transitions created from XML resources will use @@ -89,7 +88,8 @@ import java.util.List; * transition uses a fadingMode of {@link Fade#OUT} instead of the default * out-in behavior. Finally, note the use of the <code>targets</code> sub-tag, which * takes a set of {@link android.R.styleable#TransitionTarget target} tags, each - * of which lists a specific <code>targetId</code> which this transition acts upon. + * of which lists a specific <code>targetId</code>, <code>targetClass</code>, + * <code>excludeId</code>, or <code>excludeClass</code>, which this transition acts upon. * Use of targets is optional, but can be used to either limit the time spent checking * attributes on unchanging views, or limiting the types of animations run on specific views. * In this case, we know that only the <code>grayscaleContainer</code> will be @@ -116,6 +116,7 @@ public abstract class Transition implements Cloneable { ArrayList<Integer> mTargetIdExcludes = null; ArrayList<View> mTargetExcludes = null; ArrayList<Class> mTargetTypeExcludes = null; + ArrayList<Class> mTargetTypes = null; ArrayList<Integer> mTargetIdChildExcludes = null; ArrayList<View> mTargetChildExcludes = null; ArrayList<Class> mTargetTypeChildExcludes = null; @@ -569,19 +570,15 @@ public abstract class Transition implements Cloneable { } } } - if (mTargetIds.size() == 0 && mTargets.size() == 0) { + if (mTargetIds.size() == 0 && mTargets.size() == 0 && mTargetTypes == null) { return true; } - if (mTargetIds.size() > 0) { - for (int i = 0; i < mTargetIds.size(); ++i) { - if (mTargetIds.get(i) == targetId) { - return true; - } - } + if (mTargetIds.contains((int) targetId) || mTargets.contains(target)) { + return true; } - if (target != null && mTargets.size() > 0) { - for (int i = 0; i < mTargets.size(); ++i) { - if (mTargets.get(i) == target) { + if (mTargetTypes != null) { + for (int i = 0; i < mTargetTypes.size(); ++i) { + if (mTargetTypes.get(i).isInstance(target)) { return true; } } @@ -727,6 +724,36 @@ public abstract class Transition implements Cloneable { } /** + * Adds the Class of a target view that this Transition is interested in + * animating. By default, there are no targetTypes, and a Transition will + * listen for changes on every view in the hierarchy below the sceneRoot + * of the Scene being transitioned into. Setting targetTypes constrains + * the Transition to only listen for, and act on, views with these classes. + * Views with different classes will be ignored. + * + * <p>Note that any View that can be cast to targetType will be included, so + * if targetType is <code>View.class</code>, all Views will be included.</p> + * + * @see #addTarget(int) + * @see #addTarget(android.view.View) + * @see #excludeTarget(Class, boolean) + * @see #excludeChildren(Class, boolean) + * + * @param targetType The type to include when running this transition. + * @return The Transition to which the target class was added. + * Returning the same object makes it easier to chain calls during + * construction, such as + * <code>transitionSet.addTransitions(new Fade()).addTarget(ImageView.class);</code> + */ + public Transition addTarget(Class targetType) { + if (mTargetTypes == null) { + mTargetTypes = new ArrayList<Class>(); + } + mTargetTypes.add(targetType); + return this; + } + + /** * Removes the given targetId from the list of ids that this Transition * is interested in animating. * @@ -1116,9 +1143,6 @@ public abstract class Transition implements Cloneable { if (view == null) { return; } - if (!isValidTarget(view, view.getId())) { - return; - } boolean isListViewItem = false; if (view.getParent() instanceof ListView) { isListViewItem = true; diff --git a/core/java/android/transition/TransitionInflater.java b/core/java/android/transition/TransitionInflater.java index 14ecc15..a5e960a 100644 --- a/core/java/android/transition/TransitionInflater.java +++ b/core/java/android/transition/TransitionInflater.java @@ -153,6 +153,12 @@ public class TransitionInflater { } else if ("moveImage".equals(name)) { transition = new MoveImage(); newTransition = true; + } else if ("changeTransform".equals(name)) { + transition = new ChangeTransform(); + newTransition = true; + } else if ("changeClipBounds".equals(name)) { + transition = new ChangeClipBounds(); + newTransition = true; } else if ("autoTransition".equals(name)) { transition = new AutoTransition(); newTransition = true; @@ -210,7 +216,6 @@ public class TransitionInflater { int type; int depth = parser.getDepth(); - ArrayList<Integer> targetIds = new ArrayList<Integer>(); while (((type=parser.next()) != XmlPullParser.END_TAG || parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) { @@ -225,18 +230,31 @@ public class TransitionInflater { int id = a.getResourceId( com.android.internal.R.styleable.TransitionTarget_targetId, -1); if (id >= 0) { - targetIds.add(id); + transition.addTarget(id); + } else if ((id = a.getResourceId( + com.android.internal.R.styleable.TransitionTarget_excludeId, -1)) >= 0) { + transition.excludeTarget(id, true); + } else { + String className = a.getString( + com.android.internal.R.styleable.TransitionTarget_excludeClass); + try { + if (className != null) { + Class clazz = Class.forName(className); + transition.excludeTarget(clazz, true); + } else if ((className = a.getString( + com.android.internal.R.styleable.TransitionTarget_targetClass)) + != null) { + Class clazz = Class.forName(className); + transition.addTarget(clazz); + } + } catch (ClassNotFoundException e) { + throw new RuntimeException("Could not create " + className, e); + } } } else { throw new RuntimeException("Unknown scene name: " + parser.getName()); } } - int numTargets = targetIds.size(); - if (numTargets > 0) { - for (int i = 0; i < numTargets; ++i) { - transition.addTarget(targetIds.get(i)); - } - } } private Transition loadTransition(Transition transition, AttributeSet attrs) diff --git a/core/java/android/tv/TvInputService.java b/core/java/android/tv/TvInputService.java index 636e3b4..70e7f95 100644 --- a/core/java/android/tv/TvInputService.java +++ b/core/java/android/tv/TvInputService.java @@ -150,6 +150,7 @@ public abstract class TvInputService extends Service { private final KeyEvent.DispatcherState mDispatcherState = new KeyEvent.DispatcherState(); private final WindowManager mWindowManager; private WindowManager.LayoutParams mWindowParams; + private Surface mSurface; private View mOverlayView; private boolean mOverlayViewEnabled; private IBinder mWindowToken; @@ -346,6 +347,10 @@ public abstract class TvInputService extends Service { */ void release() { onRelease(); + if (mSurface != null) { + mSurface.release(); + mSurface = null; + } removeOverlayView(true); } @@ -354,6 +359,10 @@ public abstract class TvInputService extends Service { */ void setSurface(Surface surface) { onSetSurface(surface); + if (mSurface != null) { + mSurface.release(); + } + mSurface = surface; // TODO: Handle failure. } diff --git a/core/java/android/view/ContextThemeWrapper.java b/core/java/android/view/ContextThemeWrapper.java index 0afbde9..ba1c4b6 100644 --- a/core/java/android/view/ContextThemeWrapper.java +++ b/core/java/android/view/ContextThemeWrapper.java @@ -96,7 +96,7 @@ public class ContextThemeWrapper extends ContextWrapper { return mTheme; } - mThemeResource = Resources.selectDefaultTheme(mThemeResource, + mThemeResource = getResources().selectDefaultTheme(mThemeResource, getApplicationInfo().targetSdkVersion); initializeTheme(); diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index c3f429c..05e202b 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -645,12 +645,11 @@ public class KeyEvent extends InputEvent implements Parcelable { // NOTE: If you add a new keycode here you must also add it to: // isSystem() // frameworks/native/include/android/keycodes.h - // frameworks/base/include/androidfw/KeycodeLabels.h + // frameworks/base/include/androidfw/InputEventAttributes.h // external/webkit/WebKit/android/plugins/ANPKeyCodes.h // frameworks/base/core/res/res/values/attrs.xml // emulator? // LAST_KEYCODE - // KEYCODE_SYMBOLIC_NAMES // // Also Android currently does not reserve code ranges for vendor- // specific key codes. If you have new key codes to have, you @@ -658,237 +657,6 @@ public class KeyEvent extends InputEvent implements Parcelable { // those new codes. This is intended to maintain a consistent // set of key code definitions across all Android devices. - // Symbolic names of all key codes. - private static final SparseArray<String> KEYCODE_SYMBOLIC_NAMES = new SparseArray<String>(); - private static void populateKeycodeSymbolicNames() { - SparseArray<String> names = KEYCODE_SYMBOLIC_NAMES; - names.append(KEYCODE_UNKNOWN, "KEYCODE_UNKNOWN"); - names.append(KEYCODE_SOFT_LEFT, "KEYCODE_SOFT_LEFT"); - names.append(KEYCODE_SOFT_RIGHT, "KEYCODE_SOFT_RIGHT"); - names.append(KEYCODE_HOME, "KEYCODE_HOME"); - names.append(KEYCODE_BACK, "KEYCODE_BACK"); - names.append(KEYCODE_CALL, "KEYCODE_CALL"); - names.append(KEYCODE_ENDCALL, "KEYCODE_ENDCALL"); - names.append(KEYCODE_0, "KEYCODE_0"); - names.append(KEYCODE_1, "KEYCODE_1"); - names.append(KEYCODE_2, "KEYCODE_2"); - names.append(KEYCODE_3, "KEYCODE_3"); - names.append(KEYCODE_4, "KEYCODE_4"); - names.append(KEYCODE_5, "KEYCODE_5"); - names.append(KEYCODE_6, "KEYCODE_6"); - names.append(KEYCODE_7, "KEYCODE_7"); - names.append(KEYCODE_8, "KEYCODE_8"); - names.append(KEYCODE_9, "KEYCODE_9"); - names.append(KEYCODE_STAR, "KEYCODE_STAR"); - names.append(KEYCODE_POUND, "KEYCODE_POUND"); - names.append(KEYCODE_DPAD_UP, "KEYCODE_DPAD_UP"); - names.append(KEYCODE_DPAD_DOWN, "KEYCODE_DPAD_DOWN"); - names.append(KEYCODE_DPAD_LEFT, "KEYCODE_DPAD_LEFT"); - names.append(KEYCODE_DPAD_RIGHT, "KEYCODE_DPAD_RIGHT"); - names.append(KEYCODE_DPAD_CENTER, "KEYCODE_DPAD_CENTER"); - names.append(KEYCODE_VOLUME_UP, "KEYCODE_VOLUME_UP"); - names.append(KEYCODE_VOLUME_DOWN, "KEYCODE_VOLUME_DOWN"); - names.append(KEYCODE_POWER, "KEYCODE_POWER"); - names.append(KEYCODE_CAMERA, "KEYCODE_CAMERA"); - names.append(KEYCODE_CLEAR, "KEYCODE_CLEAR"); - names.append(KEYCODE_A, "KEYCODE_A"); - names.append(KEYCODE_B, "KEYCODE_B"); - names.append(KEYCODE_C, "KEYCODE_C"); - names.append(KEYCODE_D, "KEYCODE_D"); - names.append(KEYCODE_E, "KEYCODE_E"); - names.append(KEYCODE_F, "KEYCODE_F"); - names.append(KEYCODE_G, "KEYCODE_G"); - names.append(KEYCODE_H, "KEYCODE_H"); - names.append(KEYCODE_I, "KEYCODE_I"); - names.append(KEYCODE_J, "KEYCODE_J"); - names.append(KEYCODE_K, "KEYCODE_K"); - names.append(KEYCODE_L, "KEYCODE_L"); - names.append(KEYCODE_M, "KEYCODE_M"); - names.append(KEYCODE_N, "KEYCODE_N"); - names.append(KEYCODE_O, "KEYCODE_O"); - names.append(KEYCODE_P, "KEYCODE_P"); - names.append(KEYCODE_Q, "KEYCODE_Q"); - names.append(KEYCODE_R, "KEYCODE_R"); - names.append(KEYCODE_S, "KEYCODE_S"); - names.append(KEYCODE_T, "KEYCODE_T"); - names.append(KEYCODE_U, "KEYCODE_U"); - names.append(KEYCODE_V, "KEYCODE_V"); - names.append(KEYCODE_W, "KEYCODE_W"); - names.append(KEYCODE_X, "KEYCODE_X"); - names.append(KEYCODE_Y, "KEYCODE_Y"); - names.append(KEYCODE_Z, "KEYCODE_Z"); - names.append(KEYCODE_COMMA, "KEYCODE_COMMA"); - names.append(KEYCODE_PERIOD, "KEYCODE_PERIOD"); - names.append(KEYCODE_ALT_LEFT, "KEYCODE_ALT_LEFT"); - names.append(KEYCODE_ALT_RIGHT, "KEYCODE_ALT_RIGHT"); - names.append(KEYCODE_SHIFT_LEFT, "KEYCODE_SHIFT_LEFT"); - names.append(KEYCODE_SHIFT_RIGHT, "KEYCODE_SHIFT_RIGHT"); - names.append(KEYCODE_TAB, "KEYCODE_TAB"); - names.append(KEYCODE_SPACE, "KEYCODE_SPACE"); - names.append(KEYCODE_SYM, "KEYCODE_SYM"); - names.append(KEYCODE_EXPLORER, "KEYCODE_EXPLORER"); - names.append(KEYCODE_ENVELOPE, "KEYCODE_ENVELOPE"); - names.append(KEYCODE_ENTER, "KEYCODE_ENTER"); - names.append(KEYCODE_DEL, "KEYCODE_DEL"); - names.append(KEYCODE_GRAVE, "KEYCODE_GRAVE"); - names.append(KEYCODE_MINUS, "KEYCODE_MINUS"); - names.append(KEYCODE_EQUALS, "KEYCODE_EQUALS"); - names.append(KEYCODE_LEFT_BRACKET, "KEYCODE_LEFT_BRACKET"); - names.append(KEYCODE_RIGHT_BRACKET, "KEYCODE_RIGHT_BRACKET"); - names.append(KEYCODE_BACKSLASH, "KEYCODE_BACKSLASH"); - names.append(KEYCODE_SEMICOLON, "KEYCODE_SEMICOLON"); - names.append(KEYCODE_APOSTROPHE, "KEYCODE_APOSTROPHE"); - names.append(KEYCODE_SLASH, "KEYCODE_SLASH"); - names.append(KEYCODE_AT, "KEYCODE_AT"); - names.append(KEYCODE_NUM, "KEYCODE_NUM"); - names.append(KEYCODE_HEADSETHOOK, "KEYCODE_HEADSETHOOK"); - names.append(KEYCODE_FOCUS, "KEYCODE_FOCUS"); - names.append(KEYCODE_PLUS, "KEYCODE_PLUS"); - names.append(KEYCODE_MENU, "KEYCODE_MENU"); - names.append(KEYCODE_NOTIFICATION, "KEYCODE_NOTIFICATION"); - names.append(KEYCODE_SEARCH, "KEYCODE_SEARCH"); - names.append(KEYCODE_MEDIA_PLAY_PAUSE, "KEYCODE_MEDIA_PLAY_PAUSE"); - names.append(KEYCODE_MEDIA_STOP, "KEYCODE_MEDIA_STOP"); - names.append(KEYCODE_MEDIA_NEXT, "KEYCODE_MEDIA_NEXT"); - names.append(KEYCODE_MEDIA_PREVIOUS, "KEYCODE_MEDIA_PREVIOUS"); - names.append(KEYCODE_MEDIA_REWIND, "KEYCODE_MEDIA_REWIND"); - names.append(KEYCODE_MEDIA_FAST_FORWARD, "KEYCODE_MEDIA_FAST_FORWARD"); - names.append(KEYCODE_MUTE, "KEYCODE_MUTE"); - names.append(KEYCODE_PAGE_UP, "KEYCODE_PAGE_UP"); - names.append(KEYCODE_PAGE_DOWN, "KEYCODE_PAGE_DOWN"); - names.append(KEYCODE_PICTSYMBOLS, "KEYCODE_PICTSYMBOLS"); - names.append(KEYCODE_SWITCH_CHARSET, "KEYCODE_SWITCH_CHARSET"); - names.append(KEYCODE_BUTTON_A, "KEYCODE_BUTTON_A"); - names.append(KEYCODE_BUTTON_B, "KEYCODE_BUTTON_B"); - names.append(KEYCODE_BUTTON_C, "KEYCODE_BUTTON_C"); - names.append(KEYCODE_BUTTON_X, "KEYCODE_BUTTON_X"); - names.append(KEYCODE_BUTTON_Y, "KEYCODE_BUTTON_Y"); - names.append(KEYCODE_BUTTON_Z, "KEYCODE_BUTTON_Z"); - names.append(KEYCODE_BUTTON_L1, "KEYCODE_BUTTON_L1"); - names.append(KEYCODE_BUTTON_R1, "KEYCODE_BUTTON_R1"); - names.append(KEYCODE_BUTTON_L2, "KEYCODE_BUTTON_L2"); - names.append(KEYCODE_BUTTON_R2, "KEYCODE_BUTTON_R2"); - names.append(KEYCODE_BUTTON_THUMBL, "KEYCODE_BUTTON_THUMBL"); - names.append(KEYCODE_BUTTON_THUMBR, "KEYCODE_BUTTON_THUMBR"); - names.append(KEYCODE_BUTTON_START, "KEYCODE_BUTTON_START"); - names.append(KEYCODE_BUTTON_SELECT, "KEYCODE_BUTTON_SELECT"); - names.append(KEYCODE_BUTTON_MODE, "KEYCODE_BUTTON_MODE"); - names.append(KEYCODE_ESCAPE, "KEYCODE_ESCAPE"); - names.append(KEYCODE_FORWARD_DEL, "KEYCODE_FORWARD_DEL"); - names.append(KEYCODE_CTRL_LEFT, "KEYCODE_CTRL_LEFT"); - names.append(KEYCODE_CTRL_RIGHT, "KEYCODE_CTRL_RIGHT"); - names.append(KEYCODE_CAPS_LOCK, "KEYCODE_CAPS_LOCK"); - names.append(KEYCODE_SCROLL_LOCK, "KEYCODE_SCROLL_LOCK"); - names.append(KEYCODE_META_LEFT, "KEYCODE_META_LEFT"); - names.append(KEYCODE_META_RIGHT, "KEYCODE_META_RIGHT"); - names.append(KEYCODE_FUNCTION, "KEYCODE_FUNCTION"); - names.append(KEYCODE_SYSRQ, "KEYCODE_SYSRQ"); - names.append(KEYCODE_BREAK, "KEYCODE_BREAK"); - names.append(KEYCODE_MOVE_HOME, "KEYCODE_MOVE_HOME"); - names.append(KEYCODE_MOVE_END, "KEYCODE_MOVE_END"); - names.append(KEYCODE_INSERT, "KEYCODE_INSERT"); - names.append(KEYCODE_FORWARD, "KEYCODE_FORWARD"); - names.append(KEYCODE_MEDIA_PLAY, "KEYCODE_MEDIA_PLAY"); - names.append(KEYCODE_MEDIA_PAUSE, "KEYCODE_MEDIA_PAUSE"); - names.append(KEYCODE_MEDIA_CLOSE, "KEYCODE_MEDIA_CLOSE"); - names.append(KEYCODE_MEDIA_EJECT, "KEYCODE_MEDIA_EJECT"); - names.append(KEYCODE_MEDIA_RECORD, "KEYCODE_MEDIA_RECORD"); - names.append(KEYCODE_F1, "KEYCODE_F1"); - names.append(KEYCODE_F2, "KEYCODE_F2"); - names.append(KEYCODE_F3, "KEYCODE_F3"); - names.append(KEYCODE_F4, "KEYCODE_F4"); - names.append(KEYCODE_F5, "KEYCODE_F5"); - names.append(KEYCODE_F6, "KEYCODE_F6"); - names.append(KEYCODE_F7, "KEYCODE_F7"); - names.append(KEYCODE_F8, "KEYCODE_F8"); - names.append(KEYCODE_F9, "KEYCODE_F9"); - names.append(KEYCODE_F10, "KEYCODE_F10"); - names.append(KEYCODE_F11, "KEYCODE_F11"); - names.append(KEYCODE_F12, "KEYCODE_F12"); - names.append(KEYCODE_NUM_LOCK, "KEYCODE_NUM_LOCK"); - names.append(KEYCODE_NUMPAD_0, "KEYCODE_NUMPAD_0"); - names.append(KEYCODE_NUMPAD_1, "KEYCODE_NUMPAD_1"); - names.append(KEYCODE_NUMPAD_2, "KEYCODE_NUMPAD_2"); - names.append(KEYCODE_NUMPAD_3, "KEYCODE_NUMPAD_3"); - names.append(KEYCODE_NUMPAD_4, "KEYCODE_NUMPAD_4"); - names.append(KEYCODE_NUMPAD_5, "KEYCODE_NUMPAD_5"); - names.append(KEYCODE_NUMPAD_6, "KEYCODE_NUMPAD_6"); - names.append(KEYCODE_NUMPAD_7, "KEYCODE_NUMPAD_7"); - names.append(KEYCODE_NUMPAD_8, "KEYCODE_NUMPAD_8"); - names.append(KEYCODE_NUMPAD_9, "KEYCODE_NUMPAD_9"); - names.append(KEYCODE_NUMPAD_DIVIDE, "KEYCODE_NUMPAD_DIVIDE"); - names.append(KEYCODE_NUMPAD_MULTIPLY, "KEYCODE_NUMPAD_MULTIPLY"); - names.append(KEYCODE_NUMPAD_SUBTRACT, "KEYCODE_NUMPAD_SUBTRACT"); - names.append(KEYCODE_NUMPAD_ADD, "KEYCODE_NUMPAD_ADD"); - names.append(KEYCODE_NUMPAD_DOT, "KEYCODE_NUMPAD_DOT"); - names.append(KEYCODE_NUMPAD_COMMA, "KEYCODE_NUMPAD_COMMA"); - names.append(KEYCODE_NUMPAD_ENTER, "KEYCODE_NUMPAD_ENTER"); - names.append(KEYCODE_NUMPAD_EQUALS, "KEYCODE_NUMPAD_EQUALS"); - names.append(KEYCODE_NUMPAD_LEFT_PAREN, "KEYCODE_NUMPAD_LEFT_PAREN"); - names.append(KEYCODE_NUMPAD_RIGHT_PAREN, "KEYCODE_NUMPAD_RIGHT_PAREN"); - names.append(KEYCODE_VOLUME_MUTE, "KEYCODE_VOLUME_MUTE"); - names.append(KEYCODE_INFO, "KEYCODE_INFO"); - names.append(KEYCODE_CHANNEL_UP, "KEYCODE_CHANNEL_UP"); - names.append(KEYCODE_CHANNEL_DOWN, "KEYCODE_CHANNEL_DOWN"); - names.append(KEYCODE_ZOOM_IN, "KEYCODE_ZOOM_IN"); - names.append(KEYCODE_ZOOM_OUT, "KEYCODE_ZOOM_OUT"); - names.append(KEYCODE_TV, "KEYCODE_TV"); - names.append(KEYCODE_WINDOW, "KEYCODE_WINDOW"); - names.append(KEYCODE_GUIDE, "KEYCODE_GUIDE"); - names.append(KEYCODE_DVR, "KEYCODE_DVR"); - names.append(KEYCODE_BOOKMARK, "KEYCODE_BOOKMARK"); - names.append(KEYCODE_CAPTIONS, "KEYCODE_CAPTIONS"); - names.append(KEYCODE_SETTINGS, "KEYCODE_SETTINGS"); - names.append(KEYCODE_TV_POWER, "KEYCODE_TV_POWER"); - names.append(KEYCODE_TV_INPUT, "KEYCODE_TV_INPUT"); - names.append(KEYCODE_STB_INPUT, "KEYCODE_STB_INPUT"); - names.append(KEYCODE_STB_POWER, "KEYCODE_STB_POWER"); - names.append(KEYCODE_AVR_POWER, "KEYCODE_AVR_POWER"); - names.append(KEYCODE_AVR_INPUT, "KEYCODE_AVR_INPUT"); - names.append(KEYCODE_PROG_RED, "KEYCODE_PROG_RED"); - names.append(KEYCODE_PROG_GREEN, "KEYCODE_PROG_GREEN"); - names.append(KEYCODE_PROG_YELLOW, "KEYCODE_PROG_YELLOW"); - names.append(KEYCODE_PROG_BLUE, "KEYCODE_PROG_BLUE"); - names.append(KEYCODE_APP_SWITCH, "KEYCODE_APP_SWITCH"); - names.append(KEYCODE_BUTTON_1, "KEYCODE_BUTTON_1"); - names.append(KEYCODE_BUTTON_2, "KEYCODE_BUTTON_2"); - names.append(KEYCODE_BUTTON_3, "KEYCODE_BUTTON_3"); - names.append(KEYCODE_BUTTON_4, "KEYCODE_BUTTON_4"); - names.append(KEYCODE_BUTTON_5, "KEYCODE_BUTTON_5"); - names.append(KEYCODE_BUTTON_6, "KEYCODE_BUTTON_6"); - names.append(KEYCODE_BUTTON_7, "KEYCODE_BUTTON_7"); - names.append(KEYCODE_BUTTON_8, "KEYCODE_BUTTON_8"); - names.append(KEYCODE_BUTTON_9, "KEYCODE_BUTTON_9"); - names.append(KEYCODE_BUTTON_10, "KEYCODE_BUTTON_10"); - names.append(KEYCODE_BUTTON_11, "KEYCODE_BUTTON_11"); - names.append(KEYCODE_BUTTON_12, "KEYCODE_BUTTON_12"); - names.append(KEYCODE_BUTTON_13, "KEYCODE_BUTTON_13"); - names.append(KEYCODE_BUTTON_14, "KEYCODE_BUTTON_14"); - names.append(KEYCODE_BUTTON_15, "KEYCODE_BUTTON_15"); - names.append(KEYCODE_BUTTON_16, "KEYCODE_BUTTON_16"); - names.append(KEYCODE_LANGUAGE_SWITCH, "KEYCODE_LANGUAGE_SWITCH"); - names.append(KEYCODE_MANNER_MODE, "KEYCODE_MANNER_MODE"); - names.append(KEYCODE_3D_MODE, "KEYCODE_3D_MODE"); - names.append(KEYCODE_CONTACTS, "KEYCODE_CONTACTS"); - names.append(KEYCODE_CALENDAR, "KEYCODE_CALENDAR"); - names.append(KEYCODE_MUSIC, "KEYCODE_MUSIC"); - names.append(KEYCODE_CALCULATOR, "KEYCODE_CALCULATOR"); - names.append(KEYCODE_ZENKAKU_HANKAKU, "KEYCODE_ZENKAKU_HANKAKU"); - names.append(KEYCODE_EISU, "KEYCODE_EISU"); - names.append(KEYCODE_MUHENKAN, "KEYCODE_MUHENKAN"); - names.append(KEYCODE_HENKAN, "KEYCODE_HENKAN"); - names.append(KEYCODE_KATAKANA_HIRAGANA, "KEYCODE_KATAKANA_HIRAGANA"); - names.append(KEYCODE_YEN, "KEYCODE_YEN"); - names.append(KEYCODE_RO, "KEYCODE_RO"); - names.append(KEYCODE_KANA, "KEYCODE_KANA"); - names.append(KEYCODE_ASSIST, "KEYCODE_ASSIST"); - names.append(KEYCODE_BRIGHTNESS_DOWN, "KEYCODE_BRIGHTNESS_DOWN"); - names.append(KEYCODE_BRIGHTNESS_UP, "KEYCODE_BRIGHTNESS_UP"); - names.append(KEYCODE_MEDIA_AUDIO_TRACK, "KEYCODE_MEDIA_AUDIO_TRACK"); - names.append(KEYCODE_SLEEP, "KEYCODE_SLEEP"); - names.append(KEYCODE_WAKEUP, "KEYCODE_WAKEUP"); - }; - // Symbolic names of all metakeys in bit order from least significant to most significant. // Accordingly there are exactly 32 values in this table. private static final String[] META_SYMBOLIC_NAMES = new String[] { @@ -926,6 +694,8 @@ public class KeyEvent extends InputEvent implements Parcelable { "0x80000000", }; + private static final String LABEL_PREFIX = "KEYCODE_"; + /** * @deprecated There are now more than MAX_KEYCODE keycodes. * Use {@link #getMaxKeyCode()} instead. @@ -1367,9 +1137,8 @@ public class KeyEvent extends InputEvent implements Parcelable { boolean onKeyMultiple(int keyCode, int count, KeyEvent event); } - static { - populateKeycodeSymbolicNames(); - } + private static native String nativeKeyCodeToString(int keyCode); + private static native int nativeKeyCodeFromString(String keyCode); private KeyEvent() { } @@ -1792,19 +1561,15 @@ public class KeyEvent extends InputEvent implements Parcelable { return mAction == ACTION_DOWN; } - /** - * Is this a system key? System keys can not be used for menu shortcuts. - * - * TODO: this information should come from a table somewhere. - * TODO: should the dpad keys be here? arguably, because they also shouldn't be menu shortcuts + /** Is this a system key? System keys can not be used for menu shortcuts. */ public final boolean isSystem() { - return native_isSystemKey(mKeyCode); + return isSystemKey(mKeyCode); } /** @hide */ - public final boolean hasDefaultAction() { - return native_hasDefaultAction(mKeyCode); + public final boolean isWakeKey() { + return isWakeKey(mKeyCode); } /** @@ -1887,6 +1652,62 @@ public class KeyEvent extends InputEvent implements Parcelable { return false; } + + /** Is this a system key? System keys can not be used for menu shortcuts. + * @hide + */ + public static final boolean isSystemKey(int keyCode) { + switch (keyCode) { + case KeyEvent.KEYCODE_MENU: + case KeyEvent.KEYCODE_SOFT_RIGHT: + case KeyEvent.KEYCODE_HOME: + case KeyEvent.KEYCODE_BACK: + case KeyEvent.KEYCODE_CALL: + case KeyEvent.KEYCODE_ENDCALL: + case KeyEvent.KEYCODE_VOLUME_UP: + case KeyEvent.KEYCODE_VOLUME_DOWN: + case KeyEvent.KEYCODE_VOLUME_MUTE: + case KeyEvent.KEYCODE_MUTE: + case KeyEvent.KEYCODE_POWER: + case KeyEvent.KEYCODE_HEADSETHOOK: + case KeyEvent.KEYCODE_MEDIA_PLAY: + case KeyEvent.KEYCODE_MEDIA_PAUSE: + case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: + case KeyEvent.KEYCODE_MEDIA_STOP: + case KeyEvent.KEYCODE_MEDIA_NEXT: + case KeyEvent.KEYCODE_MEDIA_PREVIOUS: + case KeyEvent.KEYCODE_MEDIA_REWIND: + case KeyEvent.KEYCODE_MEDIA_RECORD: + case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: + case KeyEvent.KEYCODE_CAMERA: + case KeyEvent.KEYCODE_FOCUS: + case KeyEvent.KEYCODE_SEARCH: + case KeyEvent.KEYCODE_BRIGHTNESS_DOWN: + case KeyEvent.KEYCODE_BRIGHTNESS_UP: + case KeyEvent.KEYCODE_MEDIA_AUDIO_TRACK: + case KeyEvent.KEYCODE_DPAD_UP: + case KeyEvent.KEYCODE_DPAD_RIGHT: + case KeyEvent.KEYCODE_DPAD_DOWN: + case KeyEvent.KEYCODE_DPAD_LEFT: + return true; + } + + return false; + } + + /** @hide */ + public static final boolean isWakeKey(int keyCode) { + switch (keyCode) { + case KeyEvent.KEYCODE_BACK: + case KeyEvent.KEYCODE_POWER: + case KeyEvent.KEYCODE_MENU: + case KeyEvent.KEYCODE_SLEEP: + case KeyEvent.KEYCODE_WAKEUP: + return true; + } + return false; + } + /** {@inheritDoc} */ @Override public final int getDeviceId() { @@ -2866,8 +2687,8 @@ public class KeyEvent extends InputEvent implements Parcelable { * @see KeyCharacterMap#getDisplayLabel */ public static String keyCodeToString(int keyCode) { - String symbolicName = KEYCODE_SYMBOLIC_NAMES.get(keyCode); - return symbolicName != null ? symbolicName : Integer.toString(keyCode); + String symbolicName = nativeKeyCodeToString(keyCode); + return symbolicName != null ? LABEL_PREFIX + symbolicName : Integer.toString(keyCode); } /** @@ -2879,17 +2700,13 @@ public class KeyEvent extends InputEvent implements Parcelable { * @see #keycodeToString(int) */ public static int keyCodeFromString(String symbolicName) { - if (symbolicName == null) { - throw new IllegalArgumentException("symbolicName must not be null"); + if (symbolicName.startsWith(LABEL_PREFIX)) { + symbolicName = symbolicName.substring(LABEL_PREFIX.length()); } - - final int count = KEYCODE_SYMBOLIC_NAMES.size(); - for (int i = 0; i < count; i++) { - if (symbolicName.equals(KEYCODE_SYMBOLIC_NAMES.valueAt(i))) { - return i; - } + int keyCode = nativeKeyCodeFromString(symbolicName); + if (keyCode > 0) { + return keyCode; } - try { return Integer.parseInt(symbolicName, 10); } catch (NumberFormatException ex) { @@ -2977,7 +2794,4 @@ public class KeyEvent extends InputEvent implements Parcelable { out.writeLong(mDownTime); out.writeLong(mEventTime); } - - private native boolean native_isSystemKey(int keyCode); - private native boolean native_hasDefaultAction(int keyCode); } diff --git a/core/java/android/view/LayoutInflater.java b/core/java/android/view/LayoutInflater.java index e19bda9..b9ed801 100644 --- a/core/java/android/view/LayoutInflater.java +++ b/core/java/android/view/LayoutInflater.java @@ -21,13 +21,16 @@ import android.os.Handler; import android.os.Message; import android.os.Trace; import android.widget.FrameLayout; + import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.content.Context; +import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.util.AttributeSet; +import android.util.Log; import android.util.Xml; import java.io.IOException; @@ -61,7 +64,8 @@ import java.util.HashMap; * @see Context#getSystemService */ public abstract class LayoutInflater { - private final boolean DEBUG = false; + private static final String TAG = LayoutInflater.class.getSimpleName(); + private static final boolean DEBUG = false; /** * This field should be made private, so it is hidden from the SDK. @@ -395,8 +399,13 @@ public abstract class LayoutInflater { * the inflated XML file. */ public View inflate(int resource, ViewGroup root, boolean attachToRoot) { - if (DEBUG) System.out.println("INFLATING from resource: " + resource); - XmlResourceParser parser = getContext().getResources().getLayout(resource); + final Resources res = getContext().getResources(); + if (DEBUG) { + Log.d(TAG, "INFLATING from resource: \"" + res.getResourceName(resource) + "\" (" + + Integer.toHexString(resource) + ")"); + } + + final XmlResourceParser parser = res.getLayout(resource); try { return inflate(parser, root, attachToRoot); } finally { diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java index 6378ffd..0626ab9 100644 --- a/core/java/android/view/MotionEvent.java +++ b/core/java/android/view/MotionEvent.java @@ -167,6 +167,7 @@ import android.util.SparseArray; */ public final class MotionEvent extends InputEvent implements Parcelable { private static final long NS_PER_MS = 1000000; + private static final String LABEL_PREFIX = "AXIS_"; /** * An invalid pointer id. @@ -1369,6 +1370,9 @@ public final class MotionEvent extends InputEvent implements Parcelable { private static native long nativeReadFromParcel(long nativePtr, Parcel parcel); private static native void nativeWriteToParcel(long nativePtr, Parcel parcel); + private static native String nativeAxisToString(int axis); + private static native int nativeAxisFromString(String label); + private MotionEvent() { } @@ -3051,8 +3055,8 @@ public final class MotionEvent extends InputEvent implements Parcelable { * @return The symbolic name of the specified axis. */ public static String axisToString(int axis) { - String symbolicName = AXIS_SYMBOLIC_NAMES.get(axis); - return symbolicName != null ? symbolicName : Integer.toString(axis); + String symbolicName = nativeAxisToString(axis); + return symbolicName != null ? LABEL_PREFIX + symbolicName : Integer.toString(axis); } /** @@ -3064,17 +3068,13 @@ public final class MotionEvent extends InputEvent implements Parcelable { * @see KeyEvent#keyCodeToString(int) */ public static int axisFromString(String symbolicName) { - if (symbolicName == null) { - throw new IllegalArgumentException("symbolicName must not be null"); + if (symbolicName.startsWith(LABEL_PREFIX)) { + symbolicName = symbolicName.substring(LABEL_PREFIX.length()); } - - final int count = AXIS_SYMBOLIC_NAMES.size(); - for (int i = 0; i < count; i++) { - if (symbolicName.equals(AXIS_SYMBOLIC_NAMES.valueAt(i))) { - return i; - } + int axis = nativeAxisFromString(symbolicName); + if (axis >= 0) { + return axis; } - try { return Integer.parseInt(symbolicName, 10); } catch (NumberFormatException ex) { diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 76becda..6afff4d 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -17989,7 +17989,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * * <p>If this property is set to true the view will be permitted to initiate nested * scrolling operations with a compatible parent view in the current hierarchy. If this - * view does not implement nested scrolling this will have no effect.</p> + * view does not implement nested scrolling this will have no effect. Disabling nested scrolling + * while a nested scroll is in progress has the effect of {@link #stopNestedScroll() stopping} + * the nested scroll.</p> * * @param enabled true to enable nested scrolling, false to disable * @@ -17999,6 +18001,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (enabled) { mPrivateFlags3 |= PFLAG3_NESTED_SCROLLING_ENABLED; } else { + stopNestedScroll(); mPrivateFlags3 &= ~PFLAG3_NESTED_SCROLLING_ENABLED; } } @@ -18138,23 +18141,29 @@ public class View implements Drawable.Callback, KeyEvent.Callback, public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow) { if (isNestedScrollingEnabled() && mNestedScrollingParent != null) { - int startX = 0; - int startY = 0; - if (offsetInWindow != null) { - getLocationInWindow(offsetInWindow); - startX = offsetInWindow[0]; - startY = offsetInWindow[1]; - } + if (dxConsumed != 0 || dyConsumed != 0 || dxUnconsumed != 0 || dyUnconsumed != 0) { + int startX = 0; + int startY = 0; + if (offsetInWindow != null) { + getLocationInWindow(offsetInWindow); + startX = offsetInWindow[0]; + startY = offsetInWindow[1]; + } - mNestedScrollingParent.onNestedScroll(this, dxConsumed, dyConsumed, - dxUnconsumed, dyUnconsumed); + mNestedScrollingParent.onNestedScroll(this, dxConsumed, dyConsumed, + dxUnconsumed, dyUnconsumed); - if (offsetInWindow != null) { - getLocationInWindow(offsetInWindow); - offsetInWindow[0] -= startX; - offsetInWindow[1] -= startY; + if (offsetInWindow != null) { + getLocationInWindow(offsetInWindow); + offsetInWindow[0] -= startX; + offsetInWindow[1] -= startY; + } + return true; + } else if (offsetInWindow != null) { + // No motion, no dispatch. Keep offsetInWindow up to date. + offsetInWindow[0] = 0; + offsetInWindow[1] = 0; } - return true; } return false; } @@ -18180,30 +18189,35 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) { if (isNestedScrollingEnabled() && mNestedScrollingParent != null) { - int startX = 0; - int startY = 0; - if (offsetInWindow != null) { - getLocationInWindow(offsetInWindow); - startX = offsetInWindow[0]; - startY = offsetInWindow[1]; - } - - if (consumed == null) { - if (mTempNestedScrollConsumed == null) { - mTempNestedScrollConsumed = new int[2]; + if (dx != 0 || dy != 0) { + int startX = 0; + int startY = 0; + if (offsetInWindow != null) { + getLocationInWindow(offsetInWindow); + startX = offsetInWindow[0]; + startY = offsetInWindow[1]; } - consumed = mTempNestedScrollConsumed; - } - consumed[0] = 0; - consumed[1] = 0; - mNestedScrollingParent.onNestedPreScroll(this, dx, dy, consumed); - if (offsetInWindow != null) { - getLocationInWindow(offsetInWindow); - offsetInWindow[0] -= startX; - offsetInWindow[1] -= startY; + if (consumed == null) { + if (mTempNestedScrollConsumed == null) { + mTempNestedScrollConsumed = new int[2]; + } + consumed = mTempNestedScrollConsumed; + } + consumed[0] = 0; + consumed[1] = 0; + mNestedScrollingParent.onNestedPreScroll(this, dx, dy, consumed); + + if (offsetInWindow != null) { + getLocationInWindow(offsetInWindow); + offsetInWindow[0] -= startX; + offsetInWindow[1] -= startY; + } + return consumed[0] != 0 || consumed[1] != 0; + } else if (offsetInWindow != null) { + offsetInWindow[0] = 0; + offsetInWindow[1] = 0; } - return consumed[0] != 0 || consumed[1] != 0; } return false; } @@ -18211,18 +18225,24 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * Dispatch a fling to a nested scrolling parent. * - * <p>If a nested scrolling child view would normally fling but it is at the edge of its - * own content it should use this method to delegate the fling to its nested scrolling parent. - * The view implementation can use a {@link VelocityTracker} to obtain the velocity values - * to pass.</p> + * <p>This method should be used to indicate that a nested scrolling child has detected + * suitable conditions for a fling. Generally this means that a touch scroll has ended with a + * {@link VelocityTracker velocity} in the direction of scrolling that meets or exceeds + * the {@link ViewConfiguration#getScaledMinimumFlingVelocity() minimum fling velocity} + * along a scrollable axis.</p> + * + * <p>If a nested scrolling child view would normally fling but it is at the edge of + * its own content, it can use this method to delegate the fling to its nested scrolling + * parent instead. The parent may optionally consume the fling or observe a child fling.</p> * * @param velocityX Horizontal fling velocity in pixels per second * @param velocityY Vertical fling velocity in pixels per second - * @return true if the nested scrolling parent consumed the fling + * @param consumed true if the child consumed the fling, false otherwise + * @return true if the nested scrolling parent consumed or otherwise reacted to the fling */ - public boolean dispatchNestedFling(float velocityX, float velocityY) { + public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) { if (isNestedScrollingEnabled() && mNestedScrollingParent != null) { - return mNestedScrollingParent.onNestedFling(this, velocityX, velocityY); + return mNestedScrollingParent.onNestedFling(this, velocityX, velocityY, consumed); } return false; } @@ -18864,6 +18884,22 @@ public class View implements Drawable.Callback, KeyEvent.Callback, }; /** + * A Property wrapper around the <code>z</code> functionality handled by the + * {@link View#setZ(float)} and {@link View#getZ()} methods. + */ + public static final Property<View, Float> Z = new FloatProperty<View>("z") { + @Override + public void setValue(View object, float value) { + object.setZ(value); + } + + @Override + public Float get(View object) { + return object.getZ(); + } + }; + + /** * A Property wrapper around the <code>rotation</code> functionality handled by the * {@link View#setRotation(float)} and {@link View#getRotation()} methods. */ diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java index 5112b9a..48a5bd5 100644 --- a/core/java/android/view/ViewConfiguration.java +++ b/core/java/android/view/ViewConfiguration.java @@ -287,8 +287,6 @@ public class ViewConfiguration { mEdgeSlop = (int) (sizeAndDensity * EDGE_SLOP + 0.5f); mFadingEdgeLength = (int) (sizeAndDensity * FADING_EDGE_LENGTH + 0.5f); - mMinimumFlingVelocity = (int) (density * MINIMUM_FLING_VELOCITY + 0.5f); - mMaximumFlingVelocity = (int) (density * MAXIMUM_FLING_VELOCITY + 0.5f); mScrollbarSize = (int) (density * SCROLL_BAR_SIZE + 0.5f); mDoubleTapSlop = (int) (sizeAndDensity * DOUBLE_TAP_SLOP + 0.5f); mWindowTouchSlop = (int) (sizeAndDensity * WINDOW_TOUCH_SLOP + 0.5f); @@ -339,6 +337,11 @@ public class ViewConfiguration { mPagingTouchSlop = mTouchSlop * 2; mDoubleTapTouchSlop = mTouchSlop; + + mMinimumFlingVelocity = res.getDimensionPixelSize( + com.android.internal.R.dimen.config_viewMinFlingVelocity); + mMaximumFlingVelocity = res.getDimensionPixelSize( + com.android.internal.R.dimen.config_viewMaxFlingVelocity); } /** diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 8865ab4..43bc0b6 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -2342,7 +2342,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (disallowIntercept) { mGroupFlags |= FLAG_DISALLOW_INTERCEPT; - stopNestedScroll(); } else { mGroupFlags &= ~FLAG_DISALLOW_INTERCEPT; } @@ -5914,7 +5913,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * @inheritDoc */ @Override - public boolean onNestedFling(View target, float velocityX, float velocityY) { + public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) { return false; } diff --git a/core/java/android/view/ViewParent.java b/core/java/android/view/ViewParent.java index 3cd6449..588b9cd 100644 --- a/core/java/android/view/ViewParent.java +++ b/core/java/android/view/ViewParent.java @@ -512,14 +512,21 @@ public interface ViewParent { /** * Request a fling from a nested scroll. * + * <p>This method signifies that a nested scrolling child has detected suitable conditions + * for a fling. Generally this means that a touch scroll has ended with a + * {@link VelocityTracker velocity} in the direction of scrolling that meets or exceeds + * the {@link ViewConfiguration#getScaledMinimumFlingVelocity() minimum fling velocity} + * along a scrollable axis.</p> + * * <p>If a nested scrolling child view would normally fling but it is at the edge of - * its own content, it can delegate the fling to its nested scrolling parent instead. - * This method allows the parent to optionally consume the fling.</p> + * its own content, it can use this method to delegate the fling to its nested scrolling + * parent instead. The parent may optionally consume the fling or observe a child fling.</p> * * @param target View that initiated the nested scroll * @param velocityX Horizontal velocity in pixels per second. * @param velocityY Vertical velocity in pixels per second - * @return true if this parent consumed the fling + * @param consumed true if the child consumed the fling, false otherwise + * @return true if this parent consumed or otherwise reacted to the fling */ - public boolean onNestedFling(View target, float velocityX, float velocityY); + public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed); } diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 14e422c..db87394 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -234,6 +234,7 @@ public final class ViewRootImpl implements ViewParent, InputStage mFirstInputStage; InputStage mFirstPostImeInputStage; + InputStage mSyntheticInputStage; boolean mWindowAttributesChanged = false; int mWindowAttributesChangesFlag = 0; @@ -599,8 +600,8 @@ public final class ViewRootImpl implements ViewParent, // Set up the input pipeline. CharSequence counterSuffix = attrs.getTitle(); - InputStage syntheticInputStage = new SyntheticInputStage(); - InputStage viewPostImeStage = new ViewPostImeInputStage(syntheticInputStage); + mSyntheticInputStage = new SyntheticInputStage(); + InputStage viewPostImeStage = new ViewPostImeInputStage(mSyntheticInputStage); InputStage nativePostImeStage = new NativePostImeInputStage(viewPostImeStage, "aq:native-post-ime:" + counterSuffix); InputStage earlyPostImeStage = new EarlyPostImeInputStage(nativePostImeStage); @@ -2587,10 +2588,6 @@ public final class ViewRootImpl implements ViewParent, * @param canvas The canvas on which to draw. */ private void drawAccessibilityFocusedDrawableIfNeeded(Canvas canvas) { - if (!mAttachInfo.mHasWindowFocus) { - return; - } - final AccessibilityManager manager = AccessibilityManager.getInstance(mView.mContext); if (!manager.isEnabled() || !manager.isTouchExplorationEnabled()) { return; @@ -3007,6 +3004,7 @@ public final class ViewRootImpl implements ViewParent, private final static int MSG_INVALIDATE_WORLD = 23; private final static int MSG_WINDOW_MOVED = 24; private final static int MSG_FLUSH_LAYER_UPDATES = 25; + private final static int MSG_SYNTHESIZE_INPUT_EVENT = 26; final class ViewRootHandler extends Handler { @Override @@ -3056,6 +3054,8 @@ public final class ViewRootImpl implements ViewParent, return "MSG_WINDOW_MOVED"; case MSG_FLUSH_LAYER_UPDATES: return "MSG_FLUSH_LAYER_UPDATES"; + case MSG_SYNTHESIZE_INPUT_EVENT: + return "MSG_SYNTHESIZE_INPUT_EVENT"; } return super.getMessageName(message); } @@ -3218,6 +3218,10 @@ public final class ViewRootImpl implements ViewParent, enqueueInputEvent(event, receiver, 0, true); args.recycle(); } break; + case MSG_SYNTHESIZE_INPUT_EVENT: { + InputEvent event = (InputEvent)msg.obj; + enqueueInputEvent(event, null, QueuedInputEvent.FLAG_UNHANDLED, true); + } break; case MSG_DISPATCH_KEY_FROM_IME: { if (LOCAL_LOGV) Log.v( TAG, "Dispatching key " @@ -3227,7 +3231,8 @@ public final class ViewRootImpl implements ViewParent, // The IME is trying to say this event is from the // system! Bad bad bad! //noinspection UnusedAssignment - event = KeyEvent.changeFlags(event, event.getFlags() & ~KeyEvent.FLAG_FROM_SYSTEM); + event = KeyEvent.changeFlags(event, event.getFlags() & + ~KeyEvent.FLAG_FROM_SYSTEM); } enqueueInputEvent(event, null, QueuedInputEvent.FLAG_DELIVER_POST_IME, true); } break; @@ -4023,6 +4028,7 @@ public final class ViewRootImpl implements ViewParent, private final SyntheticJoystickHandler mJoystick = new SyntheticJoystickHandler(); private final SyntheticTouchNavigationHandler mTouchNavigation = new SyntheticTouchNavigationHandler(); + private final SyntheticKeyboardHandler mKeyboard = new SyntheticKeyboardHandler(); public SyntheticInputStage() { super(null); @@ -4045,7 +4051,11 @@ public final class ViewRootImpl implements ViewParent, mTouchNavigation.process(event); return FINISH_HANDLED; } + } else if ((q.mFlags & QueuedInputEvent.FLAG_UNHANDLED) != 0) { + mKeyboard.process((KeyEvent)q.mEvent); + return FINISH_HANDLED; } + return FORWARD; } @@ -4882,6 +4892,33 @@ public final class ViewRootImpl implements ViewParent, }; } + final class SyntheticKeyboardHandler { + public void process(KeyEvent event) { + if ((event.getFlags() & KeyEvent.FLAG_FALLBACK) != 0) { + return; + } + + final KeyCharacterMap kcm = event.getKeyCharacterMap(); + final int keyCode = event.getKeyCode(); + final int metaState = event.getMetaState(); + + // Check for fallback actions specified by the key character map. + KeyCharacterMap.FallbackAction fallbackAction = + kcm.getFallbackAction(keyCode, metaState); + if (fallbackAction != null) { + final int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK; + KeyEvent fallbackEvent = KeyEvent.obtain( + event.getDownTime(), event.getEventTime(), + event.getAction(), fallbackAction.keyCode, + event.getRepeatCount(), fallbackAction.metaState, + event.getDeviceId(), event.getScanCode(), + flags, event.getSource(), null); + fallbackAction.recycle(); + enqueueInputEvent(fallbackEvent); + } + } + } + /** * Returns true if the key is used for keyboard navigation. * @param keyEvent The key event. @@ -5461,6 +5498,7 @@ public final class ViewRootImpl implements ViewParent, public static final int FLAG_FINISHED = 1 << 2; public static final int FLAG_FINISHED_HANDLED = 1 << 3; public static final int FLAG_RESYNTHESIZED = 1 << 4; + public static final int FLAG_UNHANDLED = 1 << 5; public QueuedInputEvent mNext; @@ -5475,6 +5513,14 @@ public final class ViewRootImpl implements ViewParent, return mEvent instanceof MotionEvent && mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER); } + + public boolean shouldSendToSynthesizer() { + if ((mFlags & FLAG_UNHANDLED) != 0) { + return true; + } + + return false; + } } private QueuedInputEvent obtainQueuedInputEvent(InputEvent event, @@ -5578,7 +5624,13 @@ public final class ViewRootImpl implements ViewParent, mInputEventConsistencyVerifier.onInputEvent(q.mEvent, 0); } - InputStage stage = q.shouldSkipIme() ? mFirstPostImeInputStage : mFirstInputStage; + InputStage stage; + if (q.shouldSendToSynthesizer()) { + stage = mSyntheticInputStage; + } else { + stage = q.shouldSkipIme() ? mFirstPostImeInputStage : mFirstInputStage; + } + if (stage != null) { stage.deliver(q); } else { @@ -5810,43 +5862,29 @@ public final class ViewRootImpl implements ViewParent, mHandler.sendMessage(msg); } - public void dispatchKeyFromIme(KeyEvent event) { - Message msg = mHandler.obtainMessage(MSG_DISPATCH_KEY_FROM_IME, event); + public void synthesizeInputEvent(InputEvent event) { + Message msg = mHandler.obtainMessage(MSG_SYNTHESIZE_INPUT_EVENT, event); msg.setAsynchronous(true); mHandler.sendMessage(msg); } - public void dispatchUnhandledKey(KeyEvent event) { - if ((event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) { - // Some fallback keys are decided by the ViewRoot as they might have special - // properties (e.g. are locale aware). These take precedence over fallbacks defined by - // the kcm. - final KeyCharacterMap kcm = event.getKeyCharacterMap(); - final int keyCode = event.getKeyCode(); - final int metaState = event.getMetaState(); - - // Check for fallback actions specified by the key character map. - KeyCharacterMap.FallbackAction fallbackAction = - kcm.getFallbackAction(keyCode, metaState); - if (fallbackAction != null) { - final int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK; - KeyEvent fallbackEvent = KeyEvent.obtain( - event.getDownTime(), event.getEventTime(), - event.getAction(), fallbackAction.keyCode, - event.getRepeatCount(), fallbackAction.metaState, - event.getDeviceId(), event.getScanCode(), - flags, event.getSource(), null); - fallbackAction.recycle(); - dispatchInputEvent(fallbackEvent); - } - } + public void dispatchKeyFromIme(KeyEvent event) { + Message msg = mHandler.obtainMessage(MSG_DISPATCH_KEY_FROM_IME, event); + msg.setAsynchronous(true); + mHandler.sendMessage(msg); } + /** + * Reinject unhandled {@link InputEvent}s in order to synthesize fallbacks events. + * + * Note that it is the responsibility of the caller of this API to recycle the InputEvent it + * passes in. + */ public void dispatchUnhandledInputEvent(InputEvent event) { - if (event instanceof KeyEvent) { - dispatchUnhandledKey((KeyEvent) event); - return; + if (event instanceof MotionEvent) { + event = MotionEvent.obtain((MotionEvent) event); } + synthesizeInputEvent(event); } public void dispatchAppVisibility(boolean visible) { @@ -6131,7 +6169,7 @@ public final class ViewRootImpl implements ViewParent, } @Override - public boolean onNestedFling(View target, float velocityX, float velocityY) { + public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) { return false; } diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index c9be54d..4fde1e4 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -76,14 +76,7 @@ import java.lang.annotation.RetentionPolicy; public interface WindowManagerPolicy { // Policy flags. These flags are also defined in frameworks/base/include/ui/Input.h. public final static int FLAG_WAKE = 0x00000001; - public final static int FLAG_WAKE_DROPPED = 0x00000002; - public final static int FLAG_SHIFT = 0x00000004; - public final static int FLAG_CAPS_LOCK = 0x00000008; - public final static int FLAG_ALT = 0x00000010; - public final static int FLAG_ALT_GR = 0x00000020; - public final static int FLAG_MENU = 0x00000040; - public final static int FLAG_LAUNCHER = 0x00000080; - public final static int FLAG_VIRTUAL = 0x00000100; + public final static int FLAG_VIRTUAL = 0x00000002; public final static int FLAG_INJECTED = 0x01000000; public final static int FLAG_TRUSTED = 0x02000000; @@ -450,8 +443,6 @@ public interface WindowManagerPolicy { public final int OFF_BECAUSE_OF_USER = 2; /** Screen turned off because of timeout */ public final int OFF_BECAUSE_OF_TIMEOUT = 3; - /** Screen turned off because of proximity sensor */ - public final int OFF_BECAUSE_OF_PROX_SENSOR = 4; /** @hide */ @IntDef({USER_ROTATION_FREE, USER_ROTATION_LOCKED}) @@ -907,23 +898,23 @@ public interface WindowManagerPolicy { public int focusChangedLw(WindowState lastFocus, WindowState newFocus); /** - * Called after the screen turns off. + * Called when the device is going to sleep. * * @param why {@link #OFF_BECAUSE_OF_USER} or * {@link #OFF_BECAUSE_OF_TIMEOUT}. */ - public void screenTurnedOff(int why); + public void goingToSleep(int why); public interface ScreenOnListener { void onScreenOn(); } /** - * Called when the power manager would like to turn the screen on. + * Called when the device is waking up. * Must call back on the listener to tell it when the higher-level system * is ready for the screen to go on (i.e. the lock screen is shown). */ - public void screenTurningOn(ScreenOnListener screenOnListener); + public void wakingUp(ScreenOnListener screenOnListener); /** * Return whether the screen is about to turn on or is currently on. diff --git a/core/java/android/view/inputmethod/InputMethodInfo.java b/core/java/android/view/inputmethod/InputMethodInfo.java index f8160c8..bc2d7ec 100644 --- a/core/java/android/view/inputmethod/InputMethodInfo.java +++ b/core/java/android/view/inputmethod/InputMethodInfo.java @@ -259,7 +259,7 @@ public final class InputMethodInfo implements Parcelable { public InputMethodInfo(String packageName, String className, CharSequence label, String settingsActivity) { this(buildDummyResolveInfo(packageName, className, label), false, settingsActivity, null, - 0, false); + 0, false /* forceDefault */, true /* supportsSwitchingToNextInputMethod */); } /** @@ -269,6 +269,17 @@ public final class InputMethodInfo implements Parcelable { public InputMethodInfo(ResolveInfo ri, boolean isAuxIme, String settingsActivity, List<InputMethodSubtype> subtypes, int isDefaultResId, boolean forceDefault) { + this(ri, isAuxIme, settingsActivity, subtypes, isDefaultResId, + forceDefault, true /* supportsSwitchingToNextInputMethod */); + } + + /** + * Temporary API for creating a built-in input method for test. + * @hide + */ + public InputMethodInfo(ResolveInfo ri, boolean isAuxIme, + String settingsActivity, List<InputMethodSubtype> subtypes, int isDefaultResId, + boolean forceDefault, boolean supportsSwitchingToNextInputMethod) { final ServiceInfo si = ri.serviceInfo; mService = ri; mId = new ComponentName(si.packageName, si.name).flattenToShortString(); @@ -277,7 +288,7 @@ public final class InputMethodInfo implements Parcelable { mIsAuxIme = isAuxIme; mSubtypes = new InputMethodSubtypeArray(subtypes); mForceDefault = forceDefault; - mSupportsSwitchingToNextInputMethod = true; + mSupportsSwitchingToNextInputMethod = supportsSwitchingToNextInputMethod; } private static ResolveInfo buildDummyResolveInfo(String packageName, String className, diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index c914e52..efb246a 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -701,7 +701,7 @@ public class WebView extends AbsoluteLayout */ @Deprecated public static void enablePlatformNotifications() { - getFactory().getStatics().setPlatformNotificationsEnabled(true); + // noop } /** @@ -713,7 +713,7 @@ public class WebView extends AbsoluteLayout */ @Deprecated public static void disablePlatformNotifications() { - getFactory().getStatics().setPlatformNotificationsEnabled(false); + // noop } /** @@ -1610,6 +1610,8 @@ public class WebView extends AbsoluteLayout * @return the address, or if no address is found, null */ public static String findAddress(String addr) { + // TODO: Rewrite this in Java so it is not needed to start up chromium + // Could also be deprecated return getFactory().getStatics().findAddress(addr); } diff --git a/core/java/android/webkit/WebViewClient.java b/core/java/android/webkit/WebViewClient.java index 688c251..33a6df6 100644 --- a/core/java/android/webkit/WebViewClient.java +++ b/core/java/android/webkit/WebViewClient.java @@ -19,6 +19,7 @@ package android.webkit; import android.graphics.Bitmap; import android.net.http.SslError; import android.os.Message; +import android.view.InputEvent; import android.view.KeyEvent; import android.view.ViewRootImpl; @@ -272,11 +273,42 @@ public class WebViewClient { * * @param view The WebView that is initiating the callback. * @param event The key event. + * @deprecated This method is subsumed by the more generic onUnhandledInputEvent. */ + @Deprecated public void onUnhandledKeyEvent(WebView view, KeyEvent event) { + onUnhandledInputEventInternal(view, event); + } + + /** + * Notify the host application that a input event was not handled by the WebView. + * Except system keys, WebView always consumes input events in the normal flow + * or if shouldOverrideKeyEvent returns true. This is called asynchronously + * from where the event is dispatched. It gives the host application a chance + * to handle the unhandled input events. + * + * Note that if the event is a {@link MotionEvent}, then it's lifetime is only that of the + * function call. If the WebViewClient wishes to use the event beyond that, then it <i>must</i> + * create a copy of the event. + * + * It is the responsibility of overriders of this method to call {@link onUnhandledKeyEvent} + * when appropriate if they wish to continue receiving events through it. + * + * @param view The WebView that is initiating the callback. + * @param event The input event. + */ + public void onUnhandledInputEvent(WebView view, InputEvent event) { + if (event instanceof KeyEvent) { + onUnhandledKeyEvent(view, (KeyEvent) event); + return; + } + onUnhandledInputEventInternal(view, event); + } + + private void onUnhandledInputEventInternal(WebView view, InputEvent event) { ViewRootImpl root = view.getViewRootImpl(); if (root != null) { - root.dispatchUnhandledKey(event); + root.dispatchUnhandledInputEvent(event); } } diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index becda67..0966be3 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -110,6 +110,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te * @see #setTranscriptMode(int) */ public static final int TRANSCRIPT_MODE_DISABLED = 0; + /** * The list will automatically scroll to the bottom when a data set change * notification is received and only if the last item is already visible @@ -118,6 +119,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te * @see #setTranscriptMode(int) */ public static final int TRANSCRIPT_MODE_NORMAL = 1; + /** * The list will automatically scroll to the bottom, no matter what items * are currently visible. @@ -2489,8 +2491,30 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te } } + /** + * Positions the selector in a way that mimics keyboard focus. If the + * selector drawable supports hotspots, this manages the focus hotspot. + */ + void positionSelectorLikeFocus(int position, View sel) { + positionSelector(position, sel); + + final Drawable selector = mSelector; + if (selector != null && selector.supportsHotspots() && position != INVALID_POSITION) { + final Rect bounds = mSelectorRect; + final float x = bounds.exactCenterX(); + final float y = bounds.exactCenterY(); + selector.setHotspot(R.attr.state_focused, x, y); + } + } + void positionSelector(int position, View sel) { if (position != INVALID_POSITION) { + if (mSelectorPosition != position) { + final Drawable selector = mSelector; + if (selector != null && selector.supportsHotspots()) { + selector.clearHotspots(); + } + } mSelectorPosition = position; } diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java index b47177a..10ec105 100644 --- a/core/java/android/widget/ListPopupWindow.java +++ b/core/java/android/widget/ListPopupWindow.java @@ -1565,7 +1565,7 @@ public class ListPopupWindow { // Ensure that keyboard focus starts from the last touched position. setSelectedPositionInt(position); - positionSelector(position, child); + positionSelectorLikeFocus(position, child); // Refresh the drawable state to reflect the new pressed state, // which will also update the selector state. diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index 5de67c8..eeb8015 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -2564,7 +2564,7 @@ public class ListView extends AbsListView { if (needToRedraw) { if (selectedView != null) { - positionSelector(selectedPos, selectedView); + positionSelectorLikeFocus(selectedPos, selectedView); mSelectedTop = selectedView.getTop(); } if (!awakenScrollBars()) { diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index 7e8f6b4..3e46f68 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -1565,10 +1565,10 @@ public class ScrollView extends FrameLayout { } private void flingWithNestedDispatch(int velocityY) { - if (mScrollY == 0 && velocityY < 0 || - mScrollY == getScrollRange() && velocityY > 0) { - dispatchNestedFling(0, velocityY); - } else { + final boolean canFling = (mScrollY > 0 || velocityY > 0) && + (mScrollY < getScrollRange() || velocityY < 0); + dispatchNestedFling(0, velocityY, canFling); + if (canFling) { fling(velocityY); } } @@ -1627,6 +1627,12 @@ public class ScrollView extends FrameLayout { return (nestedScrollAxes & SCROLL_AXIS_VERTICAL) != 0; } + @Override + public void onNestedScrollAccepted(View child, View target, int axes) { + super.onNestedScrollAccepted(child, target, axes); + startNestedScroll(SCROLL_AXIS_VERTICAL); + } + /** * @inheritDoc */ @@ -1638,16 +1644,23 @@ public class ScrollView extends FrameLayout { @Override public void onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { + final int oldScrollY = mScrollY; scrollBy(0, dyUnconsumed); + final int myConsumed = mScrollY - oldScrollY; + final int myUnconsumed = dyUnconsumed - myConsumed; + dispatchNestedScroll(0, myConsumed, 0, myUnconsumed, null); } /** * @inheritDoc */ @Override - public boolean onNestedFling(View target, float velocityX, float velocityY) { - flingWithNestedDispatch((int) velocityY); - return true; + public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) { + if (!consumed) { + flingWithNestedDispatch((int) velocityY); + return true; + } + return false; } @Override diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl index fc89b31..1bb577b 100644 --- a/core/java/com/android/internal/app/IBatteryStats.aidl +++ b/core/java/com/android/internal/app/IBatteryStats.aidl @@ -31,6 +31,14 @@ interface IBatteryStats { // Remaining methods are only used in Java. byte[] getStatistics(); + // Return the computed amount of time remaining on battery, in milliseconds. + // Returns -1 if nothing could be computed. + long computeBatteryTimeRemaining(); + + // Return the computed amount of time remaining to fully charge, in milliseconds. + // Returns -1 if nothing could be computed. + long computeChargeTimeRemaining(); + void addIsolatedUid(int isolatedUid, int appUid); void removeIsolatedUid(int isolatedUid, int appUid); diff --git a/core/java/com/android/internal/app/IntentForwarderActivity.java b/core/java/com/android/internal/app/IntentForwarderActivity.java new file mode 100644 index 0000000..2f74372 --- /dev/null +++ b/core/java/com/android/internal/app/IntentForwarderActivity.java @@ -0,0 +1,112 @@ +/* + * 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.internal.app; + +import android.app.Activity; +import android.app.AppGlobals; +import android.os.Bundle; +import android.content.Context; +import android.content.Intent; +import android.content.pm.IPackageManager; +import android.content.pm.UserInfo; +import android.os.UserHandle; +import android.os.UserManager; +import android.app.ActivityManagerNative; +import android.os.RemoteException; +import android.util.Slog; +import java.util.List; +import java.util.Set; + + + + +/* + * This is used in conjunction with DevicePolicyManager.setForwardingIntents to enable intents to be + * passed in and out of a managed profile. + */ + +public class IntentForwarderActivity extends Activity { + + public static String TAG = "IntentForwarderActivity"; + + public static String FORWARD_INTENT_TO_USER_OWNER + = "com.android.internal.app.ForwardIntentToUserOwner"; + + public static String FORWARD_INTENT_TO_MANAGED_PROFILE + = "com.android.internal.app.ForwardIntentToManagedProfile"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Intent intentReceived = getIntent(); + + String className = intentReceived.getComponent().getClassName(); + final UserHandle userDest; + + if (className.equals(FORWARD_INTENT_TO_USER_OWNER)) { + userDest = UserHandle.OWNER; + } else if (className.equals(FORWARD_INTENT_TO_MANAGED_PROFILE)) { + userDest = getManagedProfile(); + } else { + Slog.wtf(TAG, IntentForwarderActivity.class.getName() + " cannot be called directly"); + userDest = null; + } + if (userDest == null) { // This covers the case where there is no managed profile. + finish(); + return; + } + Intent newIntent = new Intent(intentReceived); + newIntent.setComponent(null); + newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT + |Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); + int callingUserId = getUserId(); + IPackageManager ipm = AppGlobals.getPackageManager(); + String resolvedType = newIntent.resolveTypeIfNeeded(getContentResolver()); + boolean canForward = false; + try { + canForward = ipm.canForwardTo(newIntent, resolvedType, callingUserId, + userDest.getIdentifier()); + } catch (RemoteException e) { + Slog.e(TAG, "PackageManagerService is dead?"); + } + if (canForward) { + startActivityAsUser(newIntent, userDest); + } else { + Slog.wtf(TAG, "the intent: " + newIntent + "cannot be forwarded from user " + + callingUserId + " to user " + userDest.getIdentifier()); + } + finish(); + } + + /** + * Returns the managed profile for this device or null if there is no managed + * profile. + * + * TODO: Remove the assumption that there is only one managed profile + * on the device. + */ + private UserHandle getManagedProfile() { + UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE); + List<UserInfo> relatedUsers = userManager.getProfiles(UserHandle.USER_OWNER); + for (UserInfo userInfo : relatedUsers) { + if (userInfo.isManagedProfile()) return new UserHandle(userInfo.id); + } + Slog.wtf(TAG, FORWARD_INTENT_TO_MANAGED_PROFILE + + " has been called, but there is no managed profile"); + return null; + } +} diff --git a/core/java/com/android/internal/app/WindowDecorActionBar.java b/core/java/com/android/internal/app/WindowDecorActionBar.java index 131f828..66548f0 100644 --- a/core/java/com/android/internal/app/WindowDecorActionBar.java +++ b/core/java/com/android/internal/app/WindowDecorActionBar.java @@ -17,7 +17,9 @@ package com.android.internal.app; import android.animation.ValueAnimator; +import android.content.res.TypedArray; import android.view.ViewParent; +import com.android.internal.R; import com.android.internal.view.ActionBarPolicy; import com.android.internal.view.menu.MenuBuilder; import com.android.internal.view.menu.MenuPopupHelper; @@ -41,7 +43,6 @@ import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.drawable.Drawable; -import android.os.Handler; import android.util.TypedValue; import android.view.ActionMode; import android.view.ContextThemeWrapper; @@ -57,7 +58,6 @@ import android.widget.SpinnerAdapter; import java.lang.ref.WeakReference; import java.util.ArrayList; -import java.util.Map; /** * WindowDecorActionBar is the ActionBar implementation used @@ -66,7 +66,8 @@ import java.util.Map; * across both the ActionBarView at the top of the screen and * a horizontal LinearLayout at the bottom which is normally hidden. */ -public class WindowDecorActionBar extends ActionBar { +public class WindowDecorActionBar extends ActionBar implements + ActionBarOverlayLayout.ActionBarVisibilityCallback { private static final String TAG = "WindowDecorActionBar"; private Context mContext; @@ -116,6 +117,7 @@ public class WindowDecorActionBar extends ActionBar { private Animator mCurrentShowAnim; private boolean mShowHideAnimationEnabled; + boolean mHideOnContentScroll; final AnimatorListener mHideListener = new AnimatorListenerAdapter() { @Override @@ -132,7 +134,7 @@ public class WindowDecorActionBar extends ActionBar { mCurrentShowAnim = null; completeDeferredDestroyActionMode(); if (mOverlayLayout != null) { - mOverlayLayout.requestFitSystemWindows(); + mOverlayLayout.requestApplyInsets(); } } }; @@ -183,7 +185,7 @@ public class WindowDecorActionBar extends ActionBar { mOverlayLayout = (ActionBarOverlayLayout) decor.findViewById( com.android.internal.R.id.action_bar_overlay_layout); if (mOverlayLayout != null) { - mOverlayLayout.setActionBar(this); + mOverlayLayout.setActionBarVisibilityCallback(this); } mActionView = (ActionBarView) decor.findViewById(com.android.internal.R.id.action_bar); mContextView = (ActionBarContextView) decor.findViewById( @@ -213,6 +215,14 @@ public class WindowDecorActionBar extends ActionBar { ActionBarPolicy abp = ActionBarPolicy.get(mContext); setHomeButtonEnabled(abp.enableHomeButtonByDefault() || homeAsUp); setHasEmbeddedTabs(abp.hasEmbeddedTabs()); + + final TypedArray a = mContext.obtainStyledAttributes(null, + com.android.internal.R.styleable.ActionBar, + com.android.internal.R.attr.actionBarStyle, 0); + if (a.getBoolean(R.styleable.ActionBar_hideOnContentScroll, false)) { + setHideOnContentScrollEnabled(true); + } + a.recycle(); } public void onConfigurationChanged(Configuration newConfig) { @@ -234,17 +244,14 @@ public class WindowDecorActionBar extends ActionBar { if (isInTabMode) { mTabScrollView.setVisibility(View.VISIBLE); if (mOverlayLayout != null) { - mOverlayLayout.requestFitSystemWindows(); + mOverlayLayout.requestApplyInsets(); } } else { mTabScrollView.setVisibility(View.GONE); } } mActionView.setCollapsable(!mHasEmbeddedTabs && isInTabMode); - } - - public boolean hasNonEmbeddedTabs() { - return !mHasEmbeddedTabs && getNavigationMode() == NAVIGATION_MODE_TABS; + mOverlayLayout.setHasNonEmbeddedTabs(!mHasEmbeddedTabs && isInTabMode); } private void ensureTabsExist() { @@ -279,7 +286,7 @@ public class WindowDecorActionBar extends ActionBar { } } - public void setWindowVisibility(int visibility) { + public void onWindowVisibilityChanged(int visibility) { mCurWindowVisibility = visibility; } @@ -453,6 +460,7 @@ public class WindowDecorActionBar extends ActionBar { mActionMode.finish(); } + mOverlayLayout.setHideOnContentScrollEnabled(false); mContextView.killMode(); ActionModeImpl mode = new ActionModeImpl(callback); if (mode.dispatchOnCreate()) { @@ -464,7 +472,7 @@ public class WindowDecorActionBar extends ActionBar { if (mSplitView.getVisibility() != View.VISIBLE) { mSplitView.setVisibility(View.VISIBLE); if (mOverlayLayout != null) { - mOverlayLayout.requestFitSystemWindows(); + mOverlayLayout.requestApplyInsets(); } } } @@ -652,6 +660,35 @@ public class WindowDecorActionBar extends ActionBar { } } + @Override + public void setHideOnContentScrollEnabled(boolean hideOnContentScroll) { + if (hideOnContentScroll && !mOverlayLayout.isInOverlayMode()) { + throw new IllegalStateException("Action bar must be in overlay mode " + + "(Window.FEATURE_OVERLAY_ACTION_BAR) to enable hide on content scroll"); + } + mHideOnContentScroll = hideOnContentScroll; + mOverlayLayout.setHideOnContentScrollEnabled(hideOnContentScroll); + } + + @Override + public boolean isHideOnContentScrollEnabled() { + return mOverlayLayout.isHideOnContentScrollEnabled(); + } + + @Override + public int getHideOffset() { + return mOverlayLayout.getActionBarHideOffset(); + } + + @Override + public void setHideOffset(int offset) { + if (offset != 0 && !mOverlayLayout.isInOverlayMode()) { + throw new IllegalStateException("Action bar must be in overlay mode " + + "(Window.FEATURE_OVERLAY_ACTION_BAR) to set a non-zero hide offset"); + } + mOverlayLayout.setActionBarHideOffset(offset); + } + private static boolean checkShowingFlags(boolean hiddenByApp, boolean hiddenBySystem, boolean showingForMode) { if (showingForMode) { @@ -737,7 +774,7 @@ public class WindowDecorActionBar extends ActionBar { mShowListener.onAnimationEnd(null); } if (mOverlayLayout != null) { - mOverlayLayout.requestFitSystemWindows(); + mOverlayLayout.requestApplyInsets(); } } @@ -781,11 +818,7 @@ public class WindowDecorActionBar extends ActionBar { } public boolean isShowing() { - return mNowShowing; - } - - public boolean isSystemShowing() { - return !mHiddenBySystem; + return mNowShowing && getHideOffset() < getHeight(); } void animateToMode(boolean toActionMode) { @@ -844,6 +877,18 @@ public class WindowDecorActionBar extends ActionBar { mActionView.setHomeActionContentDescription(resId); } + @Override + public void onContentScrollStarted() { + if (mCurrentShowAnim != null) { + mCurrentShowAnim.cancel(); + mCurrentShowAnim = null; + } + } + + @Override + public void onContentScrollStopped() { + } + /** * @hide */ @@ -894,6 +939,7 @@ public class WindowDecorActionBar extends ActionBar { // Clear out the context mode views after the animation finishes mContextView.closeMode(); mActionView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + mOverlayLayout.setHideOnContentScrollEnabled(mHideOnContentScroll); mActionMode = null; } @@ -1204,6 +1250,7 @@ public class WindowDecorActionBar extends ActionBar { break; } mActionView.setCollapsable(mode == NAVIGATION_MODE_TABS && !mHasEmbeddedTabs); + mOverlayLayout.setHasNonEmbeddedTabs(mode == NAVIGATION_MODE_TABS && !mHasEmbeddedTabs); } @Override diff --git a/core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java b/core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java index dcc0a4c..cba09d1 100644 --- a/core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java +++ b/core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java @@ -16,6 +16,7 @@ package com.android.internal.inputmethod; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.inputmethod.InputMethodUtils.InputMethodSettings; import android.content.Context; @@ -119,14 +120,14 @@ public class InputMethodSubtypeSwitchingController { } } - private static class InputMethodAndSubtypeCircularList { + private static class InputMethodAndSubtypeList { private final Context mContext; // Used to load label private final PackageManager mPm; private final String mSystemLocaleStr; private final InputMethodSettings mSettings; - public InputMethodAndSubtypeCircularList(Context context, InputMethodSettings settings) { + public InputMethodAndSubtypeList(Context context, InputMethodSettings settings) { mContext = context; mSettings = settings; mPm = context.getPackageManager(); @@ -152,38 +153,6 @@ public class InputMethodSubtypeSwitchingController { } }); - public ImeSubtypeListItem getNextInputMethod( - boolean onlyCurrentIme, InputMethodInfo imi, InputMethodSubtype subtype) { - if (imi == null) { - return null; - } - final List<ImeSubtypeListItem> imList = - getSortedInputMethodAndSubtypeList(); - if (imList.size() <= 1) { - return null; - } - final int N = imList.size(); - final int currentSubtypeId = - subtype != null ? InputMethodUtils.getSubtypeIdFromHashCode(imi, - subtype.hashCode()) : NOT_A_SUBTYPE_ID; - for (int i = 0; i < N; ++i) { - final ImeSubtypeListItem isli = imList.get(i); - if (isli.mImi.equals(imi) && isli.mSubtypeId == currentSubtypeId) { - if (!onlyCurrentIme) { - return imList.get((i + 1) % N); - } - for (int j = 0; j < N - 1; ++j) { - final ImeSubtypeListItem candidate = imList.get((i + j + 1) % N); - if (candidate.mImi.equals(imi)) { - return candidate; - } - } - return null; - } - } - return null; - } - public List<ImeSubtypeListItem> getSortedInputMethodAndSubtypeList() { return getSortedInputMethodAndSubtypeList(true, false, false); } @@ -247,7 +216,38 @@ public class InputMethodSubtypeSwitchingController { private final ArrayDeque<SubtypeParams> mTypedSubtypeHistory = new ArrayDeque<SubtypeParams>(); private final Object mLock = new Object(); private final InputMethodSettings mSettings; - private InputMethodAndSubtypeCircularList mSubtypeList; + private InputMethodAndSubtypeList mSubtypeList; + + @VisibleForTesting + public static ImeSubtypeListItem getNextInputMethodImpl(List<ImeSubtypeListItem> imList, + boolean onlyCurrentIme, InputMethodInfo imi, InputMethodSubtype subtype) { + if (imi == null) { + return null; + } + if (imList.size() <= 1) { + return null; + } + final int N = imList.size(); + final int currentSubtypeId = + subtype != null ? InputMethodUtils.getSubtypeIdFromHashCode(imi, + subtype.hashCode()) : NOT_A_SUBTYPE_ID; + for (int i = 0; i < N; ++i) { + final ImeSubtypeListItem isli = imList.get(i); + if (isli.mImi.equals(imi) && isli.mSubtypeId == currentSubtypeId) { + if (!onlyCurrentIme) { + return imList.get((i + 1) % N); + } + for (int j = 0; j < N - 1; ++j) { + final ImeSubtypeListItem candidate = imList.get((i + j + 1) % N); + if (candidate.mImi.equals(imi)) { + return candidate; + } + } + return null; + } + } + return null; + } public InputMethodSubtypeSwitchingController(InputMethodSettings settings) { mSettings = settings; @@ -278,14 +278,15 @@ public class InputMethodSubtypeSwitchingController { public void resetCircularListLocked(Context context) { synchronized(mLock) { - mSubtypeList = new InputMethodAndSubtypeCircularList(context, mSettings); + mSubtypeList = new InputMethodAndSubtypeList(context, mSettings); } } public ImeSubtypeListItem getNextInputMethod( boolean onlyCurrentIme, InputMethodInfo imi, InputMethodSubtype subtype) { synchronized(mLock) { - return mSubtypeList.getNextInputMethod(onlyCurrentIme, imi, subtype); + return getNextInputMethodImpl(mSubtypeList.getSortedInputMethodAndSubtypeList(), + onlyCurrentIme, imi, subtype); } } diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 93d2297..f63fa8a 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -6358,6 +6358,14 @@ public final class BatteryStatsImpl extends BatteryStats { return (msPerLevel * mCurrentBatteryLevel) * 1000; } + public int getNumDischargeStepDurations() { + return mNumDischargeStepDurations; + } + + public long[] getDischargeStepDurationsArray() { + return mDischargeStepDurations; + } + @Override public long computeChargeTimeRemaining(long curTime) { if (mOnBattery) { @@ -6387,6 +6395,14 @@ public final class BatteryStatsImpl extends BatteryStats { return (msPerLevel * (100-mCurrentBatteryLevel)) * 1000; } + public int getNumChargeStepDurations() { + return mNumChargeStepDurations; + } + + public long[] getChargeStepDurationsArray() { + return mChargeStepDurations; + } + long getBatteryUptimeLocked() { return mOnBatteryTimeBase.getUptime(SystemClock.uptimeMillis() * 1000); } @@ -7705,25 +7721,6 @@ public final class BatteryStatsImpl extends BatteryStats { pr.println("*** Bluetooth active type #" + i + ":"); mBluetoothStateTimer[i].logState(pr, " "); } - StringBuilder sb = new StringBuilder(128); - if (mNumDischargeStepDurations > 0) { - pr.println("*** Discharge step durations:"); - for (int i=0; i<mNumDischargeStepDurations; i++) { - sb.setLength(0); - sb.append(" #"); sb.append(i); sb.append(": "); - formatTimeMs(sb, mDischargeStepDurations[i]); - pr.println(sb.toString()); - } - } - if (mNumChargeStepDurations > 0) { - pr.println("*** Charge step durations:"); - for (int i=0; i<mNumChargeStepDurations; i++) { - sb.setLength(0); - sb.append(" #"); sb.append(i); sb.append(": "); - formatTimeMs(sb, mChargeStepDurations[i]); - pr.println(sb.toString()); - } - } } super.dumpLocked(context, pw, flags, reqUid, histStart); } diff --git a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java index c9dff1a..01bee0c 100644 --- a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java +++ b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java @@ -16,18 +16,22 @@ package com.android.internal.widget; -import android.graphics.Canvas; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.view.ViewGroup; -import android.view.WindowInsets; -import com.android.internal.app.WindowDecorActionBar; - +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.content.res.TypedArray; +import android.graphics.Canvas; import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.os.Build; import android.util.AttributeSet; +import android.util.IntProperty; +import android.util.Property; import android.view.View; +import android.view.ViewGroup; +import android.view.ViewPropertyAnimator; +import android.view.WindowInsets; +import android.widget.OverScroller; /** * Special layout for the containing of an overlay action bar (and its @@ -38,7 +42,7 @@ public class ActionBarOverlayLayout extends ViewGroup { private static final String TAG = "ActionBarOverlayLayout"; private int mActionBarHeight; - private WindowDecorActionBar mActionBar; + //private WindowDecorActionBar mActionBar; private int mWindowVisibility = View.VISIBLE; // The main UI elements that we handle the layout of. @@ -54,6 +58,10 @@ public class ActionBarOverlayLayout extends ViewGroup { private boolean mIgnoreWindowContentOverlay; private boolean mOverlayMode; + private boolean mHasNonEmbeddedTabs; + private boolean mHideOnContentScroll; + private boolean mAnimatingForFling; + private int mHideOnContentScrollReference; private int mLastSystemUiVisibility; private final Rect mBaseContentInsets = new Rect(); private final Rect mLastBaseContentInsets = new Rect(); @@ -62,6 +70,84 @@ public class ActionBarOverlayLayout extends ViewGroup { private final Rect mInnerInsets = new Rect(); private final Rect mLastInnerInsets = new Rect(); + private ActionBarVisibilityCallback mActionBarVisibilityCallback; + + private final int ACTION_BAR_ANIMATE_DELAY = 600; // ms + + private OverScroller mFlingEstimator; + + private ViewPropertyAnimator mCurrentActionBarTopAnimator; + private ViewPropertyAnimator mCurrentActionBarBottomAnimator; + + private final Animator.AnimatorListener mTopAnimatorListener = new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mCurrentActionBarTopAnimator = null; + mAnimatingForFling = false; + } + + @Override + public void onAnimationCancel(Animator animation) { + mCurrentActionBarTopAnimator = null; + mAnimatingForFling = false; + } + }; + + private final Animator.AnimatorListener mBottomAnimatorListener = + new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mCurrentActionBarBottomAnimator = null; + mAnimatingForFling = false; + } + + @Override + public void onAnimationCancel(Animator animation) { + mCurrentActionBarBottomAnimator = null; + mAnimatingForFling = false; + } + }; + + private final Runnable mRemoveActionBarHideOffset = new Runnable() { + public void run() { + haltActionBarHideOffsetAnimations(); + mCurrentActionBarTopAnimator = mActionBarTop.animate().translationY(0) + .setListener(mTopAnimatorListener); + if (mActionBarBottom != null && mActionBarBottom.getVisibility() != GONE) { + mCurrentActionBarBottomAnimator = mActionBarBottom.animate().translationY(0) + .setListener(mBottomAnimatorListener); + } + } + }; + + private final Runnable mAddActionBarHideOffset = new Runnable() { + public void run() { + haltActionBarHideOffsetAnimations(); + mCurrentActionBarTopAnimator = mActionBarTop.animate() + .translationY(-mActionBarTop.getHeight()) + .setListener(mTopAnimatorListener); + if (mActionBarBottom != null && mActionBarBottom.getVisibility() != GONE) { + mCurrentActionBarBottomAnimator = mActionBarBottom.animate() + .translationY(mActionBarBottom.getHeight()) + .setListener(mBottomAnimatorListener); + } + } + }; + + public static final Property<ActionBarOverlayLayout, Integer> ACTION_BAR_HIDE_OFFSET = + new IntProperty<ActionBarOverlayLayout>("actionBarHideOffset") { + + @Override + public void setValue(ActionBarOverlayLayout object, int value) { + object.setActionBarHideOffset(value); + } + + @Override + public Integer get(ActionBarOverlayLayout object) { + return object.getActionBarHideOffset(); + } + }; + static final int[] ATTRS = new int [] { com.android.internal.R.attr.actionBarSize, com.android.internal.R.attr.windowContentOverlay @@ -86,14 +172,22 @@ public class ActionBarOverlayLayout extends ViewGroup { mIgnoreWindowContentOverlay = context.getApplicationInfo().targetSdkVersion < Build.VERSION_CODES.KITKAT; + + mFlingEstimator = new OverScroller(context); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + haltActionBarHideOffsetAnimations(); } - public void setActionBar(WindowDecorActionBar impl) { - mActionBar = impl; + public void setActionBarVisibilityCallback(ActionBarVisibilityCallback cb) { + mActionBarVisibilityCallback = cb; if (getWindowToken() != null) { // This is being initialized after being added to a window; // make sure to update all state now. - mActionBar.setWindowVisibility(mWindowVisibility); + mActionBarVisibilityCallback.onWindowVisibilityChanged(mWindowVisibility); if (mLastSystemUiVisibility != 0) { int newVis = mLastSystemUiVisibility; onWindowSystemUiVisibilityChanged(newVis); @@ -114,6 +208,14 @@ public class ActionBarOverlayLayout extends ViewGroup { Build.VERSION_CODES.KITKAT; } + public boolean isInOverlayMode() { + return mOverlayMode; + } + + public void setHasNonEmbeddedTabs(boolean hasNonEmbeddedTabs) { + mHasNonEmbeddedTabs = hasNonEmbeddedTabs; + } + public void setShowingForActionMode(boolean showing) { if (showing) { // Here's a fun hack: if the status bar is currently being hidden, @@ -140,19 +242,18 @@ public class ActionBarOverlayLayout extends ViewGroup { pullChildren(); final int diff = mLastSystemUiVisibility ^ visible; mLastSystemUiVisibility = visible; - final boolean barVisible = (visible&SYSTEM_UI_FLAG_FULLSCREEN) == 0; - final boolean wasVisible = mActionBar != null ? mActionBar.isSystemShowing() : true; - final boolean stable = (visible&SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0; - if (mActionBar != null) { + final boolean barVisible = (visible & SYSTEM_UI_FLAG_FULLSCREEN) == 0; + final boolean stable = (visible & SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0; + if (mActionBarVisibilityCallback != null) { // We want the bar to be visible if it is not being hidden, // or the app has not turned on a stable UI mode (meaning they // are performing explicit layout around the action bar). - mActionBar.enableContentAnimations(!stable); - if (barVisible || !stable) mActionBar.showForSystem(); - else mActionBar.hideForSystem(); + mActionBarVisibilityCallback.enableContentAnimations(!stable); + if (barVisible || !stable) mActionBarVisibilityCallback.showForSystem(); + else mActionBarVisibilityCallback.hideForSystem(); } - if ((diff&SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0) { - if (mActionBar != null) { + if ((diff & SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0) { + if (mActionBarVisibilityCallback != null) { requestApplyInsets(); } } @@ -162,8 +263,8 @@ public class ActionBarOverlayLayout extends ViewGroup { protected void onWindowVisibilityChanged(int visibility) { super.onWindowVisibilityChanged(visibility); mWindowVisibility = visibility; - if (mActionBar != null) { - mActionBar.setWindowVisibility(visibility); + if (mActionBarVisibilityCallback != null) { + mActionBarVisibilityCallback.onWindowVisibilityChanged(visibility); } } @@ -279,8 +380,8 @@ public class ActionBarOverlayLayout extends ViewGroup { // This is the standard space needed for the action bar. For stable measurement, // we can't depend on the size currently reported by it -- this must remain constant. topInset = mActionBarHeight; - if (mActionBar != null && mActionBar.hasNonEmbeddedTabs()) { - View tabs = mActionBarTop.getTabContainer(); + if (mHasNonEmbeddedTabs) { + final View tabs = mActionBarTop.getTabContainer(); if (tabs != null) { // If tabs are not embedded, increase space on top to account for them. topInset += mActionBarHeight; @@ -395,16 +496,138 @@ public class ActionBarOverlayLayout extends ViewGroup { return false; } + @Override + public boolean onStartNestedScroll(View child, View target, int axes) { + if ((axes & SCROLL_AXIS_VERTICAL) == 0 || mActionBarTop.getVisibility() != VISIBLE) { + return false; + } + return mHideOnContentScroll; + } + + @Override + public void onNestedScrollAccepted(View child, View target, int axes) { + super.onNestedScrollAccepted(child, target, axes); + mHideOnContentScrollReference = getActionBarHideOffset(); + haltActionBarHideOffsetAnimations(); + if (mActionBarVisibilityCallback != null) { + mActionBarVisibilityCallback.onContentScrollStarted(); + } + } + + @Override + public void onNestedScroll(View target, int dxConsumed, int dyConsumed, + int dxUnconsumed, int dyUnconsumed) { + mHideOnContentScrollReference += dyConsumed; + setActionBarHideOffset(mHideOnContentScrollReference); + } + + @Override + public void onStopNestedScroll(View target) { + super.onStopNestedScroll(target); + if (mHideOnContentScroll && !mAnimatingForFling) { + if (mHideOnContentScrollReference <= mActionBarTop.getHeight()) { + postRemoveActionBarHideOffset(); + } else { + postAddActionBarHideOffset(); + } + } + if (mActionBarVisibilityCallback != null) { + mActionBarVisibilityCallback.onContentScrollStopped(); + } + } + + @Override + public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) { + if (!mHideOnContentScroll || !consumed) { + return false; + } + if (shouldHideActionBarOnFling(velocityX, velocityY)) { + addActionBarHideOffset(); + } else { + removeActionBarHideOffset(); + } + mAnimatingForFling = true; + return true; + } + void pullChildren() { if (mContent == null) { mContent = findViewById(com.android.internal.R.id.content); - mActionBarTop = (ActionBarContainer)findViewById( + mActionBarTop = (ActionBarContainer) findViewById( com.android.internal.R.id.action_bar_container); mActionBarView = (ActionBarView) findViewById(com.android.internal.R.id.action_bar); mActionBarBottom = findViewById(com.android.internal.R.id.split_action_bar); } } + public void setHideOnContentScrollEnabled(boolean hideOnContentScroll) { + if (hideOnContentScroll != mHideOnContentScroll) { + mHideOnContentScroll = hideOnContentScroll; + if (!hideOnContentScroll) { + stopNestedScroll(); + haltActionBarHideOffsetAnimations(); + setActionBarHideOffset(0); + } + } + } + + public boolean isHideOnContentScrollEnabled() { + return mHideOnContentScroll; + } + + public int getActionBarHideOffset() { + return -((int) mActionBarTop.getTranslationY()); + } + + public void setActionBarHideOffset(int offset) { + haltActionBarHideOffsetAnimations(); + final int topHeight = mActionBarTop.getHeight(); + offset = Math.max(0, Math.min(offset, topHeight)); + mActionBarTop.setTranslationY(-offset); + if (mActionBarBottom != null && mActionBarBottom.getVisibility() != GONE) { + // Match the hide offset proportionally for a split bar + final float fOffset = (float) offset / topHeight; + final int bOffset = (int) (mActionBarBottom.getHeight() * fOffset); + mActionBarBottom.setTranslationY(bOffset); + } + } + + private void haltActionBarHideOffsetAnimations() { + removeCallbacks(mRemoveActionBarHideOffset); + removeCallbacks(mAddActionBarHideOffset); + if (mCurrentActionBarTopAnimator != null) { + mCurrentActionBarTopAnimator.cancel(); + } + if (mCurrentActionBarBottomAnimator != null) { + mCurrentActionBarBottomAnimator.cancel(); + } + } + + private void postRemoveActionBarHideOffset() { + haltActionBarHideOffsetAnimations(); + postDelayed(mRemoveActionBarHideOffset, ACTION_BAR_ANIMATE_DELAY); + } + + private void postAddActionBarHideOffset() { + haltActionBarHideOffsetAnimations(); + postDelayed(mAddActionBarHideOffset, ACTION_BAR_ANIMATE_DELAY); + } + + private void removeActionBarHideOffset() { + haltActionBarHideOffsetAnimations(); + mRemoveActionBarHideOffset.run(); + } + + private void addActionBarHideOffset() { + haltActionBarHideOffsetAnimations(); + mAddActionBarHideOffset.run(); + } + + private boolean shouldHideActionBarOnFling(float velocityX, float velocityY) { + mFlingEstimator.fling(0, 0, 0, (int) velocityY, 0, 0, Integer.MIN_VALUE, Integer.MAX_VALUE); + final int finalY = mFlingEstimator.getFinalY(); + return finalY > mActionBarTop.getHeight(); + } public static class LayoutParams extends MarginLayoutParams { public LayoutParams(Context c, AttributeSet attrs) { @@ -423,4 +646,13 @@ public class ActionBarOverlayLayout extends ViewGroup { super(source); } } + + public interface ActionBarVisibilityCallback { + void onWindowVisibilityChanged(int visibility); + void showForSystem(); + void hideForSystem(); + void enableContentAnimations(boolean enable); + void onContentScrollStarted(); + void onContentScrollStopped(); + } } diff --git a/core/jni/android/graphics/YuvToJpegEncoder.cpp b/core/jni/android/graphics/YuvToJpegEncoder.cpp index 799782d..6591d60 100644 --- a/core/jni/android/graphics/YuvToJpegEncoder.cpp +++ b/core/jni/android/graphics/YuvToJpegEncoder.cpp @@ -226,16 +226,17 @@ static jboolean YuvImage_compressToJpeg(JNIEnv* env, jobject, jbyteArray inYuv, jint* imgOffsets = env->GetIntArrayElements(offsets, NULL); jint* imgStrides = env->GetIntArrayElements(strides, NULL); YuvToJpegEncoder* encoder = YuvToJpegEncoder::create(format, imgStrides); - if (encoder == NULL) { - return JNI_FALSE; + jboolean result = JNI_FALSE; + if (encoder != NULL) { + encoder->encode(strm, yuv, width, height, imgOffsets, jpegQuality); + delete encoder; + result = JNI_TRUE; } - encoder->encode(strm, yuv, width, height, imgOffsets, jpegQuality); - delete encoder; env->ReleaseByteArrayElements(inYuv, yuv, 0); env->ReleaseIntArrayElements(offsets, imgOffsets, 0); env->ReleaseIntArrayElements(strides, imgStrides, 0); - return JNI_TRUE; + return result; } /////////////////////////////////////////////////////////////////////////////// diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp index d8faaf3..09bdc61 100644 --- a/core/jni/android_media_AudioRecord.cpp +++ b/core/jni/android_media_AudioRecord.cpp @@ -393,13 +393,46 @@ static jint android_media_AudioRecord_readInShortArray(JNIEnv *env, jobject thi jshortArray javaAudioData, jint offsetInShorts, jint sizeInShorts) { - jint read = android_media_AudioRecord_readInByteArray(env, thiz, - (jbyteArray) javaAudioData, - offsetInShorts*2, sizeInShorts*2); - if (read > 0) { - read /= 2; + jshort* recordBuff = NULL; + // get the audio recorder from which we'll read new audio samples + sp<AudioRecord> lpRecorder = getAudioRecord(env, thiz); + if (lpRecorder == NULL) { + ALOGE("Unable to retrieve AudioRecord object, can't record"); + return 0; } - return read; + + if (!javaAudioData) { + ALOGE("Invalid Java array to store recorded audio, can't record"); + return 0; + } + + // get the pointer to where we'll record the audio + // NOTE: We may use GetPrimitiveArrayCritical() when the JNI implementation changes in such + // a way that it becomes much more efficient. When doing so, we will have to prevent the + // AudioSystem callback to be called while in critical section (in case of media server + // process crash for instance) + recordBuff = (jshort *)env->GetShortArrayElements(javaAudioData, NULL); + + if (recordBuff == NULL) { + ALOGE("Error retrieving destination for recorded audio data, can't record"); + return 0; + } + + // read the new audio data from the native AudioRecord object + const size_t recorderBuffSize = lpRecorder->frameCount()*lpRecorder->frameSize(); + const size_t sizeInBytes = sizeInShorts * sizeof(short); + ssize_t readSize = lpRecorder->read(recordBuff + offsetInShorts * sizeof(short), + sizeInBytes > recorderBuffSize ? + recorderBuffSize : sizeInBytes); + + env->ReleaseShortArrayElements(javaAudioData, recordBuff, 0); + + if (readSize < 0) { + readSize = AUDIORECORD_ERROR_INVALID_OPERATION; + } else { + readSize /= sizeof(short); + } + return (jint) readSize; } // ---------------------------------------------------------------------------- diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp index 162d0c4..da752752 100644 --- a/core/jni/android_media_AudioTrack.cpp +++ b/core/jni/android_media_AudioTrack.cpp @@ -637,14 +637,43 @@ static jint android_media_AudioTrack_write_short(JNIEnv *env, jobject thiz, jshortArray javaAudioData, jint offsetInShorts, jint sizeInShorts, jint javaAudioFormat) { - jint written = android_media_AudioTrack_write_byte(env, thiz, - (jbyteArray) javaAudioData, - offsetInShorts*2, sizeInShorts*2, - javaAudioFormat, - JNI_TRUE /*blocking write, legacy behavior*/); + + //ALOGV("android_media_AudioTrack_write_short(offset=%d, sizeInShorts=%d) called", + // offsetInShorts, sizeInShorts); + sp<AudioTrack> lpTrack = getAudioTrack(env, thiz); + if (lpTrack == NULL) { + jniThrowException(env, "java/lang/IllegalStateException", + "Unable to retrieve AudioTrack pointer for write()"); + return 0; + } + + // get the pointer for the audio data from the java array + // NOTE: We may use GetPrimitiveArrayCritical() when the JNI implementation changes in such + // a way that it becomes much more efficient. When doing so, we will have to prevent the + // AudioSystem callback to be called while in critical section (in case of media server + // process crash for instance) + jshort* cAudioData = NULL; + if (javaAudioData) { + cAudioData = (jshort *)env->GetShortArrayElements(javaAudioData, NULL); + if (cAudioData == NULL) { + ALOGE("Error retrieving source of audio data to play, can't play"); + return 0; // out of memory or no data to load + } + } else { + ALOGE("NULL java array of audio data to play, can't play"); + return 0; + } + jint written = writeToTrack(lpTrack, javaAudioFormat, (jbyte *)cAudioData, + offsetInShorts * sizeof(short), sizeInShorts * sizeof(short), + true /*blocking write, legacy behavior*/); + env->ReleaseShortArrayElements(javaAudioData, cAudioData, 0); + if (written > 0) { - written /= 2; + written /= sizeof(short); } + //ALOGV("write wrote %d (tried %d) shorts in the native AudioTrack with offset %d", + // (int)written, (int)(sizeInShorts), (int)offsetInShorts); + return written; } diff --git a/core/jni/android_view_KeyEvent.cpp b/core/jni/android_view_KeyEvent.cpp index c83541d..7ae21a7 100644 --- a/core/jni/android_view_KeyEvent.cpp +++ b/core/jni/android_view_KeyEvent.cpp @@ -22,6 +22,7 @@ #include <android_runtime/Log.h> #include <utils/Log.h> #include <input/Input.h> +#include <ScopedUtfChars.h> #include "android_view_KeyEvent.h" namespace android { @@ -102,20 +103,25 @@ status_t android_view_KeyEvent_recycle(JNIEnv* env, jobject eventObj) { return OK; } -static jboolean native_isSystemKey(JNIEnv* env, jobject clazz, jint keyCode) { - return KeyEvent::isSystemKey(keyCode); +static jstring android_view_KeyEvent_nativeKeyCodeToString(JNIEnv* env, jobject clazz, + jint keyCode) { + return env->NewStringUTF(KeyEvent::getLabel(keyCode)); } -static jboolean native_hasDefaultAction(JNIEnv* env, jobject clazz, jint keyCode) { - return KeyEvent::hasDefaultAction(keyCode); +static jint android_view_KeyEvent_nativeKeyCodeFromString(JNIEnv* env, jobject clazz, + jstring label) { + ScopedUtfChars keyLabel(env, label); + return KeyEvent::getKeyCodeFromLabel(keyLabel.c_str()); } // ---------------------------------------------------------------------------- static const JNINativeMethod g_methods[] = { - { "native_isSystemKey", "(I)Z", (void*)native_isSystemKey }, - { "native_hasDefaultAction", "(I)Z", (void*)native_hasDefaultAction }, + { "nativeKeyCodeToString", "(I)Ljava/lang/String;", + (void*)android_view_KeyEvent_nativeKeyCodeToString}, + { "nativeKeyCodeFromString", "(Ljava/lang/String;)I", + (void*)android_view_KeyEvent_nativeKeyCodeFromString}, }; #define FIND_CLASS(var, className) \ diff --git a/core/jni/android_view_MotionEvent.cpp b/core/jni/android_view_MotionEvent.cpp index 76e145b..6ae02e0 100644 --- a/core/jni/android_view_MotionEvent.cpp +++ b/core/jni/android_view_MotionEvent.cpp @@ -23,6 +23,7 @@ #include <android_runtime/Log.h> #include <utils/Log.h> #include <input/Input.h> +#include <ScopedUtfChars.h> #include "android_os_Parcel.h" #include "android_view_MotionEvent.h" #include "android_util_Binder.h" @@ -724,6 +725,17 @@ static void android_view_MotionEvent_nativeWriteToParcel(JNIEnv* env, jclass cla } } +static jstring android_view_MotionEvent_nativeAxisToString(JNIEnv* env, jclass clazz, + jint axis) { + return env->NewStringUTF(MotionEvent::getLabel(static_cast<int32_t>(axis))); +} + +static jint android_view_MotionEvent_nativeAxisFromString(JNIEnv* env, jclass clazz, + jstring label) { + ScopedUtfChars axisLabel(env, label); + return static_cast<jint>(MotionEvent::getAxisFromLabel(axisLabel.c_str())); +} + // ---------------------------------------------------------------------------- static JNINativeMethod gMotionEventMethods[] = { @@ -840,6 +852,10 @@ static JNINativeMethod gMotionEventMethods[] = { { "nativeWriteToParcel", "(JLandroid/os/Parcel;)V", (void*)android_view_MotionEvent_nativeWriteToParcel }, + { "nativeAxisToString", "(I)Ljava/lang/String;", + (void*)android_view_MotionEvent_nativeAxisToString }, + { "nativeAxisFromString", "(Ljava/lang/String;)I", + (void*)android_view_MotionEvent_nativeAxisFromString }, }; #define FIND_CLASS(var, className) \ diff --git a/core/jni/android_view_RenderNodeAnimator.cpp b/core/jni/android_view_RenderNodeAnimator.cpp index 35cdf60..b92c992 100644 --- a/core/jni/android_view_RenderNodeAnimator.cpp +++ b/core/jni/android_view_RenderNodeAnimator.cpp @@ -37,6 +37,8 @@ static struct { jmethodID callOnFinished; } gRenderNodeAnimatorClassInfo; +#ifdef USE_OPENGL_RENDERER + static JNIEnv* getEnv(JavaVM* vm) { JNIEnv* env; if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { @@ -93,6 +95,8 @@ static void unref(JNIEnv* env, jobject clazz, jlong objPtr) { obj->decStrong(0); } +#endif + // ---------------------------------------------------------------------------- // JNI Glue // ---------------------------------------------------------------------------- @@ -100,9 +104,11 @@ static void unref(JNIEnv* env, jobject clazz, jlong objPtr) { const char* const kClassPathName = "android/view/RenderNodeAnimator"; static JNINativeMethod gMethods[] = { +#ifdef USE_OPENGL_RENDERER { "nCreateAnimator", "(Ljava/lang/ref/WeakReference;IIF)J", (void*) createAnimator }, { "nSetDuration", "(JI)V", (void*) setDuration }, { "nUnref", "(J)V", (void*) unref }, +#endif }; #define FIND_CLASS(var, className) \ diff --git a/core/jni/android_view_RenderNodeAnimator.h b/core/jni/android_view_RenderNodeAnimator.h index d84003f..760ca91 100644 --- a/core/jni/android_view_RenderNodeAnimator.h +++ b/core/jni/android_view_RenderNodeAnimator.h @@ -16,6 +16,8 @@ #include "jni.h" +#ifdef USE_OPENGL_RENDERER + #include <Animator.h> namespace android { @@ -34,3 +36,5 @@ private: }; } + +#endif diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index a61fa87..c58bf04 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -92,14 +92,10 @@ static void SigChldHandler(int /*signal_number*/) { if (WIFEXITED(status)) { if (WEXITSTATUS(status)) { ALOGI("Process %d exited cleanly (%d)", pid, WEXITSTATUS(status)); - } else if (false) { - ALOGI("Process %d exited cleanly (%d)", pid, WEXITSTATUS(status)); } } else if (WIFSIGNALED(status)) { if (WTERMSIG(status) != SIGKILL) { - ALOGI("Process %d exited cleanly (%d)", pid, WTERMSIG(status)); - } else if (false) { - ALOGI("Process %d exited cleanly (%d)", pid, WTERMSIG(status)); + ALOGI("Process %d exited due to signal (%d)", pid, WTERMSIG(status)); } #ifdef WCOREDUMP if (WCOREDUMP(status)) { @@ -117,8 +113,10 @@ static void SigChldHandler(int /*signal_number*/) { } } - if (pid < 0) { - ALOGW("Zygote SIGCHLD error in waitpid: %d", errno); + // Note that we shouldn't consider ECHILD an error because + // the secondary zygote might have no children left to wait for. + if (pid < 0 && errno != ECHILD) { + ALOGW("Zygote SIGCHLD error in waitpid: %s", strerror(errno)); } } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 4f093a8..3d3e86f 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2681,6 +2681,26 @@ <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> + <activity android:name="com.android.internal.app.IntentForwarderActivity" + android:finishOnCloseSystemDialogs="true" + android:theme="@style/Theme.NoDisplay" + android:excludeFromRecents="true" + android:label="@string/user_owner_label" + android:exported="true" + > + </activity> + <activity-alias android:name="com.android.internal.app.ForwardIntentToUserOwner" + android:targetActivity="com.android.internal.app.IntentForwarderActivity" + android:icon="@drawable/personal_icon" + android:exported="true" + android:label="@string/user_owner_label"> + </activity-alias> + <activity-alias android:name="com.android.internal.app.ForwardIntentToManagedProfile" + android:targetActivity="com.android.internal.app.IntentForwarderActivity" + android:icon="@drawable/work_icon" + android:exported="true" + android:label="@string/managed_profile_label"> + </activity-alias> <activity android:name="com.android.internal.app.HeavyWeightSwitcherActivity" android:theme="@style/Theme.Holo.Dialog" android:label="@string/heavy_weight_switcher_title" diff --git a/core/res/res/drawable-hdpi/personal_icon.png b/core/res/res/drawable-hdpi/personal_icon.png Binary files differnew file mode 100644 index 0000000..8d96b5e --- /dev/null +++ b/core/res/res/drawable-hdpi/personal_icon.png diff --git a/core/res/res/drawable-hdpi/work_icon.png b/core/res/res/drawable-hdpi/work_icon.png Binary files differnew file mode 100644 index 0000000..e90866b --- /dev/null +++ b/core/res/res/drawable-hdpi/work_icon.png diff --git a/core/res/res/layout/alert_dialog_micro.xml b/core/res/res/layout/alert_dialog_micro.xml new file mode 100644 index 0000000..f8eb46c --- /dev/null +++ b/core/res/res/layout/alert_dialog_micro.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ 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 + --> + +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/parentPanel" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <LinearLayout android:id="@+id/topPanel" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + <View android:id="@+id/titleDividerTop" + android:layout_width="match_parent" + android:layout_height="2dip" + android:visibility="gone" + android:background="@android:color/holo_blue_light" /> + <LinearLayout android:id="@+id/title_template" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="center_vertical|start" + android:minHeight="@dimen/alert_dialog_title_height" + android:layout_marginStart="16dip" + android:layout_marginEnd="16dip"> + <ImageView android:id="@+id/icon" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingEnd="8dip" + android:src="@null" /> + <com.android.internal.widget.DialogTitle android:id="@+id/alertTitle" + style="?android:attr/windowTitleStyle" + android:singleLine="true" + android:ellipsize="end" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAlignment="viewStart" /> + </LinearLayout> + <View android:id="@+id/titleDivider" + android:layout_width="match_parent" + android:layout_height="2dip" + android:visibility="gone" + android:background="@android:color/holo_blue_light" /> + <!-- If the client uses a customTitle, it will be added here. --> + </LinearLayout> + + <LinearLayout android:id="@+id/contentPanel" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_weight="1" + android:orientation="vertical" + android:minHeight="64dp"> + <ScrollView android:id="@+id/scrollView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:clipToPadding="false"> + <TextView android:id="@+id/message" + style="?android:attr/textAppearanceMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingStart="16dip" + android:paddingEnd="16dip" + android:paddingTop="8dip" + android:paddingBottom="8dip"/> + </ScrollView> + </LinearLayout> + + <FrameLayout android:id="@+id/customPanel" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_weight="1" + android:minHeight="64dp"> + <FrameLayout android:id="@+android:id/custom" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + </FrameLayout> + + <LinearLayout android:id="@+id/buttonPanel" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minHeight="@dimen/alert_dialog_button_bar_height" + android:orientation="vertical" + android:divider="?android:attr/dividerHorizontal" + android:showDividers="beginning" + android:dividerPadding="0dip"> + <LinearLayout + style="?android:attr/buttonBarStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:layoutDirection="locale" + android:measureWithLargestChild="true"> + <Button android:id="@+id/button2" + android:layout_width="wrap_content" + android:layout_gravity="start" + android:layout_weight="1" + android:maxLines="2" + style="?android:attr/buttonBarButtonStyle" + android:textSize="14sp" + android:minHeight="@dimen/alert_dialog_button_bar_height" + android:layout_height="wrap_content" /> + <Button android:id="@+id/button3" + android:layout_width="wrap_content" + android:layout_gravity="center_horizontal" + android:layout_weight="1" + android:maxLines="2" + style="?android:attr/buttonBarButtonStyle" + android:textSize="14sp" + android:minHeight="@dimen/alert_dialog_button_bar_height" + android:layout_height="wrap_content" /> + <Button android:id="@+id/button1" + android:layout_width="wrap_content" + android:layout_gravity="end" + android:layout_weight="1" + android:maxLines="2" + android:minHeight="@dimen/alert_dialog_button_bar_height" + style="?android:attr/buttonBarButtonStyle" + android:textSize="14sp" + android:layout_height="wrap_content" /> + </LinearLayout> + </LinearLayout> +</LinearLayout> diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index db4092e..20d306d 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="UNIT">%2$s</xliff:g><xliff:g id="NUMBER">%1$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Titelloos>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Dit laat die houer toe om aan die topvlak-koppelvlak van \'n VPN-diens te bind. Dit moet nooit vir normale programme nodig wees nie."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"bind aan \'n muurpapier"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Dit laat die houer toe om aan die topvlak-koppelvlak van \'n muurpapier te bind. Dit moet nooit vir normale programme nodig wees nie."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"verbind met \'n steminteraksiediens"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Laat die houer toe om met die topvlak-koppelvlak van \'n steminteraksiediens te verbind. Behoort nooit vir normale programme nodig te wees nie."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"koppel aan \'n afstandskerm"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Dit laat die houer toe om aan die top-koppelvlak van \'n afstandskerm te koppel. Behoort nooit vir gewone programme nodig te wees nie."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind aan \'n legstukdiens"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Laat die program toe om kennisgewings op te haal, te bestudeer en te verwyder, insluitende die kennisgewings wat deur ander programme geplaas is."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bind aan \'n kennisgewingluisteraardiens"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Laat die houer toe om aan die top-koppelvlak van \'n kennisgewingluisteraardiens te bind. Behoort nooit vir gewone programme nodig te wees nie."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"verbind met \'n toestandverskafferdiens"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Laat die houer toe om met die topvlak-koppelvlak van \'n toestandverskafferdiens te verbind. Behoort nooit vir normale programme nodig te wees nie."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"roep die opstellingprogram op wat deur die diensverskaffer voorsien is"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Laat die houer toe om die opstellingsprogram wat deur die diensverskaffer voorsien word, op te roep. Behoort nooit vir gewone programme nodig te wees nie."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"luister vir waarnemings oor netwerktoestande"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Muurpapier"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Verander muurpapier"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Kennisgewingluisteraar"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Toestandverskaffer"</string> <string name="vpn_title" msgid="19615213552042827">"VPN geaktiveer"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN is geaktiveer deur <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Raak om die netwerk te bestuur."</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index de89ec6..04bfee5 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<ርዕስ አልባ>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,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> - <!-- no translation found for global_action_settings (1756531602592545966) --> - <skip /> + <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"የVPN ግልጋሎትን ወደ ከፍተኛ-ደረጃ በየነ ገጽ ለማሳር ለመያዣው ይፈቅዳሉ፡፡ለተለመዱ መተግበሪያዎች አያስፈልግም፡፡"</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"በልጣፍ ጠርዝ"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"ያዡ ግቤት ስልቱን ወደ ከፍተኛ-ደረጃ ልጣፍ ለመጠረዝ ይፈቅዳሉ። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"ከአንድ የድምጽ በይነተገናኝ ጋር ይሰሩ"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"ያዢው የአንድ የድምጽ በይነግንኙነት አገልግሎት የከፍተኛ ደረጃ በይነገጽ እንዲያስር ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ አያስፈልግም።"</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"ከአንድ የርቀት ማሳያ ጋር ይጠርዛል"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"ያዢው ከአንድ የርቀት ማሳያ ከፍተኛ-ደረጃ በይነገጽ ጋር እንዲጠርዝ ይፈቅድለታል። ለመደበኛ መተግበሪያዎች በጭራሽ አያስፈልግም።"</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ወደ ፍርግም አገልግሎት አያይዝ"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"መተግበሪያው ማሳወቂያዎችን እንዲያስመጣ፣ እንዲመረምር እና እንዲያጸዳ ያስችለዋል፣ በሌሎች መተግበሪያዎች የተለጠፉትንም ጨምሮ።"</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"ከአንድ የማሳወቂያ አዳማጭ አገልግሎት ጋር ይሰሩ"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"ያዢው የማሳወቂያ አዳማጭ አገልግሎቱን ከከፍተኛ-ደረጃ በይነገጹ ጋር እንዲያስር ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ አያስፈልግም።"</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"ከአንድ የሁኔታ አቅራቢ አገልግሎት ጋር ይሰሩ"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"ያዢው የአንድ የሁኔታ አቅራቢ አገልግሎት የከፍተኛ ደረጃ በይነገጽ እንዲያስር ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ አያስፈልግም።"</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"በድምጸ-ተያያዥ ሞደም የቀረበው የውቅር መተግበሪያውን መጥራት"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"ያዢው በድምጸ-ተያያዥ ሞደም የቀረበው የውቅር መተግበሪያውን እንዲጠራው ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ አያስፈልግም።"</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"በአውታረ መረብ ሁኔታዎች ላይ የተስተዋሉ ነገሮችን ያዳምጣል"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"ልጣፍ"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"ልጣፍ ለውጥ"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"ማሳወቂያ አዳማጭ"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"የሁኔታ አቅራቢ"</string> <string name="vpn_title" msgid="19615213552042827">"VPN ነቅቷል።"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN በ<xliff:g id="APP">%s</xliff:g>ገብሯል"</string> <string name="vpn_text" msgid="3011306607126450322">"አውታረመረብ ለማደራጀት ንካ።"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 2ee49bd..83168e4 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"تيرابايت"</string> <string name="petabyteShort" msgid="5637816680144990219">"بيتابايت"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<بلا عنوان>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة الشبكة الظاهرية الخاصة (VPN). لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"الالتزام بخلفية ما"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"للسماح للمالك بالالتزام بواجهة المستوى العلوي للخلفية. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"الربط بخدمة التفاعل الصوتي"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"للسماح للمالك بالربط بواجهة المستوى العلوي لخدمة التفاعل الصوتي. لن تكون هناك حاجة إلى هذا الإعداد مطلقًا مع التطبيقات العادية."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"الربط بالشاشة عن بُعد"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"للسماح للمالك بالالتزام بواجهة المستوى العلوي للعرض عن بُعد. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"الالتزام بخدمة أداة"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"يتيح للتطبيق استرجاع الإشعارات وفحصها ومسحها، بما في ذلك تلك التي نشرتها تطبيقات أخرى."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"الربط بخدمة تلقّي الإشعارات الصوتية"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"يتيح للمالك الربط بواجهة المستوى العلوي لخدمة تلقّي الإشعارات الصوتية. ولن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"الربط بخدمة موفر الحالة"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"للسماح للمالك بالربط بواجهة المستوى العلوي لخدمة موفر الحالة. لن تكون هناك حاجة إلى هذا الإعداد مطلقًا مع التطبيقات العادية."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"استدعاء تطبيق التهيئة الذي يوفره مشغل شبكة الجوال"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"للسماح للمالك باستدعاء تطبيق التهيئة الذي يوفره مشغل شبكة الجوال. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"الاستماع إلى ملاحظات حول أحوال الشبكة"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"الخلفية"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"تغيير الخلفية"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"برنامج تلقّي الإشعارات الصوتية"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"موفر الحالة"</string> <string name="vpn_title" msgid="19615213552042827">"تم تنشيط الشبكة الظاهرية الخاصة (VPN)"</string> <string name="vpn_title_long" msgid="6400714798049252294">"تم تنشيط VPN بواسطة <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"المس لإدارة الشبكة."</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 3f00f1f..2d22cdc 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"ТБ"</string> <string name="petabyteShort" msgid="5637816680144990219">"ПБ"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Без заглавие>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string> @@ -173,8 +195,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> - <!-- no translation found for global_action_settings (1756531602592545966) --> - <skip /> + <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Разрешава на притежателя да се обвърже с интерфейса от най-високото ниво на услуга за VPN. Нормалните приложения би трябвало никога да не се нуждаят от това."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"обвързване с тапет"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Разрешава на притежателя да се обвърже с интерфейса от най-високото ниво на тапет. Нормалните приложения би трябвало никога да не се нуждаят от това."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"свързване с услуга за гласово взаимодействие"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Разрешава на притежателя да се свърже с интерфейса от най-високото ниво на услуга за гласово взаимодействие. Нормалните приложения би трябвало никога да не се нуждаят от това."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"свързване с отдалечен екран"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Разрешава на притежателя да се свърже с интерфейса от първо ниво на отдалечен екран. Нормалните приложения би трябвало никога да не се нуждаят от това."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"обвързване с услуга за приспособления"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Разрешава на приложението да извлича, преглежда и изчиства известия, включително публикуваните от други приложения."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"обвързване с услуга за слушател на известия"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Разрешава на притежателя да се обвърже с интерфейса от първо ниво на услуга за слушател на известия. Нормалните приложения не би трябвало никога да се нуждаят от това."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"свързване с услуга за предоставяне на условия"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Разрешава на притежателя да се свърже с интерфейса от най-високото ниво на услуга за предоставяне на условия. Нормалните приложения би трябвало никога да не се нуждаят от това."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"извикване на предоставеното от оператора приложение за конфигуриране"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Разрешава на притежателя да извиква предоставеното от оператора приложение за конфигуриране. Нормалните приложения би трябвало никога да не се нуждаят от това."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"слушане за наблюдения на мрежовите условия"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Тапет"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Промяна на тапета"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Слушател на известия"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Доставчик на условия"</string> <string name="vpn_title" msgid="19615213552042827">"VPN е активирана"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN е активирана от <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Докоснете за управление на мрежата."</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index afb0852..cfb77d3 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Sense títol>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permet que el titular vinculi a la interfície de nivell superior d\'un servei de VPN. No s\'hauria de necessitar mai per a les aplicacions normals."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"enllaça amb un fons de pantalla"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permet que el titular vinculi a la interfície de nivell superior d\'un fons de pantalla. No s\'hauria de necessitar mai per a les aplicacions normals."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"vinculació amb una eina d\'interacció de veu"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Permet que el titular es vinculi amb la interfície de nivell superior d\'un servei d\'interacció de veu. No ha de ser mai necessari per a aplicacions normals."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"vincula a una pantalla remota"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permet que el titular es vinculi a la interfície de nivell superior d\'una pantalla remota. No s\'hauria de necessitar mai per a les aplicacions normals."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vincula a un servei de widget"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permet que l\'aplicació recuperi, examini i esborri les notificacions, incloses les que han publicat altres aplicacions."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"vincula a un servei oient de notificacions"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permet que el titular vinculi la interfície de nivell superior d\'un servei oient de notificacions. No s\'hauria de necessitar mai per a les aplicacions normals."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"vinculació amb el servei d\'un proveïdor de condicions"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Permet que el titular es vinculi amb la interfície de nivell superior del servei d\'un proveïdor de condicions. No ha de ser mai necessari per a aplicacions normals."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"invoca l\'aplicació de configuració proporcionada per l\'operador"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permet que el titular invoqui l\'aplicació de configuració proporcionada per l\'operador. No s\'hauria de necessitar mai per a les aplicacions normals."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"conèixer les observacions sobre les condicions de la xarxa"</string> @@ -709,14 +735,14 @@ <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Permet que una aplicació proporcioni i utilitzi certificats de gestió de drets digitals (DRM, Digital Rights Management). No ha de ser mai necessari per a aplicacions normals."</string> <string name="policylab_limitPassword" msgid="4497420728857585791">"Definir les normes de contrasenya"</string> <string name="policydesc_limitPassword" msgid="3252114203919510394">"Controla la longitud i els caràcters permesos a les contrasenyes de desbloqueig de pantalla."</string> - <string name="policylab_watchLogin" msgid="914130646942199503">"Controlar intents de desbloqueig de pantalla"</string> + <string name="policylab_watchLogin" msgid="914130646942199503">"Controlar els intents de desbloqueig de pantalla"</string> <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Supervisa el nombre de contrasenyes incorrectes introduïdes per desbloquejar la pantalla i bloqueja la tauleta o n\'esborra totes les dades si s\'introdueixen massa contrasenyes incorrectes."</string> <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Supervisa el nombre de contrasenyes incorrectes introduïdes en desbloquejar la pantalla, i bloqueja el telèfon o esborra totes les dades del telèfon si s\'introdueixen massa contrasenyes incorrectes."</string> <string name="policylab_resetPassword" msgid="2620077191242688955">"Canvia la contrasenya de desbloqueig de pantalla"</string> <string name="policydesc_resetPassword" msgid="605963962301904458">"Canvia la contrasenya de desbloqueig de pantalla."</string> <string name="policylab_forceLock" msgid="2274085384704248431">"Bloqueig de pantalla"</string> <string name="policydesc_forceLock" msgid="1141797588403827138">"Controla com i quan es bloqueja la pantalla."</string> - <string name="policylab_wipeData" msgid="3910545446758639713">"Esborra totes les dades"</string> + <string name="policylab_wipeData" msgid="3910545446758639713">"Esborrar totes les dades"</string> <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Esborra les dades de la tauleta sense advertiment mitjançant un restabliment de les dades de fàbrica."</string> <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Esborra les dades del telèfon sense avisar, restablint les dades de fàbrica."</string> <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Defineix el servidor intermediari global del dispositiu"</string> @@ -726,7 +752,7 @@ <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Encriptació d’emmagatzematge"</string> <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Requereix que les dades de l\'aplicació emmagatzemades estiguin encriptades."</string> <string name="policylab_disableCamera" msgid="6395301023152297826">"Desactivar les càmeres"</string> - <string name="policydesc_disableCamera" msgid="2306349042834754597">"Impedeix l\'ús de totes les càmeres del dispositiu."</string> + <string name="policydesc_disableCamera" msgid="2306349042834754597">"Impedeix l\'ús de les càmeres del dispositiu."</string> <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"Des. funcions en bloq. tecles"</string> <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"Impedeix l\'ús d\'algunes funcions en bloqueig de tecles."</string> <string-array name="phoneTypes"> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fons de pantalla"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Canvia el fons de pantalla"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Oient de notificacions"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Proveïdor de condicions"</string> <string name="vpn_title" msgid="19615213552042827">"VPN activada"</string> <string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g> ha activat VPN"</string> <string name="vpn_text" msgid="3011306607126450322">"Toca per gestionar la xarxa."</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 39c6c08..868f899 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Bez názvu>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Nastavení"</string> <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Umožňuje držiteli navázat se na nejvyšší úroveň služby VPN. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"vazba na tapetu"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Umožňuje držiteli navázat se na nejvyšší úroveň rozhraní tapety. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"navázání na hlasovou interakci"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Umožňuje držiteli navázat se na nejvyšší úroveň rozhraní služby hlasové interakce. Běžné aplikace by toto oprávnění neměly nikdy potřebovat."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"připojit se ke vzdálenému displeji"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Umožňuje držiteli připojit se k vysokoúrovňovému rozhraní vzdáleného displeje. Běžné aplikace by toto oprávnění neměly nikdy potřebovat."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"navázat se na službu widgetu"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Umožňuje aplikacím načítat, zobrazovat a mazat oznámení včetně těch přidaných jinými aplikacemi."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"navázání na službu pro poslouchání oznámení"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Umožňuje držiteli navázat se na nejvyšší úroveň služby pro poslouchání oznámení. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"navázání na službu poskytovatele podmínky"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Umožňuje držiteli navázat se na nejvyšší úroveň rozhraní služby poskytovatele podmínky. Běžné aplikace by toto oprávnění neměly nikdy potřebovat."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"vyvolat konfigurační aplikaci poskytnutou operátorem"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Umožňuje vyvolání konfigurační aplikace poskytnuté operátorem. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"naslouchat informacím o stavu sítě"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Tapeta"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Změnit tapetu"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Aplikace poslouchající oznámení"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Poskytovatel podmínky"</string> <string name="vpn_title" msgid="19615213552042827">"Síť VPN je aktivována"</string> <string name="vpn_title_long" msgid="6400714798049252294">"Aplikace <xliff:g id="APP">%s</xliff:g> aktivovala síť VPN"</string> <string name="vpn_text" msgid="3011306607126450322">"Dotykem zobrazíte správu sítě."</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index c06ecbb..206db12 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"Tb"</string> <string name="petabyteShort" msgid="5637816680144990219">"Pb"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Uden titel>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Tillader, at brugeren forpligter sig til en VPN-tjenestes grænseflade på øverste niveau. Bør aldrig være nødvendigt i almindelige apps."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"knyt til en baggrund"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Tillader, at indehaveren kan binde en baggrunds grænseflade på øverste niveau. Dette bør aldrig være nødvendigt for almindelige apps."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"oprette binding til en tjeneste til stemmeinteraktion"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Tillader, at brugeren opretter en binding til det øverste niveau af grænsefladen i en tjeneste til stemmeinteraktion. Dette bør aldrig være nødvendigt for almindelige apps."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"bind til en ekstern skærm"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Tillader, at brugeren kan foretage en binding til grænsefladens øverste niveau på en ekstern skærm. Bør aldrig være nødvendigt til almindelige apps."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"forpligt til en widgettjeneste"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Tillader, at appen kan hente, undersøge og rydde underretninger, f.eks. dem, der er sendt af andre apps."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"forpligte sig til en underretningslyttertjeneste"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Tillader brugeren at forpligte sig til en underretningslyttertjenestes grænseflade på øverste niveau. Bør aldrig være nødvendigt til almindelige apps."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"oprette binding til en tjeneste til formidling af betingelser"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Tillader, at brugeren opretter en binding til det øverste niveau af grænsefladen i en tjeneste til formidling af betingelser. Dette bør aldrig være nødvendigt for almindelige apps."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"aktivere konfigurationsappen, der leveres af mobilselskabet"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Tillader, at brugeren aktiverer konfigurationsappen, der er forsynet af mobilselskabet. Dette bør aldrig være nødvendigt for almindelige apps."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"observer netværksforhold"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Baggrund"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Skift baggrund"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Underretningslytter"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Tjeneste til formidling af betingelser"</string> <string name="vpn_title" msgid="19615213552042827">"VPN er aktiveret."</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN aktiveres af <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Tryk for at administrere netværket."</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index e1ee025..87d4aa0 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Unbenannt>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Ermöglicht dem Halter, sich an die Oberfläche eines VPN-Dienstes auf oberster Ebene zu binden. Sollte nie für normale Apps benötigt werden."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"An einen Hintergrund binden"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Ermöglicht dem Halter, sich an die Oberfläche eines Hintergrunds auf oberster Ebene zu binden. Sollte nie für normale Apps benötigt werden."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"An einen Sprachinteraktionsdienst binden"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Ermöglicht dem Inhaber, sich an die Oberfläche eines Sprachinteraktionsdienstes auf oberster Ebene zu binden. Für normale Apps sollte dies nie erforderlich sein."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"An Remote-Display binden"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Ermöglicht dem Halter, sich an die Oberfläche eines Remote-Displays auf oberster Ebene zu binden. Sollte für normale Apps nie benötigt werden."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"An einen Widget-Dienst binden"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Ermöglicht der App das Abrufen, Überprüfen und Löschen von Benachrichtigungen, einschließlich Benachrichtigungen, die von anderen Apps gepostet wurden"</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"An Benachrichtigungs-Listener-Dienst binden"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Ermöglicht dem Inhaber, sich an die Oberfläche der obersten Ebene eines Benachrichtigungs-Listener-Dienstes zu binden. Sollte nie für normale Apps benötigt werden."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"An einen Bedingungsanbieterdienst binden"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Ermöglicht dem Inhaber, sich an die Oberfläche eines Bedingungsanbieterdienstes auf oberster Ebene zu binden. Für normale Apps sollte dies nie erforderlich sein."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"Vom Mobilfunkanbieter bereitgestellte Konfigurations-App aufrufen"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Ermöglicht dem Inhaber, die vom Mobilfunkanbieter bereitgestellte Konfigurations-App aufzurufen. Sollte für normale Apps nie benötigt werden."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"Informationen zu den Netzwerkbedingungen erfassen"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Hintergrund"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Hintergrund ändern"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Benachrichtigungs-Listener"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Bedingungsanbieter"</string> <string name="vpn_title" msgid="19615213552042827">"VPN aktiviert"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN wurde von <xliff:g id="APP">%s</xliff:g> aktiviert."</string> <string name="vpn_text" msgid="3011306607126450322">"Zum Verwalten des Netzwerks berühren"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 5af0277..9105cb2 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Χωρίς τίτλο>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας υπηρεσίας Vpn. Δεν απαιτείται για κανονικές εφαρμογές."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"δέσμευση σε ταπετσαρία"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας ταπετσαρίας. Δεν απαιτείται για συνήθεις εφαρμογές."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"σύνδεση σε παράγοντα φωνητικής αλληλεπίδρασης"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Επιτρέπει στον κάτοχο τη σύνδεση στη διεπαφή ανωτάτου επιπέδου μιας υπηρεσίας φωνητικής αλληλεπίδρασης. Δεν απαιτείται για κανονικές εφαρμογές."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"μεταφορά σε μια απομακρυσμένη οθόνη"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας απομακρυσμένης οθόνης. Δεν απαιτείται ποτέ για κανονικές εφαρμογές."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"δέσμευση σε υπηρεσία γραφικών στοιχείων"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Επιτρέπει στην εφαρμογή να ανακτά, να εξετάζει και να απαλείφει ειδοποιήσεις, συμπεριλαμβανομένων εκείνων που δημοσιεύονται από άλλες εφαρμογές."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"δέσμευση σε υπηρεσία ακρόασης ειδοποίησης"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας υπηρεσίας ακρόασης ειδοποιήσεων. Δεν απαιτείται σε κανονικές εφαρμογές."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"σύνδεση σε μια υπηρεσία παρόχου συνθηκών"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Επιτρέπει στον κάτοχο τη σύνδεση στη διεπαφή ανωτάτου επιπέδου ενός παρόχου συνθηκών. Δεν απαιτείται για κανονικές εφαρμογές."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"κλήση της εφαρμογής διαμόρφωσης που παρέχεται από την εταιρεία κινητής τηλεφωνίας"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Επιτρέπει στον κάτοχο την κλήση της εφαρμογής διαμόρφωσης που παρέχεται από την εταιρεία κινητής τηλεφωνίας. Δεν απαιτείται για κανονικές εφαρμογές."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"λήψη παρατηρήσεων σχετικά με την κατάσταση δικτύου"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Ταπετσαρία"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Αλλαγή ταπετσαρίας"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Υπηρεσία ακρόασης ειδοποίησης"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Πάροχος συνθηκών"</string> <string name="vpn_title" msgid="19615213552042827">"Το VPN ενεργοποιήθηκε"</string> <string name="vpn_title_long" msgid="6400714798049252294">"Το VPN ενεργοποιήθηκε από την εφαρμογή <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Αγγίξτε για τη διαχείριση του δικτύου."</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index ad45887..51a85e3 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Untitled>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Settings"</string> <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Allows the holder to bind to the top-level interface of a Vpn service. Should never be needed for normal apps."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"bind to wallpaper"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Allows the holder to bind to the top-level interface of wallpaper. Should never be needed for normal applications."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"bind to a voice interactor"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Allows the holder to bind to the top-level interface of a voice interaction service. Should never be needed for normal apps."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"bind to a remote display"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Allows the holder to bind to the top-level interface of a remote display. Should never be needed for normal apps."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind to a widget service"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Allows the app to retrieve, examine, and clear notifications, including those posted by other apps."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bind to a notification listener service"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"bind to a condition provider service"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Allows the holder to bind to the top-level interface of a condition provider service. Should never be needed for normal apps."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"invoke the carrier-provided configuration app"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"listen for observations on network conditions"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Wallpaper"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Change wallpaper"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Notification listener"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Condition provider"</string> <string name="vpn_title" msgid="19615213552042827">"VPN activated"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN is activated by <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Touch to manage the network."</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index ad45887..51a85e3 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Untitled>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Settings"</string> <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Allows the holder to bind to the top-level interface of a Vpn service. Should never be needed for normal apps."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"bind to wallpaper"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Allows the holder to bind to the top-level interface of wallpaper. Should never be needed for normal applications."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"bind to a voice interactor"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Allows the holder to bind to the top-level interface of a voice interaction service. Should never be needed for normal apps."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"bind to a remote display"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Allows the holder to bind to the top-level interface of a remote display. Should never be needed for normal apps."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind to a widget service"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Allows the app to retrieve, examine, and clear notifications, including those posted by other apps."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bind to a notification listener service"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"bind to a condition provider service"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Allows the holder to bind to the top-level interface of a condition provider service. Should never be needed for normal apps."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"invoke the carrier-provided configuration app"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"listen for observations on network conditions"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Wallpaper"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Change wallpaper"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Notification listener"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Condition provider"</string> <string name="vpn_title" msgid="19615213552042827">"VPN activated"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN is activated by <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Touch to manage the network."</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 6d032ca..2a4f7e9 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Sin título>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permite al titular vincularse a la interfaz de nivel superior de un servicio de VPN. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"vincular a un fondo de pantalla"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permite al propietario vincularse a la interfaz de nivel superior de un fondo de pantalla. Las aplicaciones normales no deben utilizar este permiso."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"vincular con un servicio de interacción por voz"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Permite vincular con la interfaz de nivel superior de un servicio de interacción por voz. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"vincular a una pantalla remota"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permite al propietario vincularse a la interfaz de nivel superior de una pantalla remota. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vincular a un servicio de widget"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite que la aplicación recupere, examine y elimine notificaciones, incluidas aquellas publicadas por otras aplicaciones."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"Vincular a un servicio de agente de escucha de notificaciones"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite al propietario vincularse a la interfaz de nivel superior de un servicio de agente de escucha de notificaciones. Las aplicaciones normales no deberían necesitar este permiso."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"vincular con un servicio de proveedor de condiciones"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Permite vincular con la interfaz de nivel superior de un servicio de proveedor de condiciones. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"ejecutar la aplicación de configuración proporcionada por el proveedor"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permite al propietario ejecutar la aplicación de configuración proporcionada por el proveedor. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"Detectar cambios en el estado de la red"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Papel tapiz"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Cambiar fondo de pantalla"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Agente de escucha de notificaciones"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Proveedor de condiciones"</string> <string name="vpn_title" msgid="19615213552042827">"VPN activada"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN está activado por <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Toca para administrar la red."</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 63bed24..2e0d68b 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Sin título>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"..."</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permite enlazar con la interfaz de nivel superior de un servicio de VPN. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"enlazar con un fondo de pantalla"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permite enlazar con la interfaz de nivel superior de un fondo de pantalla. Las aplicaciones normales no deberían necesitar este permiso."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"enlazar con un servicio de interacción de voz"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Permite enlazar con la interfaz de nivel superior de un servicio de interacción de voz. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"enlazar a una pantalla remota"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permite enlazar con la interfaz de nivel superior de una pantalla remota. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"enlazar con un servicio de widget"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite que la aplicación recupere, examine y borre notificaciones, incluidas las que han publicado otras aplicaciones."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"enlazar con un servicio de detector de notificaciones"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite enlazar con la interfaz de nivel superior de un servicio de detector de notificaciones. No debe ser necesario para las aplicaciones normales."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"enlazar con un servicio de proveedor de condiciones"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Permite enlazar con la interfaz de nivel superior de un servicio de proveedor de condiciones. Las aplicaciones normales no deberían necesitar este permiso."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"ejecutar la aplicación de configuración proporcionada por el operador"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permite ejecutar la aplicación de configuración proporcionada por el operador. No debe ser necesario para aplicaciones normales."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"detectar cambios en el estado de la red"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fondo de pantalla"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Cambiar fondo de pantalla"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Detector de notificaciones"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Proveedor de condiciones"</string> <string name="vpn_title" msgid="19615213552042827">"VPN activada"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN activada por <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Toca para administrar la red."</string> diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml index 00e4a20..32abeb8 100644 --- a/core/res/res/values-et-rEE/strings.xml +++ b/core/res/res/values-et-rEE/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Pealkirjata>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥."</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Seaded"</string> <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Võimaldab omanikul siduda VPN-teenuse ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"taustapildiga sidumine"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Lubab omanikul siduda taustapildi ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"seo häälinteraktsiooniga"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Lubab omanikul siduda häälinteraktsiooni teenuse ülataseme liidesega. Pole kunagi vajalik tavaliste rakenduste puhul."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"kaugekraaniga sidumine"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Lubab omanikul siduda rakenduse kaugekraani ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vidinateenusega sidumine"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Võimaldab rakendusel tuua, kontrollida ja kustutada märguandeid, sh neid, mille on postitanud teised rakendused."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"seo märguannete kuulamisteenusega"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Võimaldab omanikul siduda märguannete kuulamisteenuse ülemise taseme kasutajaliidese. Seda ei tohiks tavarakenduste puhul kunagi vaja olla."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"seo tingimuse pakkuja teenusega"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Lubab omanikul siduda tingimuse pakkuja teenuse ülataseme liidesega. Pole kunagi vajalik tavaliste rakenduste puhul."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"operaatoripoolse konfiguratsioonirakenduse aktiveerimine"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Lubab omanikul aktiveerida operaatoripoolse konfiguratsioonirakenduse. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"võrgutingimuste teabe kuulamine"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Taustapilt"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Muutke taustapilti"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Märguannete kuulamisteenus"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Tingimuse pakkuja"</string> <string name="vpn_title" msgid="19615213552042827">"VPN on aktiveeritud"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN-i aktiveeris <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Võrgu haldamiseks puudutage."</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 42d654e..c5abcbd 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"ترابایت"</string> <string name="petabyteShort" msgid="5637816680144990219">"پتابایت"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<بدون عنوان>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string> @@ -173,8 +195,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> - <!-- no translation found for global_action_settings (1756531602592545966) --> - <skip /> + <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"به دارنده اجازه میدهد که به رابط سطح بالای سرویس Vpn متصل شود. هرگز برای برنامههای معمولی مورد نیاز نیست."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"پیوند شده به تصویر زمینه"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"به دارنده اجازه میدهد تا به رابط سطح بالای تصویر زمینه متصل شود. برنامههای معمولی هرگز به این ویژگی نیاز ندارند."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"مقید بودن به سرویس تعامل صوتی"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"به دارنده امکان میدهد به واسط سطح بالای سرویس تعامل صوتی مقید باشد. برای برنامههای عادی هرگز نباید لازم باشد."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"اتصال به نمایشگر راه دور"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"به دارنده امکان میدهد تا به رابط سطح بالای نمایشگر راه دور وصل شود. نباید هرگز برای برنامههای عادی لازم باشد."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"اتصال به یک سرویس ابزارک"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"به برنامه اجازه میدهد به بازیابی، بررسی و پاک کردن اعلانها از جمله موارد پست شده توسط سایر برنامهها بپردازد."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"اتصال به یک سرویس شنونده اعلان"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"به دارنده اجازه میدهد به یک رابط سطح بالای سرویس شنونده اعلان متصل شود. هرگز نباید برای برنامههای عادی لازم شود."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"مقید بودن به سرویس ارائهدهنده وضعیت"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"به دارنده امکان میدهد تا به واسط سطح بالای سرویس ارائهدهنده وضعیت مقید باشد. برای برنامههای عادی هرگز نباید لازم باشد."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"لغو برنامه پیکربندی ارائه شده توسط شرکت مخابراتی"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"به دارنده اجازه میدهد که تنظیمات برنامه شرکت مخابراتی را لغو کند. هرگز برای برنامههای معمولی مورد نیاز نیست."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"گوش دادن برای بررسی شرایط شبکه"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"تصویر زمینه"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"تغییر تصویر زمینه"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"شنونده اعلان"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"ارائهدهنده وضعیت"</string> <string name="vpn_title" msgid="19615213552042827">"VPN فعال شد"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN توسط <xliff:g id="APP">%s</xliff:g> فعال شده است"</string> <string name="vpn_text" msgid="3011306607126450322">"برای مدیریت شبکه لمس کنید."</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 7698dda..945c7ab 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"Tt"</string> <string name="petabyteShort" msgid="5637816680144990219">"Pt"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Nimetön>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Asetukset"</string> <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> @@ -388,6 +409,10 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Antaa sovelluksen sitoutua VPN-palvelun ylemmän tason käyttöliittymään. Ei tavallisten sovellusten käyttöön."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"sido taustakuvaan"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Antaa sovelluksen sitoutua taustakuvan ylätason käyttöliittymään. Ei tavallisten sovellusten käyttöön."</string> + <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) --> + <skip /> + <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) --> + <skip /> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"etänäyttöön sitoutuminen"</string> <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> @@ -700,6 +725,10 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Antaa sovelluksen noutaa, tutkia ja tyhjentää ilmoituksia (myös muiden sovelluksien lähettämiä)."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"sido ilmoituskuuntelijapalveluun"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Antaa sovelluksen sitoutua ilmoituskuuntelijan ylimmän tason käyttöliittymään. Ei tavallisten sovelluksien käyttöön."</string> + <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) --> + <skip /> + <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) --> + <skip /> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"Palveluntarjoajan määrityssovelluksen käynnistäminen"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Antaa luvanhaltijan käynnistää palveluntarjoajan määrityssovelluksen. Ei tavallisten sovelluksien käyttöön."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"verkon tilahavaintojen kuunteleminen"</string> @@ -1370,6 +1399,8 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Taustakuva"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Vaihda taustakuvaa"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Ilmoituskuuntelija"</string> + <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) --> + <skip /> <string name="vpn_title" msgid="19615213552042827">"VPN on aktivoitu"</string> <string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g> on aktivoinut VPN-yhteyden"</string> <string name="vpn_text" msgid="3011306607126450322">"Voit hallinnoida verkkoa koskettamalla."</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index cc3bcd2..c917749 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"To"</string> <string name="petabyteShort" msgid="5637816680144990219">"Po"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Sans_titre>"</string> <string name="ellipsis" msgid="7899829516048813237">"..."</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un service RPV. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"se fixer à un fond d\'écran"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un fond d\'écran. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"s\'associer à un service d\'interaction vocale"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Permet à l\'application de s\'associer à l\'interface de niveau supérieur d\'un service d\'interaction vocale. Ne devrait pas être nécessaire pour les applications standards."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"lier à un écran distant"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un écran distant. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"s\'associer à un service de widget"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permet aux applications de récupérer, d\'examiner et d\'autoriser les notifications, y compris celles envoyées par d\'autres applications."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"s\'associer à l\'interface de niveau supérieur d\'un service d\'écoute des notifications"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permet à l\'application de s\'associer à l\'interface de niveau supérieur d\'un service d\'écoute des notifications. Ne devrait jamais être nécessaire pour les applications normales."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"s\'associer à un service de fournisseur de conditions"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Permet à l\'application de s\'associer à l\'interface de niveau supérieur d\'un service de fournisseur de conditions. Ne devrait pas être nécessaire pour les applications standards."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"faire appel à l\'application de configuration du fournisseur de services"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permet à l\'application autorisée de faire appel à l\'application de configuration fournie par le fournisseur de services. Cette fonctionnalité ne devrait pas être nécessaire pour les applications standards."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"détecter des observations sur les conditions du réseau"</string> @@ -1284,11 +1310,11 @@ <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"Si vous activez la mémoire de stockage USB, certaines applications en cours d\'utilisation vont être fermées et risquent de rester indisponibles jusqu\'à ce que la mémoire de stockage USB soit désactivée."</string> <string name="dlg_error_title" msgid="7323658469626514207">"Échec du fonctionnement de la mémoire de stockage USB."</string> <string name="dlg_ok" msgid="7376953167039865701">"OK"</string> - <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Connecté en tant qu\'appareil multimédia"</string> + <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Connecté en tant qu\'app. multimédia"</string> <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Connecté en tant qu\'appareil photo"</string> <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Connecté en tant que programme d\'installation"</string> <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Connecté à un accessoire USB"</string> - <string name="usb_notification_message" msgid="2290859399983720271">"Appuyez ici pour accéder aux autres options USB."</string> + <string name="usb_notification_message" msgid="2290859399983720271">"Appuyez pour accéder aux autres options USB."</string> <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formater mémoire?"</string> <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formater la carte SD?"</string> <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Tous les fichiers stockés sur la mémoire de stockage USB vont être effacés. Cette action est irréversible."</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fond d\'écran"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Changer de fond d\'écran"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Outil d\'écoute des notifications"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Fournisseur de conditions"</string> <string name="vpn_title" msgid="19615213552042827">"VPN activé"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN activé par <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Appuyez ici pour gérer le réseau."</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 30c7767..9359606 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"To"</string> <string name="petabyteShort" msgid="5637816680144990219">"Po"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Sans nom>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,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> - <!-- no translation found for global_action_settings (1756531602592545966) --> - <skip /> + <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un service VPN. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"Se fixer sur un fond d\'écran"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un fond d\'écran. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"s\'associer à un service d\'interaction vocale"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Permet à l\'application de s\'associer à l\'interface de niveau supérieur d\'un service d\'interaction vocale. Ne devrait pas être nécessaire pour les applications standards."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"s\'associer à un écran à distance"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permettre à l\'application autorisée de s\'associer à l\'interface de niveau supérieur d\'un écran à distance. Cette fonctionnalité ne devrait pas être nécessaire pour les applications standards."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"associer à un service widget"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permet aux applications de récupérer, d\'examiner et d\'autoriser les notifications, y compris celles envoyées par d\'autres applications."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"s\'associer à l\'interface de niveau supérieur d\'un service d\'écoute des notifications"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permet à l\'application de s\'associer à l\'interface de niveau supérieur d\'un service d\'écoute des notifications. Ne devrait jamais être nécessaire pour les applications normales."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"s\'associer à un service de fournisseur de conditions"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Permet à l\'application de s\'associer à l\'interface de niveau supérieur d\'un service de fournisseur de conditions. Ne devrait pas être nécessaire pour les applications standards."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"faire appel à l\'application de configuration fournie par l\'opérateur"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permet à l\'application autorisée de faire appel à l\'application de configuration fournie par l\'opérateur. Cette fonctionnalité ne devrait pas être nécessaire pour les applications standards."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"détecter des observations sur les conditions du réseau"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fond d\'écran"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Changer de fond d\'écran"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Outil d\'écoute des notifications"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Fournisseur de conditions"</string> <string name="vpn_title" msgid="19615213552042827">"VPN activé"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN activé par <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Appuyez ici pour gérer le réseau."</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 852215f..3d5f4df 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<शीर्षक-रहित>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"धारक को किसी Vpn सेवा के शीर्ष-स्तर इंटरफ़ेस से आबद्ध होने देता है. सामान्य ऐप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"वॉलपेपर से आबद्ध करें"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"धारक को किसी वॉलपेपर के शीर्ष-स्तर इंटरफ़ेस से आबद्ध होने देता है. सामान्य ऐप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"किसी ध्वनि सहभागिताकर्ता से आबद्ध हों"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"धारक को किसी ध्वनि सहभागिता सेवा के शीर्ष-स्तर के इंटरफ़ेस से आबद्ध होने देती है. सामान्य ऐप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"रिमोट डिस्प्ले से आबद्ध करें"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"धारक को किसी रिमोट डिस्प्ले के शीर्ष-स्तरीय इंटरफ़ेस से आबद्ध होने देती है. सामान्य ऐप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"किसी विजेट सेवा से आबद्ध करें"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"ऐप्स को सूचनाओं को प्राप्त करने, जांच करने, और साफ़ करने देता है, जिनमें अन्य ऐप्स के द्वारा पोस्ट की गई सूचनाएं भी शामिल हैं."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"सूचना श्रवणकर्ता सेवा से जुड़ें"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"धारक को सूचना श्रवणकर्ता सेवा के शीर्ष स्तरीय इंटरफ़ेस से जुड़ने देती है. सामान्य ऐप्स के लिए कभी भी आवश्यक नहीं होनी चाहिए."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"किसी स्थिति प्रदाता सेवा से आबद्ध हों"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"धारक को किसी स्थिति प्रदाता सेवा के शीर्ष-स्तर के इंटरफ़ेस से आबद्ध होने देती है. सामान्य ऐप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"वाहक के द्वारा उपलब्ध कराया गया कॉन्फ़िगरेशन ऐप्स प्रारंभ करें"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"धारक को वाहक के द्वारा उपलब्ध कराया गया कॉन्फ़िगरेशन ऐप्स प्रारंभ करने देता है. सामान्य ऐप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"नेटवर्क स्थितियों के अवलोकनों को सुनें"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"वॉलपेपर"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"वॉलपेपर बदलें"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"सूचना श्रवणकर्ता"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"स्थिति प्रदाता"</string> <string name="vpn_title" msgid="19615213552042827">"VPN सक्रिय"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN को <xliff:g id="APP">%s</xliff:g> द्वारा सक्रिय किया गया है"</string> <string name="vpn_text" msgid="3011306607126450322">"नेटवर्क प्रबंधित करने के लिए स्पर्श करें."</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 4ab25af..a195512 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Bez naslova>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Postavke"</string> <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Nositelju omogućuje vezanje uz sučelje najviše razine VPN usluge. Ne bi smjelo biti potrebno za normalne aplikacije."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"povezano s pozadinskom slikom"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Nositelju omogućuje povezivanje sa sučeljem pozadinske slike najviše razine. Ne bi smjelo biti potrebno za normalne aplikacije."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"povezivanje s uslugom glasovne interakcije"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Vlasniku omogućuje povezivanje sa sučeljem najviše razine usluge glasovne interakcije. Nije potrebno za normalne aplikacije."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"vezanje uz udaljeni zaslon"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Nositelju omogućuje vezanje uza sučelje najviše razine udaljenog zaslona. Ne bi smjelo biti potrebno za normalne aplikacije."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vezanje na uslugu widgeta"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Omogućuje aplikaciji dohvaćanje, pregledavanje i brisanje obavijesti, uključujući obavijesti drugih aplikacija."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"vezanje uz uslugu slušatelja obavijesti"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Nositelju omogućuje vezanje uz sučelje najviše razine usluge slušatelja obavijesti. Ne bi smjelo biti potrebno za uobičajene aplikacije."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"povezivanje s uslugom davatelja uvjeta"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Vlasniku omogućuje povezivanje sa sučeljem najviše razine usluge davatelja uvjeta. Nije potrebno za normalne aplikacije."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"pozovi operaterovu aplikaciju za konfiguraciju"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Dopušta nositelju pozivanje operaterove aplikacije za konfiguraciju. Ne bi smjelo biti potrebno za uobičajene aplikacije."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"praćenje motrenja mrežnih uvjeta"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Pozadinska slika"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Promjena pozadinske slike"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Slušatelj obavijesti"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Davatalj uvjeta"</string> <string name="vpn_title" msgid="19615213552042827">"VPN aktiviran"</string> <string name="vpn_title_long" msgid="6400714798049252294">"Aplikacija <xliff:g id="APP">%s</xliff:g> aktivirala je VPN"</string> <string name="vpn_text" msgid="3011306607126450322">"Dodirnite za upravljanje mrežom."</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index cc47d26..6e82bb8 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Névtelen>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Lehetővé teszi a használó számára, hogy csatlakozzon egy VPN-szolgáltatás legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szüksége."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"összekapcsolás háttérképpel"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Lehetővé teszi, hogy a tulajdonos kötelezővé tegye egy háttérkép legfelső szintű felületét. A normál alkalmazásoknak erre soha nincs szüksége."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"csatlakozás egy hangvezérlőhöz"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Lehetővé teszi a használó számára, hogy csatlakozzon egy hangvezérlő szolgáltatás legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szükségük."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"csatlakozás egy távoli kijelzőhöz"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Lehetővé teszi a használó számára, hogy csatlakozzon egy távoli kijelző legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szükségük."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"csatlakozás modulszolgáltatáshoz"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Lehetővé teszi, hogy az alkalmazás értesítéseket kérdezzen le, vizsgáljon és tisztítson meg, beleértve az egyéb alkalmazások által közzétett értesítéseket is."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"csatlakozzon értesítésfigyelő szolgáltatáshoz"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Lehetővé teszi a használó számára, hogy csatlakozzon egy értesítésfigyelő szolgáltatás legfelső szintű felületéhez. A normál alkalmazásoknak erre soha nincs szükségük."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"csatlakozás egy feltételbiztosító szolgáltatáshoz"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Lehetővé teszi a használó számára, hogy csatlakozzon egy feltételbiztosító szolgáltatás legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szükségük."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"a szolgáltatói konfigurációs alkalmazás hívása"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Lehetővé teszi a használó számára a szolgáltató által biztosított konfigurációs alkalmazás hívását. A normál alkalmazásoknak erre soha nincs szükségük."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"hálózati körülményekkel kapcsolatos észrevételek figyelemmel kísérése"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Háttérkép"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Háttérkép megváltoztatása"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Értesítésfigyelő"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Feltételbiztosító"</string> <string name="vpn_title" msgid="19615213552042827">"VPN aktiválva"</string> <string name="vpn_title_long" msgid="6400714798049252294">"A(z) <xliff:g id="APP">%s</xliff:g> aktiválta a VPN-t"</string> <string name="vpn_text" msgid="3011306607126450322">"Érintse meg a hálózat kezeléséhez."</string> diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml index 34bebb2..12e5fdb 100644 --- a/core/res/res/values-hy-rAM/strings.xml +++ b/core/res/res/values-hy-rAM/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"Տբ"</string> <string name="petabyteShort" msgid="5637816680144990219">"Պբ"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Անանուն>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,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> - <!-- no translation found for global_action_settings (1756531602592545966) --> - <skip /> + <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> @@ -388,6 +409,10 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Թույլ է տալիս սեփականատիրոջը միանալ Vpn ծառայության վերին մակարդակի ինտերֆեյսին: Սովորական հավելվածների համար երբևէ չպետք է անհրաժեշտ լինի:"</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"միանալ պաստառին"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Թույլ է տալիս սեփականատիրոջը միանալ պաստառի վերին մակարդակի ինտերֆեյսին: Սովորական հավելվածների համար երբևէ չպետք է անհրաժեշտ լինի:"</string> + <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) --> + <skip /> + <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) --> + <skip /> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"միանալ հեռակա էկրանին"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Թույլ է տալիս սեփականատիրոջը միանալ հեռակա էկրանի վերին մակարդակի ինտերֆեյսին: Սովորական ծրագրերի համար երբևէ չպետք է անհրաժեշտ լինի:"</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"միանալ վիջեթ ծառայությանը"</string> @@ -700,6 +725,10 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Թույլ է տալիս հավելվածին առբերել, ուսումնասիրել և մաքրել ծանուցումներն, այդ թվում նաև այլ հավելվածների կողմից գրառվածները:"</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"միանալ ծանուցումների ունկնդրիչ ծառայությանը"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Թույլ է տալիս սեփականատիրոջը միանալ ծանուցումները ունկնդրող ծառայության վերին մակարդակի ինտերֆեյսին: Սովորական հավելվածների համար երբևէ չպետք է անհրաժեշտ լինի:"</string> + <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) --> + <skip /> + <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) --> + <skip /> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"գործարկել օպերատորի կողմից տրամադրված կազմաձևման ծրագիրը"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Թույլ է տալիս սեփականատիրոջը գործարկել օպերատորի կողմից տրամադրված կազմաձևման ծրագիրը: Սովորական ծրագրերի համար երբևէ չպետք է անհրաժեշտ լինի:"</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"լսել դիտարկումներ ցանցային պայմանների վերաբերյալ"</string> @@ -1370,6 +1399,8 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Պաստառ"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Փոխել պաստառը"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Ծանուցման ունկնդիր"</string> + <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) --> + <skip /> <string name="vpn_title" msgid="19615213552042827">"VPN-ը ակտիվացված է"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN-ն ակտիվացված է <xliff:g id="APP">%s</xliff:g>-ի կողմից"</string> <string name="vpn_text" msgid="3011306607126450322">"Հպեք` ցանցի կառավարման համար:"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 1100bd0..2fb00bb 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Tanpa judul>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi dari suatu layanan Vpn. Tidak pernah diperlukan oleh apl normal."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"mengikat ke wallpaper"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi dari suatu wallpaper. Tidak pernah diperlukan oleh apl normal."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"mengikat ke pemicu interaksi suara"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Memungkinkan pemegang mengikat antarmuka tingkat tinggi dari layanan interaksi suara. Tidak pernah diperlukan oleh aplikasi normal."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"mengikat ke layar jarak jauh"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Mengizinkan pemegang mengikat ke antarmuka tingkat atas dari layar jarak jauh. Tidak pernah diperlukan untuk aplikasi normal."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"mengikat ke layanan widget"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Mengizinkan aplikasi mengambil, memeriksa, dan menghapus pemberitahuan, termasuk pemberitahuan yang diposkan oleh aplikasi lain."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"mengikat layanan pendengar pemberitahuan"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Memungkinkan pemegang mengikat antarmuka tingkat teratas dari suatu layanan pendengar pemberitahuan. Tidak pernah diperlukan oleh aplikasi normal."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"mengikat ke layanan penyedia ketentuan"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Memungkinkan pemegang mengikat antarmuka tingkat tinggi dari layanan penyedia ketentuan. Tidak pernah diperlukan oleh aplikasi normal."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"memanggil aplikasi konfigurasi yang disediakan operator"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Memungkinkan pemegang meminta aplikasi konfigurasi yang disediakan operator. Tidak pernah diperlukan aplikasi normal."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"mendengar untuk observasi kondisi jaringan"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Wallpaper"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Ubah wallpaper"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Pendengar pemberitahuan"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Penyedia ketentuan"</string> <string name="vpn_title" msgid="19615213552042827">"VPN diaktifkan"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN diaktifkan oleh <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Sentuh untuk mengelola jaringan."</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 243dd15..af8ed3f 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Senza nome>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Consente l\'associazione all\'interfaccia principale di un servizio VPN. Non dovrebbe mai essere necessario per le normali applicazioni."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"associazione a sfondo"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Consente l\'associazione di uno sfondo all\'interfaccia principale. Non dovrebbe mai essere necessaria per le normali applicazioni."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"collegamento a un servizio di interazione vocale"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Consente al titolare di collegarsi all\'interfaccia di primo livello di un servizio di interazione vocale. Non dovrebbe essere mai necessaria per le normali app."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"collega a un display remoto"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Consente al titolare di collegarsi all\'interfaccia di primo livello di un display remoto. Non dovrebbe essere mai necessaria per le normali applicazioni."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"associazione a un servizio widget"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Consente all\'app di recuperare, esaminare e cancellare notifiche, comprese quelle pubblicate da altre app."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"vincolo a un servizio listener di notifica"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Consente al titolare di vincolarsi all\'interfaccia di primo livello di un servizio listener di notifica. Non dovrebbe mai essere necessaria per le normali applicazioni."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"collegamento a un servizio provider di condizioni"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Consente al titolare di collegarsi all\'interfaccia di primo livello di un servizio provider di condizioni. Non dovrebbe essere mai necessaria per le normali app."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"richiamo dell\'app di configurazione operatore-provider"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Consente al titolare di richiamare l\'app di configurazione dell\'operatore-provider. Non dovrebbe essere mai necessaria per le normali applicazioni."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ascolto delle osservazioni sulle condizioni di rete"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Sfondo"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Cambia sfondo"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Listener di notifica"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Provider condizioni"</string> <string name="vpn_title" msgid="19615213552042827">"VPN attiva"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN attivata da <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Tocca per gestire la rete."</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 537aac6..0157f74 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">">ללא כותרת<"</string> <string name="ellipsis" msgid="7899829516048813237">"..."</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"מאפשר למשתמש לבצע איגוד לממשק ברמה עליונה של שירות VPN. הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"קשור לטפט"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"מאפשר למשתמש לבצע איגוד לממשק הרמה העליונה של טפט. הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"איגוד לשירות אינטראקציה קולית"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"מאפשרת לבעלים לאגד לממשק ברמה העליונה של שירות אינטראקציה קולית. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"איגוד לצג מרוחק"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"הרשאה זו מאפשרת למשתמש לבצע איגוד לממשק הרמה העליונה של צג רחוק. לעולם אינה אמורה להיות נחוצה לאפליקציות רגילות."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"הכפפה לשירות Widget"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"מאפשר לאפליקציה לאחזר, לבדוק ולמחוק התראות, כולל כאלה שפורסמו על ידי אפליקציות אחרות."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"איגוד לשירות של מאזין להתראות"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"הרשאה זו מאפשרת למשתמש לבצע איגוד לממשק הרמה העליונה של שירות מאזין להתראות. הרשאה זו אף פעם אינה נחוצה לאפליקציות רגילים."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"איגוד לשירות ספק תנאי"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"מאפשרת לבעלים לאגד לממשק ברמה העליונה של שירות ספק תנאי. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"הפעלה של אפליקציית תצורה שסופקה על ידי ספק"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"ההרשאה הזו מאפשרת לבעלים להפעיל את אפליקציית התצורה שסופקה על ידי ספק. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"קליטת מעקב אחר תנאי רשת"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"טפט"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"שנה טפט"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"מאזין להתראות"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"ספק תנאי"</string> <string name="vpn_title" msgid="19615213552042827">"VPN מופעל"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN מופעל על ידי <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"גע כדי לנהל את הרשת."</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index e334773..a9c5cfb 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<新規>"</string> <string name="ellipsis" msgid="7899829516048813237">"..."</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,7 @@ <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="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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"VPNサービスのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"壁紙にバインド"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"壁紙のトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"音声対話サービスへのバインド"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"音声対話サービスのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"リモートディスプレイへのバインド"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"リモートディスプレイのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ウィジェットサービスにバインド"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"通知(他のアプリから投稿されたものも含む)を取得、調査、クリアすることをアプリに許可します。"</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"通知リスナーサービスにバインド"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"通知リスナーサービスのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"コンディションプロバイダサービスへのバインド"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"コンディションプロバイダサービスのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"携帯通信会社が提供する設定アプリの呼び出し"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"携帯通信会社が提供する設定アプリを呼び出すことを所有者に許可します。通常のアプリでは不要です。"</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ネットワーク状況監視のためのリッスン"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"壁紙"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"壁紙を変更"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"通知リスナー"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"コンディションプロバイダ"</string> <string name="vpn_title" msgid="19615213552042827">"VPNが有効になりました"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPNが<xliff:g id="APP">%s</xliff:g>により有効化されました"</string> <string name="vpn_text" msgid="3011306607126450322">"タップしてネットワークを管理します。"</string> diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml index b6856c6..e5ec81b 100644 --- a/core/res/res/values-ka-rGE/strings.xml +++ b/core/res/res/values-ka-rGE/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"ტბაიტი"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"უსათაურო"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,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> - <!-- no translation found for global_action_settings (1756531602592545966) --> - <skip /> + <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> @@ -388,6 +409,10 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"აპს შეეძლება Vpn სერვისის ზედა დონის ინტერფეისთან დაკავშირება. არასდროს გამოიყენება ჩვეულებრივ აპებში."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"ფონზე მიჭედება"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"მფლობელს შეეძლება ფონის ზედა დონის ინტერფეისთან დაკავშირება. არასდროს გამოიყენება ჩვეულებრივ აპებში."</string> + <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) --> + <skip /> + <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) --> + <skip /> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"დისტანციურ მონიტორზე მიბმა"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"მფლობელს შეეძლება მიებას დისტანციურ მონიტორის ზედა დონის ინტერფეისს. ჩვეულებრივ აპს ეს წესით არასოდეს უნდა დაჭირდეს."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ვიჯეტ სერვისთან დაკავშირება"</string> @@ -700,6 +725,10 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"აპს შეეძლება მოიძიოს, გამოიკვლიოს და წაშალოს შეტყობინებები, მათ შორის სხვა აპების მიერ გამოქვეყნებული."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"შეტყობინებების მოსმენის სერვისთან დაკავშირება"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"მფლობელს შეეძლება შეტყობინებების მსმენლის სერვისის ზედა დონის ინტერფეისთან დაკავშირება. არ უნდა მოხდეს მისი გამოყენება ჩვეუელებრივი აპებისთვის.ფ"</string> + <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) --> + <skip /> + <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) --> + <skip /> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"ოპერატორის მიერ მოწოდებული კოფიგურაციის აპის გამოხმობა"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"საშუალებას აძლევს მფლობელს გამოიწვიოს ოპერატორის მიერ მოწოდებული კონფიგურაციის აპი. ჩვეულებრივ აპს ეს წესით არასოდეს არ უნდა დაჭირდეს."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"განხორციელდეს ქსელის მდგომარეობის მონიტორინგი"</string> @@ -1370,6 +1399,8 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"ფონი"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"ფონის შეცვლა"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"შეტყობინებების მსმენელი"</string> + <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) --> + <skip /> <string name="vpn_title" msgid="19615213552042827">"VPN გააქტიურებულია"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN გააქტიურებულია <xliff:g id="APP">%s</xliff:g>-ის მიერ"</string> <string name="vpn_text" msgid="3011306607126450322">"შეეხეთ ქსელის სამართავად."</string> diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml index bac95d5..e9a021c 100644 --- a/core/res/res/values-km-rKH/strings.xml +++ b/core/res/res/values-km-rKH/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"តេរ៉ាបៃ"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<គ្មានចំណងជើង>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"ឲ្យម្ចាស់ចងចំណុចប្រទាក់កម្រិតកំពូលនៃសេវាកម្ម Vpn ។ មិនគួរចាំបាច់សម្រាប់កម្មវិធីធម្មតាទេ។"</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"ចងទៅផ្ទាំងរូបភាព"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"ឲ្យម្ចាស់ចងចំណុចប្រទាក់កម្រិតកំពូលនៃផ្ទាំងរូបភាព។ មិនគួរចាំបាច់សម្រាប់កម្មវិធីធម្មតាទេ។"</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"ភ្ជាប់ទៅអ្នកសហការសំឡេង"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"អនុញ្ញាតឲ្យម្ចាស់ភ្ជាប់ទៅចំណុចប្រទាក់កម្រិតកំពូលរបស់សេវាកម្មអន្តរកម្មសំឡេង។ មិនគួរចាំបាច់សម្រាប់កម្មវិធីធម្មតាទេ។"</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"ភ្ជាប់ទៅការបង្ហាញពីចម្ងាយ"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"អនុញ្ញាតឲ្យម្ចាស់ភ្ជាប់ទៅចំណុចប្រទាក់កម្រិតកំពូលនៃការបង្ហាញពីចម្ងាយ។ មិនគួរចាំបាច់សម្រាប់កម្មវិធីធម្មតាទេ។"</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ចងសេវាកម្មធាតុក្រាហ្វិក"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"ឲ្យកម្មវិធីទៅយក ពិនិត្យ និងសម្អាតការជូនដំណឹង រួមមានប្រកាសដោយកម្មវិធីផ្សេងៗ។"</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"ចងទៅសេវាកម្មស្ដាប់ការជូនដំណឹង"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"ឲ្យម្ចាស់ចងចំណុចប្រទាក់កម្រិតកំពូលនៃសេវាកម្មកម្មវិធីស្ដាប់ការជូនដំណឹង។ មិនគួរចាំបាច់សម្រាប់កម្មវិធីធម្មតាទេ។"</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"ភ្ជាប់ទៅសេវាកម្មក្រុមហ៊ុនផ្ដល់លក្ខខណ្ឌ"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"អនុញ្ញាតឲ្យម្ចាស់ភ្ជាប់ទៅចំណុចប្រទាក់កម្រិតកំពូលរបស់សេវាកម្មក្រុមហ៊ុនផ្ដល់លក្ខខណ្ឌ។ មិនគួរចាំបាច់សម្រាប់កម្មវិធីធម្មតាទេ។"</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"ដកហូតកម្មវិធីកំណត់រចនាសម្ព័ន្ធដែលបានផ្ដល់ដោយក្រុមហ៊ុនបញ្ជូន"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"អនុញ្ញាតឲ្យម្ចាស់ដកហូតកម្មវិធីកំណត់រចនាសម្ព័ន្ធដែលបានផ្ដល់ដោយក្រុមហ៊ុនបញ្ជូន។ មិនគួរចាំបាច់សម្រាប់កម្មវិធីធម្មតាទេ។"</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"សង្កេតមើលលើលក្ខខណ្ឌបណ្ដាញ"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"ផ្ទាំងរូបភាព"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"ប្ដូរផ្ទាំងរូបភាព"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"កម្មវិធីស្ដាប់ការជូនដំណឹង"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"ក្រុមហ៊ុនផ្ដល់លក្ខខណ្ឌ"</string> <string name="vpn_title" msgid="19615213552042827">"បានធ្វើឲ្យ VPN សកម្ម"</string> <string name="vpn_title_long" msgid="6400714798049252294">"បានធ្វើឲ្យ VPN សកម្មដោយ <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"ប៉ះ ដើម្បីគ្រប់គ្រងបណ្ដាញ។"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 7b064a3..7c6feba 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<제목 없음>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,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> - <!-- no translation found for global_action_settings (1756531602592545966) --> - <skip /> + <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"권한을 가진 프로그램이 VPN 서비스에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"배경화면 연결"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"권한을 가진 프로그램이 배경화면에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"음성 상호작용 서비스 사용"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"권한을 가진 프로그램이 음성 상호작용 서비스의 최상위 인터페이스를 사용하도록 합니다. 일반 앱에는 필요하지 않습니다."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"원격 디스플레이에 연결"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"권한을 가진 프로그램이 원격 디스플레이에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"위젯 서비스와 연결"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"앱이 다른 앱에서 게시한 알림을 비롯하여 알림을 검색하고 살펴보며 삭제할 수 있도록 허용합니다."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"알림 수신기 서비스 사용"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"권한을 가진 프로그램이 알림 수신기 서비스에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"조건 제공자 서비스 사용"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"권한을 가진 프로그램이 조건 제공자 서비스의 최상위 인터페이스를 사용하도록 합니다. 일반 앱에는 필요하지 않습니다."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"이동통신사에서 제공한 구성 앱 호출"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"권한을 가진 프로그램이 이동통신사에서 제공한 구성 앱을 호출하도록 합니다. 일반 앱에는 필요하지 않습니다."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"네트워크 상태에 대한 관측 보고 수신"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"배경화면"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"배경화면 변경"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"알림 수신기"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"조건 제공자"</string> <string name="vpn_title" msgid="19615213552042827">"VPN이 활성화됨"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN이 <xliff:g id="APP">%s</xliff:g>에 의해 활성화됨"</string> <string name="vpn_text" msgid="3011306607126450322">"네트워크를 관리하려면 터치하세요."</string> diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml index d486092..b31fbff 100644 --- a/core/res/res/values-lo-rLA/strings.xml +++ b/core/res/res/values-lo-rLA/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<ບໍ່ມີຊື່>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,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> - <!-- no translation found for global_action_settings (1756531602592545966) --> - <skip /> + <string name="global_action_settings" msgid="1756531602592545966">"ການຕັ້ງຄ່າ"</string> <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> @@ -388,6 +409,10 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"ອະນຸຍາດໃຫ້ເຈົ້າຂອງເຊື່ອມໂຍງກັບສ່ວນຕິດຕໍ່ລະດັບເທິງສຸດ ຂອງບໍລິການ VPN. ແອັບຯທົ່ວໄປບໍ່ຄວນຈຳເປັນຕ້ອງໃຊ້."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"ເຊື່ອມໂຍງກັບພາບພື້ນຫຼັງ"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"ອະນຸຍາດໃຫ້ຜູ່ໃຊ້ເຊື່ອມໂຍງກັບສ່ວນຕິດຕໍ່ລະດັບສູງສຸດ ຂອງພາບພື້ນຫຼັງໃດນຶ່ງ. ແອັບຯທຳມະດາບໍ່ຄວນຈຳເປັນຕ້ອງໃຊ້."</string> + <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) --> + <skip /> + <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) --> + <skip /> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"ຜູກກັນເພື່ອສະແດງຜົນທາງໄກ."</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"ອະນຸຍາດໃຫ້ຜູ່ຖືຜູກກັບສ່ວນຕິດຕໍ່ລະດັບສູງສຸດ ຂອງການສະແດງຜົນທາງໄກ. ບໍ່ຈຳເປັນສຳລັບແອັບຯທົ່ວໄປ."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ເຊື່ອມໂຍງໄປຫາບໍລິການວິດເຈັດ"</string> @@ -700,6 +725,10 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"ອະນຸຍາດໃຫ້ແອັບຯດຶງຂໍ້ມູນ, ກວດສອບ ແລະລຶບລ້າງການແຈ້ງເຕືອນ ຮວມທັງພວກທີ່ໂພສໂດຍແອັບຯອື່ນໆນຳ."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"ເຊື່ອມໂຍງກັບບໍລິການໂຕຟັງການແຈ້ງເຕືອນ"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"ອະນຸຍາດໃຫ້ເຈົ້າຂອງເຊື່ອມໂຍງສ່ວນຕິດຕໍ່ລະດັບເທິງສຸດ ຂອງຜູ່ຟັງບໍລິການການແຈ້ງເຕືອນ. ບໍ່ຈຳເປັນສຳລັບແອັບຯທົ່ວໄປ."</string> + <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) --> + <skip /> + <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) --> + <skip /> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"ຮ້ອງຂໍແອັບຯປັບຄ່າທີ່ສະໜອງໂດຍຜູ່ໃຫ້ບໍລິການ"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"ອະນຸຍາດໃຫ້ເຈົ້າຂອງຮ້ອງຂໍແອັບຯປັບຄ່າທີ່ສະໜອງໂດຍຜູ່ໃຫ້ບໍລິການ. ບໍ່ໜ້າຈະຕ້ອງການສຳລັບແອັບຯທົ່ວໄປ."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ຕິດຕາມເພື່ອສັງເກດສະພາບຂອງເຄືອຂ່າຍ"</string> @@ -1370,6 +1399,8 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"ພາບພື້ນຫຼັງ"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"ປ່ຽນພາບພື້ນຫຼັງ"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"ໂຕຟັງການແຈ້ງເຕືອນ"</string> + <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) --> + <skip /> <string name="vpn_title" msgid="19615213552042827">"ເປີດນຳໃຊ້ VPN ແລ້ວ"</string> <string name="vpn_title_long" msgid="6400714798049252294">"ເປີດໃຊ້ VPN ໂດຍ <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"ແຕະເພື່ອຈັດການເຄືອຂ່າຍ."</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index c8724a3..62b6c7a 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Be pavadinimo>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Leidžiama savininkui susisaistyti su aukščiausio lygio VPN paslaugos sąsaja. Įprastoms programoms to neturėtų prireikti."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"susaistyti su darbalaukio fonu"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Leidžiama savininką susaistyti su aukščiausio lygio darbalaukio fono sąsaja. Įprastoms programoms to neturėtų prireikti."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"susaistyti su sąveikos balsu priemone"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Turėtojui leidžiama susaistyti programą su sąveikos balsu paslaugos aukščiausio lygio sąsaja. Įprastoms programoms to niekada neturėtų prireikti."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"susisaistyti su nuotoliniu ekranu"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Leidžiama savininkui susisaistyti su aukščiausiojo lygio nuotolinio ekrano sąsaja. Įprastoms programoms to neturėtų prireikti."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"susaistyti su valdiklio paslauga"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Programai leidžiama gauti, patikrinti ir išvalyti pranešimus, įskaitant pranešimus, kuriuos paskelbė kitos programos."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"susisaistyti su pranešimų skaitymo priemonės paslauga"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Leidžiama turėtojui susisaistyti su pranešimų skaitymo priemonės paslaugos aukščiausio lygio sąsaja. Įprastoms programoms to neturėtų prireikti."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"susaistyti su sąlygos teikėjo paslauga"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Turėtojui leidžiama susaistyti programą su sąlygos teikėjo paslaugos aukščiausio lygio sąsaja. Įprastoms programoms to niekada neturėtų prireikti."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"iškviesti operatoriaus pateiktą konfigūravimo programą"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Turėtojui leidžiama iškviesti operatoriaus pateiktą konfigūravimo programą. Įprastoms programoms to neturėtų prireikti."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"vykdyti tinklo sąlygų stebėjimą"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Darbalaukio fonas"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Keisti darbalaukio foną"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Pranešimų skaitymo priemonė"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Sąlygos teikėjas"</string> <string name="vpn_title" msgid="19615213552042827">"VPN suaktyvintas"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN suaktyvino „<xliff:g id="APP">%s</xliff:g>“"</string> <string name="vpn_text" msgid="3011306607126450322">"Palieskite, kad valdytumėte tinklą."</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index f2aec67..b803e61 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Bez nosaukuma>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Ļauj īpašniekam izveidot saiti ar VPN pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"saistīt ar tapeti"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Ļauj īpašniekam piesaistīt tapetes augstākā līmeņa lietotāja saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"Saistīšana ar balss mijiedarbības elementu"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Ļauj īpašniekam izveidot savienojumu ar balss mijiedarbības pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"Saites izveide ar attālu displeju"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Ļauj īpašniekam izveidot saiti ar attāla displeja augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"saistīt ar logrīka pakalpojumu"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Ļauj lietotnei izgūt, pārbaudīt un dzēst paziņojumus, tostarp lietotņu publicētos paziņojumus."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"saites izveidošana ar paziņojumu uztvērēja pakalpojumu"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Ļauj īpašniekam izveidot saiti ar paziņojumu uztvērēja pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"Saistīšana ar nosacījumu sniedzēja pakalpojumu"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Ļauj īpašniekam izveidot savienojumu ar drukas nosacījumu sniedzēja pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"Operatora nodrošinātas konfigurācijas lietotnes izsaukšana"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Ļauj īpašniekam izsaukt operatora nodrošināto konfigurācijas lietotni. Parastām lietotnēm tas nekad nav nepieciešams."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"iegūt informāciju par tīkla stāvokļa novērojumiem"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fona tapete"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Tapetes maiņa"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Paziņojumu uztvērējs"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Nosacījumu sniedzējs"</string> <string name="vpn_title" msgid="19615213552042827">"VPN ir aktivizēts."</string> <string name="vpn_title_long" msgid="6400714798049252294">"Lietojumprogramma <xliff:g id="APP">%s</xliff:g> aktivizēja VPN."</string> <string name="vpn_text" msgid="3011306607126450322">"Pieskarieties, lai pārvaldītu tīklu."</string> diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml index 1006907..cc0fa7f 100644 --- a/core/res/res/values-mn-rMN/strings.xml +++ b/core/res/res/values-mn-rMN/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TБ"</string> <string name="petabyteShort" msgid="5637816680144990219">"ПБ"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Гарчиггүй>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Эзэмшигч нь VPN үйлчилгээний дээд-төвшиний интерфейстэй холбох боломжтой. Энгийн апп-д шаардлагагүй."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"ханын зурагтай холбох"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Эзэмшигч нь ханын зурагны дээд-төвшиний интерфейстэй холбох боломжтой. Энгийн апп-уудад шаардлагагүй."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"дуугаар харьцагчтай холбох"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Эзэмшигчид дуугаар харьцах үйлчилгээний дээд-түвшний интерфейстэй холбох боломж олгоно. Энгийн апп-уудад хэзээ ч ашиглагдахгүй."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"алсын дэлгэцтэй холбогдох"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Эзэмшигчид алсын дэлгэц дэх дээд давхаргын интерфэйстэй холбогдох боломж олгоно. Энгийн апп-д шаардагдахгүй."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"виджет үйлчилгээтэй холбох"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Апп нь бусад апп-уудын илгээсэн мэдэгдлүүдийг дуудах, шалгах, болон цэвэрлэх боломжтой."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"мэдэгдэл сонсогч үйлчилгээтэй холбох"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Эзэмшигч нь мэдэгдэл сонсох үйлчилгээний дээд-төвшиний интерфейстэй холбох боломжтой. Энгийн апп-д шаардлагагүй."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"нөхцөл нийлүүлэгч үйлчилгээнд холбох"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Эзэмшигчид нөхцөл нийлүүлэгч үйлчилгээний дээд-түвшний интерфейстэй холбох боломж олгоно. Энгийн апп-уудад хэзээ ч ашиглагдахгүй."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"үүрэн компанийн нийлүүлсэн тохируулгын апп-г өдөөх"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Эзэмшигчид үүрэн компанийн нийлүүлсэн тохируулах апп-г өдөөх боломж олгоно. Энгийн апп-уудад хэзээ ч ашиглагдахгүй."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"Сүлжээний байдлын талаар ажиглалтуудыг хүлээн авах"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Ханын зураг"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Ханын зураг солих"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Мэдэгдэл сонсогч"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Нөхцөл нийлүүлэгч"</string> <string name="vpn_title" msgid="19615213552042827">"VPN идэвхтэй болов"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN-г <xliff:g id="APP">%s</xliff:g> идэвхтэй болгов"</string> <string name="vpn_text" msgid="3011306607126450322">"Сүлжээг удирдах бол хүрнэ үү."</string> diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml index d3b5987..53c9b94 100644 --- a/core/res/res/values-ms-rMY/strings.xml +++ b/core/res/res/values-ms-rMY/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Tidak bertajuk>"</string> <string name="ellipsis" msgid="7899829516048813237">"..."</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Tetapan"</string> <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> @@ -388,6 +409,10 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan Vpn. Tidak sekali-kali diperlukan untuk apl biasa."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"terikat pada kertas dinding"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi kertas dinding. Tidak sekali-kali diperlukan untuk apl biasa."</string> + <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) --> + <skip /> + <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) --> + <skip /> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"terikat kepada paparan jauh"</string> <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> @@ -700,6 +725,10 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Membenarkan apl untuk mendapatkan semula, memeriksa dan memadam bersih pemberitahuan, termasuk yang disiarkan oleh apl lain."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"ikat kepada perkhidmatan pendengar pemberitahuan"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan pendengar pemberitahuan. Tidak sekali-kali diperlukan untuk apl biasa."</string> + <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) --> + <skip /> + <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) --> + <skip /> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"gunakan apl konfigurasi yang disediakan oleh pembawa"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Membenarkan pemegang menggunakan apl konfigurasi yang diberikan oleh pembawa. Tidak sekali-kali diperlukan untuk apl biasa."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"dengar pemerhatian mengenai keadaan rangkaian"</string> @@ -1370,6 +1399,8 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Kertas dinding"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Tukar kertas dinding"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Pendengar pemberitahuan"</string> + <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) --> + <skip /> <string name="vpn_title" msgid="19615213552042827">"VPN diaktifkan"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN diaktifkan oleh <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Sentuh untuk mengurus rangkaian."</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index d95d6f1..a67cb28 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Uten navn>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Innstillinger"</string> <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Lar innehaveren binde seg til det øverste nivået av grensesnittet for en VPN-tjeneste. Skal aldri være nødvendig for vanlige apper."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"binde til bakgrunnsbilde"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Lar innehaveren binde det øverste nivået av grensesnittet til en bakgrunn. Skal aldri være nødvendig for vanlige apper."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"binde seg til en tjeneste for talehandlinger"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Gir innehaveren tillatelse til å binde til toppnivået av brukergrensesnittet for en tjeneste for talehandlinger. Dette skal ikke være nødvendig for vanlige apper."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"binde til ekstern skjerm"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Lar innehaveren binde seg til det øverste grensesnittnivået for ekstern skjerm. Skal aldri være nødvendig for vanlige apper."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"binde til modultjenste"</string> @@ -396,7 +419,7 @@ <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Innehaveren av tillatelsen kan binde seg til ruteleverandører. Dette er ikke nødvendig for vanlige apper."</string> <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"kommunisere med enhetsadministrator"</string> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Lar innehaveren sende hensikter til en enhetsadministrator. Skal aldri være nødvendig for normale apper."</string> - <string name="permlab_bindTvInput" msgid="5601264742478168987">"binde applikasjonen til en TV-inngang"</string> + <string name="permlab_bindTvInput" msgid="5601264742478168987">"binde appen til en TV-inngang"</string> <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Lar innehaveren binde appen til det øverste grensesnittnivået for en TV-inngang. Dette skal aldri være nødvendig for vanlige apper."</string> <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"legge til eller fjerne en enhetsadministrator"</string> <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Tillater innehaveren å legge til eller fjerne aktive enhetsadministratorer. Dette skal aldri være nødvendig for vanlige apper."</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Lar appen hente, gjennomgå og fjerne varsler, inkludert de som sendes fra andre apper."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"binding til en varsellyttertjeneste"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Lar innehaveren binde seg til det øverste grensesnittnivået for en varsellyttertjeneste. Skal aldri være nødvendig for vanlige apper."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"binde seg til en leverandørtjeneste for betingelser"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Gir innehaveren tillatelse til å binde til toppnivået av brukergrensesnittet for en leverandørtjeneste for betingelser. Dette skal ikke være nødvendig for vanlige apper."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"starte konfigurasjonsappen som ble levert av operatøren"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Gir innehaveren tillatelse til å kalle opp den konfigurasjonsappen som ble levert av operatøren. Dette skal ikke være nødvendig for vanlige apper."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"lytte etter observasjoner om nettverksforhold"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Bakgrunnsbilde"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Velg bakgrunnsbilde"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Varsellytteren"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Betingelsesleverandør"</string> <string name="vpn_title" msgid="19615213552042827">"VPN er aktivert"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN er aktivert av <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Trykk for å administrere nettverket."</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index c629254..3b2391f 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Zonder titel>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Staat de houder toe verbinding te maken met de hoofdinterface van een VPN-service. Nooit vereist voor normale apps."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"verbinden met een achtergrond"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Hiermee wordt de houder toegestaan zich te verbinden met de hoofdinterface van een achtergrond. Nooit vereist voor normale apps."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"binden aan een service voor spraakinteractie"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Hiermee kan de houder binden aan de hoofdinterface van een service voor spraakinteractie. Nooit vereist voor normale apps."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"verbinding maken met een extern display"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Hiermee wordt de houder toegestaan verbinding te maken met de hoofdinterface van een extern display. Nooit vereist voor normale apps."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"verbinden met een widgetservice"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Hiermee kan de app meldingen ophalen, onderzoeken en wissen, waaronder meldingen die zijn verzonden door andere apps."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"koppelen aan een listener-service voor meldingen"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Hiermee kan de houder koppelen aan de hoofdinterface van een listener-service voor meldingen. Nooit vereist voor normale apps."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"binden aan de service van een provider van voorwaarden"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Hiermee kan de houder binden aan de hoofdinterface van de service van een provider van voorwaarden. Nooit vereist voor normale apps."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"de door de provider geleverde configuratie-app aanroepen"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Hiermee kan de houder de door de provider geleverde configuratie-app aanroepen. Nooit vereist voor normale apps."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"controleren op waarnemingen met betrekking tot netwerkomstandigheden"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Achtergrond"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Achtergrond wijzigen"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Listener voor meldingen"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Provider van voorwaarden"</string> <string name="vpn_title" msgid="19615213552042827">"VPN is geactiveerd"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN wordt geactiveerd door <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Raak aan om het netwerk te beheren."</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 34d43de..b80c1fd 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Bez nazwy>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Pozwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi VPN. Nie powinno być nigdy potrzebne w przypadku zwykłych aplikacji."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"powiązanie z tapetą"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Pozwala na tworzenie powiązania z interfejsem najwyższego poziomu tapety. Nieprzeznaczone dla zwykłych aplikacji."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"powiąż z interaktorem głosowym"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi interakcji głosowej. Nieprzeznaczone dla zwykłych aplikacji."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"powiązanie z wyświetlaczem zdalnym"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu wyświetlacza zdalnego. Nieprzeznaczone dla zwykłych aplikacji."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"powiązanie z usługą widżetów"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Umożliwia aplikacji pobieranie, sprawdzanie i usuwanie powiadomień, także tych, które pochodzą z innych aplikacji."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"utwórz połączenie z usługą odbiornika powiadomień"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi odbiornika powiadomień. Nie powinno być nigdy potrzebne dla zwykłych aplikacji."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"powiąż z usługą dostawcy warunków"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi dostawcy warunków. Nieprzeznaczone dla zwykłych aplikacji."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"wywoływanie aplikacji konfiguracyjnej udostępnionej przez operatora"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Zezwala na wywoływanie aplikacji konfiguracyjnej udostępnionej przez operatora. Nieprzeznaczone dla zwykłych aplikacji."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"śledź stan sieci"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Tapeta"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Zmień tapetę"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Odbiornik powiadomień"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Dostawca warunków"</string> <string name="vpn_title" msgid="19615213552042827">"VPN aktywny"</string> <string name="vpn_title_long" msgid="6400714798049252294">"Obsługa sieci VPN została włączona przez aplikację <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Dotknij, aby zarządzać siecią."</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 6996d13..668f9ef 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Sem nome>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permite que o titular se vincule à interface de nível superior de um serviço de VPN. Nunca deverá ser necessário para aplicações normais."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"vincular a uma imagem de fundo"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permite ao titular vincular-se à interface de nível superior de uma imagem de fundo. Nunca deverá ser necessário para aplicações normais."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"vincular a um interlocutor de voz"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Permite que o titular vincule a interface de nível superior de um serviço de interação de voz. Nunca deverá ser necessário para aplicações normais."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"associar a um ecrã remoto"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permite ao detentor associar a interface de nível superior a um ecrã remoto. Nunca deve ser necessário para aplicações normais."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vincular a um serviço de widget"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite que a aplicação obtenha, examine e limpe notificações, incluindo as que foram publicadas por outras aplicações."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"vincular a um serviço de escuta de notificações"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite que o titular vincule a interface de nível superior de um serviço de escuta de notificações. Nunca deverá ser necessário para aplicações normais."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"vincular a um serviço de fornecedor de condição"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Permite que o titular vincule a interface de nível superior de um serviço de fornecedor de condição. Nunca deverá ser necessário para aplicações normais."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"invocar a aplicação de configuração fornecida pela operadora"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permite que o titular invoque a aplicação de configuração fornecida pela operadora. Nunca deverá ser necessário para aplicações normais."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ouvir observações sobre as condições da rede"</string> @@ -1123,7 +1149,7 @@ <string name="Midnight" msgid="5630806906897892201">"Meia-noite"</string> <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string> <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string> - <string name="selectAll" msgid="6876518925844129331">"Seleccionar tudo"</string> + <string name="selectAll" msgid="6876518925844129331">"Selecionar tudo"</string> <string name="cut" msgid="3092569408438626261">"Cortar"</string> <string name="copy" msgid="2681946229533511987">"Copiar"</string> <string name="paste" msgid="5629880836805036433">"Colar"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Imagem de fundo"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Alterar imagem de fundo"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Serviço de escuta de notificações"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Fornecedor de condição"</string> <string name="vpn_title" msgid="19615213552042827">"VPN ativada"</string> <string name="vpn_title_long" msgid="6400714798049252294">"A VPN foi ativada pelo <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Toque para gerir a rede."</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index a0124ca..db493e0 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Sem título>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Configurações"</string> <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> @@ -388,6 +409,10 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permite que seu proprietário sujeite a interface de alto nível de um serviço de VPN. Nunca deve ser necessário para aplicativos normais."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"sujeitar-se a um plano de fundo"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permite que o proprietário utilize interface de nível superior de um plano de fundo. Nunca deve ser necessário para aplicativos normais."</string> + <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) --> + <skip /> + <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) --> + <skip /> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"usar uma tela remota"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permite que o proprietário use a interface de nível superior de uma tela remota. Não deve ser necessário para aplicativos comuns."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"sujeitar-se a um serviço de widget"</string> @@ -700,6 +725,10 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite que o aplicativo recupere, examine e limpe notificações, inclusive as postadas por outros aplicativos."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"sujeitar a um serviço ouvinte de notificações"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite que o proprietário sujeite a interface de nível superior a um serviço ouvinte de notificações. Não deve ser necessário para aplicativos comuns."</string> + <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) --> + <skip /> + <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) --> + <skip /> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"invocar o aplicativo de configuração fornecido pela operadora"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permite que o proprietário invoque o aplicativo de configuração fornecido pela operadora. Não deve ser necessário para aplicativos comuns."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"detectar observações nas condições da rede"</string> @@ -1370,6 +1399,8 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Plano de fundo"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Alterar plano de fundo"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Ouvinte de notificações"</string> + <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) --> + <skip /> <string name="vpn_title" msgid="19615213552042827">"VPN ativada"</string> <string name="vpn_title_long" msgid="6400714798049252294">"A VPN está ativada por <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Toque para gerenciar a rede."</string> diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml index dc710d4..3103b1f 100644 --- a/core/res/res/values-rm/strings.xml +++ b/core/res/res/values-rm/strings.xml @@ -28,6 +28,28 @@ <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <!-- no translation found for fileSizeSuffix (9164292791500531949) --> <skip /> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <!-- no translation found for untitled (4638956954852782576) --> <skip /> <string name="ellipsis" msgid="7899829516048813237">"…"</string> @@ -608,6 +630,10 @@ <string name="permlab_bindWallpaper" msgid="8716400279937856462">"sa fixar vid in fund davos"</string> <!-- no translation found for permdesc_bindWallpaper (7108428692595491668) --> <skip /> + <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) --> + <skip /> + <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) --> + <skip /> <!-- no translation found for permlab_bindRemoteDisplay (1782923938029941960) --> <skip /> <!-- no translation found for permdesc_bindRemoteDisplay (1261242718727295981) --> @@ -1190,6 +1216,10 @@ <skip /> <!-- no translation found for permdesc_bindNotificationListenerService (985697918576902986) --> <skip /> + <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) --> + <skip /> + <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) --> + <skip /> <!-- no translation found for permlab_invokeCarrierSetup (3699600833975117478) --> <skip /> <!-- no translation found for permdesc_invokeCarrierSetup (4159549152529111920) --> @@ -2188,6 +2218,8 @@ <string name="chooser_wallpaper" msgid="7873476199295190279">"Midar il fund davos"</string> <!-- no translation found for notification_listener_binding_label (2014162835481906429) --> <skip /> + <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) --> + <skip /> <!-- no translation found for vpn_title (19615213552042827) --> <skip /> <!-- no translation found for vpn_title_long (6400714798049252294) --> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 0757578..3ee0b8a 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TO"</string> <string name="petabyteShort" msgid="5637816680144990219">"PO"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Fără titlu>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Setări"</string> <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> @@ -388,6 +409,10 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permite proprietarului să se conecteze la interfaţa de nivel superior a unui serviciu VPN. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"conectare la o imagine de fundal"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permite proprietarului să se conecteze la interfaţa de nivel superior a unei imagini de fundal. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string> + <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) --> + <skip /> + <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) --> + <skip /> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"conectare la un ecran la distanță"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permite proprietarului să se conecteze la interfața de nivel superior a unui ecran la distanță. Nu ar trebui să fie niciodată necesară pentru aplicațiile obișnuite."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"conectare la un serviciu widget"</string> @@ -700,6 +725,10 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite aplicației să recupereze, să examineze și să șteargă notificări, inclusiv pe cele postate de alte aplicații."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"conectare la un serviciu de citire a notificărilor"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite proprietarului să se conecteze la interfața de nivel superior a unui serviciu de citire a notificărilor. În mod normal aplicațiile nu ar trebui să aibă nevoie de această permisiune."</string> + <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) --> + <skip /> + <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) --> + <skip /> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"apelarea aplicației de configurare furnizată de operator"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permite proprietarului să apeleze aplicația de configurare furnizată de operator. Nu ar trebui să fie necesară pentru aplicațiile obișnuite."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ascultă observații despre starea rețelei"</string> @@ -1370,6 +1399,8 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Imagine de fundal"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Modificaţi imaginea de fundal"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Serviciu de citire a notificărilor"</string> + <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) --> + <skip /> <string name="vpn_title" msgid="19615213552042827">"VPN activat"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN este activată de <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Atingeţi pentru a gestiona reţeaua."</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index f826f1a..8c7a566 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TБ"</string> <string name="petabyteShort" msgid="5637816680144990219">"ПБ"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Без названия>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"..."</string> @@ -173,8 +195,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> - <!-- no translation found for global_action_settings (1756531602592545966) --> - <skip /> + <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Приложение сможет подключаться к базовому интерфейсу службы VPN. Это разрешение не используется обычными приложениями."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"Привязка к фоновому рисунку"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Приложение сможет подключаться к базовому интерфейсу службы обоев. Это разрешение не используется обычными приложениями."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"Подключение к службам голосового взаимодействия"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Приложение сможет подключаться к базовому интерфейсу служб голосового взаимодействия. Это разрешение обычно используется только специальными приложениями."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"Подключение к удаленному дисплею"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Приложение сможет подключаться к базовому интерфейсу удаленного дисплея. Это разрешение обычно используется только специальными приложениями."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"Подключение к службе виджетов"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Приложение сможет получать, проверять и удалять уведомления, включая те, что опубликованы другими приложениями."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"Подключение к службе просмотра уведомлений"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Приложение сможет подключаться к базовому интерфейсу службы просмотра уведомлений. Это разрешение не используется обычными приложениями."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"Подключение к серверам поставщиков условий"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Приложение сможет подключаться к базовому интерфейсу поставщиков условий. Это разрешение обычно используется только специальными приложениями."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"Запуск приложения настроек, предоставленного оператором"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Владелец сможет запускать приложение настроек, предоставленное оператором. Это разрешение не используется обычными приложениями."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"Использование данных о состоянии сети"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Фоновый рисунок"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Сменить обои"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Служба просмотра уведомлений"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Поставщик условий"</string> <string name="vpn_title" msgid="19615213552042827">"Сеть VPN активна"</string> <string name="vpn_title_long" msgid="6400714798049252294">"Сеть VPN активирована приложением <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Нажмите, чтобы открыть настройки."</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 09cf7f6..c96c661 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Bez mena>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Nastavenia"</string> <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> @@ -388,6 +409,10 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania služby VPN. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"väzba na tapetu"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania tapety. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string> + <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) --> + <skip /> + <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) --> + <skip /> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"viazať na vzdialený displej"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania vzdialeného displeja. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"viazať sa k službe miniaplikácie"</string> @@ -700,6 +725,10 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Umožňuje aplikácii načítať, zobrazovať a mazať upozornenia vrátane tých, ktoré boli uverejnené inými aplikáciami."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"naviazanie sa na službu na počúvanie upozornení"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Umožňuje držiteľovi naviazať sa na najvyššiu úroveň služby na počúvanie upozornení. Bežné aplikácie by toto nastavenie nemali nikdy požadovať."</string> + <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) --> + <skip /> + <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) --> + <skip /> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"vyvolanie aplikácie pre konfiguráciu poskytnutú operátorom"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Umožňuje držiteľovi vyvolať aplikáciu pre konfiguráciu poskytnutú operátorom. Bežné aplikácie by toto povolenie nemali nikdy potrebovať."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"zachytávať informácie o stave siete"</string> @@ -1370,6 +1399,8 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Tapeta"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Zmeniť tapetu"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Aplikácia na počúvanie upozornení"</string> + <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) --> + <skip /> <string name="vpn_title" msgid="19615213552042827">"Sieť VPN je aktivovaná"</string> <string name="vpn_title_long" msgid="6400714798049252294">"Aplikáciu <xliff:g id="APP">%s</xliff:g> aktivovala sieť VPN"</string> <string name="vpn_text" msgid="3011306607126450322">"Dotykom môžete spravovať sieť."</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 00649f4..ef5d872 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Brez naslova>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Lastniku omogoča povezovanje z vmesnikom storitve navideznega zasebnega omrežja najvišje ravni. Ne uporabljajte za navadne programe."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"povezovanje z ozadjem"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Imetniku omogoča povezavo z vmesnikom ozadja najvišje ravni. Tega nikoli ni treba uporabiti za navadne programe."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"povezovanje z glasovnim interaktorjem"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Imetniku omogoča povezovanje z vmesnikom storitve glasovne interakcije najvišje ravni. Tega ni treba nikoli uporabiti za navadne aplikacije."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"povezava z oddaljenim prikazom"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Imetniku omogoča povezovanje z vmesnikom oddaljenega prikaza najvišje ravni. Tega ni treba nikoli uporabiti za navadne aplikacije."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"poveži s storitvijo pripomočka"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Dovoli aplikaciji, da prenese, razišče in izbriše obvestila, tudi tista, ki so jih objavile druge aplikacije."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"poveži se s storitvijo poslušalca obvestil"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Lastniku omogoča povezovanje z vmesnikom storitve poslušalca obvestil najvišje ravni. Tega nikoli ni treba uporabiti za navadne aplikacije."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"povezovanje s storitvijo ponudnika pogojev"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Imetniku omogoča povezovanje z vmesnikom storitve ponudnika pogojev najvišje ravni. Tega ni treba nikoli uporabiti za navadne aplikacije."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"sprožitev operaterjeve aplikacije za konfiguracijo"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Lastniku omogoča sproženje operaterjeve aplikacije za konfiguracijo. Tega nikoli ni treba uporabiti za navadne aplikacije."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"spremljanje razmer v omrežju"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Ozadje"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Spreminjanje ozadja"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Poslušalec obvestil"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Ponudnik pogojev"</string> <string name="vpn_title" msgid="19615213552042827">"VPN aktiviran"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN je aktiviral program <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Dotaknite se, če želite upravljati omrežje."</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index d363771..b87bd89 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Без наслова>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,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> - <!-- no translation found for global_action_settings (1756531602592545966) --> - <skip /> + <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Дозвољава власнику да се повеже са интерфејсом VPN услуге највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"обавезивање на позадину"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Дозвољава власнику да се повеже са интерфејсом позадине највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"повежи са гласовним интерактором"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Дозвољава власнику да се повеже са интерфејсом највишег нивоа услуге гласовне интеракције. Не би требало никада да буде потребно за уобичајене апликације."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"повезивање са удаљеним екраном"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Дозвољава власнику да се повеже са интерфејсом удаљеног екрана највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"обавезивање на услугу виџета"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Дозвољава апликацији да преузима, испитује и брише обавештења, укључујући она која постављају друге апликације."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"повезивање са услугом монитора обавештења"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Дозвољава власнику да се повеже са интерфејсом услуге монитора обавештења највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"повежи са услугом добављача услова"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Дозвољава власнику да се повеже са интерфејсом највишег нивоа услуге добављача услова. Не би требало никада да буде потребно за уобичајене апликације."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"позивање апликације са конфигурацијом коју одређује оператер"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Дозвољава власнику да позива апликацију са конфигурацијом коју одређује оператер. Уобичајене апликације никада не би требало да је користе."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"праћење података о условима на мрежи"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Позадина"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Промена позадине"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Монитор обавештења"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Добављач услова"</string> <string name="vpn_title" msgid="19615213552042827">"VPN је активиран"</string> <string name="vpn_title_long" msgid="6400714798049252294">"Апликација <xliff:g id="APP">%s</xliff:g> је активирала VPN"</string> <string name="vpn_text" msgid="3011306607126450322">"Додирните да бисте управљали мрежом."</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 7ec4f41..9b4dae3 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Okänd>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en VPN-tjänst. Ska inte behövas för vanliga appar."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"binda till en bakgrund"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Innehavaren kan binda till den översta nivåns gränssnitt för en bakgrund. Ska inte behövas för vanliga appar."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"bind till en röstkomponent"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en rösttjänst. Ska inte behövas för vanliga appar."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"bind till en fjärrskärm"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en fjärrskärm. Ska inte behövas för vanliga appar."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind till en widget"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Tillåter att appen hämtar, granskar och raderar meddelanden, även sådana som skickats av andra appar."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"binda till en meddelandelyssnare"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en meddelandelyssnare. Ska inte behövas för vanliga appar."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"bind till en leverantörstjänst"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en leverantörstjänst. Ska inte behövas för vanliga appar."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"anropa konfigurationsappen från operatören"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Innehavaren tillåts att anropa konfigurationsappen från operatören. Ska inte behövas för vanliga appar."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"lyssna efter information om nätverksförhållanden"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Bakgrund"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Ändra bakgrund"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Meddelandelyssnare"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Leverantör"</string> <string name="vpn_title" msgid="19615213552042827">"VPN är aktiverat"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN aktiveras av <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Tryck om du vill hantera nätverket."</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 40adc3e..558cae2 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Haina jina>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Mipangilio"</string> <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> @@ -255,7 +276,7 @@ <string name="permdesc_statusBarService" msgid="716113660795976060">"Inaruhusu programu kuwa upau wa hali."</string> <string name="permlab_expandStatusBar" msgid="1148198785937489264">"panua/kunja mwambaa hali"</string> <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Inaruhusu programu kupanua au kukunja upau wa hali."</string> - <string name="permlab_install_shortcut" msgid="4279070216371564234">"sakinisha njia za mkato"</string> + <string name="permlab_install_shortcut" msgid="4279070216371564234">"kuweka njia za mkato"</string> <string name="permdesc_install_shortcut" msgid="8341295916286736996">"Huruhusu programu kuongeza njia za mkato za Skrini ya kwanza bila mtumiaji kuingilia."</string> <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"ondoa njia za mikato"</string> <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Huruhusu programu kuondoa njia za mkato za Skrini ya kwanza bila mtumiaji kuingilia."</string> @@ -283,7 +304,7 @@ <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Inaruhusu programu kupokea na kuchakata ujumbe wa WAP. Idhini hii inajumuisha uwezo wa kuchunguza na kufuta ujumbe uliotumwa kwako bila ya kukuonyesha."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"rudisha programu zinazoendeshwa"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Inaruhusu programu kurudisha taarifa kuhusu kazi zinazoendeshwa sasa na hivi karibuni. Hii inaweza kuruhusu programu kugundua taarifa kuhusu ni programu zipi zinazotumika kwenye kifaa."</string> - <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"Tagusana na watumiaji"</string> + <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"kuwasiliana na watumiaji wengine"</string> <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"Inaruhusu programu kutenda vitendo kwa watumiaji tofauti kwenye kifaa. Programu hasidi huenda zikatumia hii ili kukiuka ulinzi kati ya watumiaji."</string> <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"leseni kamili ili kushirikiana na watumiaji"</string> <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"Inaruhusu miingialiano yote inayowezekana kwa watumiaji."</string> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Inaruhusu kishikiliaji kushurutisha kusano ya kiwango cha juu cha huduma ya Vpn. Haipaswi kuhitajika kwa programu za kawaida."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"funga kwa mandhari"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Inaruhusu kishikiliaji kushurutisha kwa kusano ya kiwango cha juu cha mandhari. Haipaswi kamwe kuhitajika kwa programu za kawaida."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"shurutisha kwa muingiliano wa sauti"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Humruhusu mmiliki kushurutisha kwa kiolesura cha hali ya juu cha huduma ya muingiliano wa sauti. Kamwe isihitajike kwa programu za kawaida."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"fungisha kwenye mwonekano wa mbali"</string> <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> @@ -415,15 +438,15 @@ <string name="permdesc_deletePackages" msgid="7411480275167205081">"Inaruhusu programu kufuta furushi za Android. Programu hasidi zinaweza kutumia hii kufuta programu muhimu."</string> <string name="permlab_clearAppUserData" msgid="274109191845842756">"Futa data za programu zingine"</string> <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"Inaruhusu programu kufuta data ya mtumiaji."</string> - <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"Futa kache za programu zingine"</string> - <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"Inaruhusu programu kufuta faili za kache."</string> + <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"Kufuta akiba za programu zingine"</string> + <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"Huruhusu programu kufuta faili za akiba."</string> <string name="permlab_getPackageSize" msgid="7472921768357981986">"Pima nafasi ya hifadhi ya programu"</string> - <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Inaruhusu Programu kupata tena msimbo, data na ukubwa wa kache yake."</string> + <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Huruhusu Programu kupata tena msimbo, data na ukubwa wa akiba yake"</string> <string name="permlab_installPackages" msgid="2199128482820306924">"sakinisha programu moja kwa moja"</string> <string name="permdesc_installPackages" msgid="5628530972548071284">"Inaruhusu programu kusakanisha au kusasisha furushi mpya za Android. Programu hasidi zinaweza kutumia hii kuongeza programu mpya ambazo zina ruhusa zenye nguvu."</string> - <string name="permlab_clearAppCache" msgid="7487279391723526815">"Futa data yote kwenye kache ya programu"</string> - <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"Inaruhusu programu kutoa nafasi ya hifadhi ya kompyuta ndogo kwa kufuta faili katika saraka za kache za programu nyingine. Huenda hii ikasababisha programu nyingine kuanza polepole zaidi kwa sababu zinahitaji kuepua data zazo."</string> - <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"Inaruhusu programu kutoa nafasi ya hifadhi ya simu kwa kufuta faili katika saraka za kache za programu nyingine. Huenda hii ikasababisha programu nyingine kuanza polepole zaidi kwa sababu zinahitaji kuepua data zazo."</string> + <string name="permlab_clearAppCache" msgid="7487279391723526815">"kufuta data yote kwenye akiba ya programu"</string> + <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"Huruhusu programu kuongeza nafasi katika hifadhi ya kompyuta kibao kwa kufuta faili katika saraka za akiba za programu zingine. Huenda hii ikafanya baadhi ya programu zianze kufanya kazi polepole kwa sababu zinahitaji kupakua tena data iliyokuwemo."</string> + <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"Huruhusu programu kuongeza nafasi ya hifadhi ya simu kwa kufuta faili katika saraka za akiba za programu zingine. Huenda hii ikafanya baadhi ya programu zianze kufanya kazi polepole kwa sababu zinahitaji kupakua tena data iliyokuwemo."</string> <string name="permlab_movePackage" msgid="3289890271645921411">"songesha rasilimali ya programu"</string> <string name="permdesc_movePackage" msgid="319562217778244524">"Huruhusu programu kuhamisha nyenzo za programu kutoka midia ya ndani hadi ya nje na kinyume chake."</string> <string name="permlab_readLogs" msgid="6615778543198967614">"soma kumbukumbu ya data muhimu"</string> @@ -574,7 +597,7 @@ <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"badiliisha hali ya simu"</string> <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Inaruhusu programu kudhibiti vipengee vya kifaa. Programu iliyo na ruhusa hii inaweza badilisha mtandao, kuzima na kuwasha redio ya simu bila hata kukujulisha."</string> <string name="permlab_readPhoneState" msgid="9178228524507610486">"kusoma hali na kitambulisho cha simu"</string> - <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Inaruhusu programu kufikia vipengele vya simu vya kifaa. Idhini hii inaruhusu programu kutambua nambari ya simu na kifaa, kama simu ni amilifu, na nambari ya mbali iliyounganishwa kwa simu."</string> + <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Huruhusu programu kufikia vipengele vya simu vilivyo kwenye kifaa. Idhini hii inaruhusu programu kutambua nambari ya simu na kifaa, kama kuna simu inayopigwa, na nambari ya mbali iliyounganishwa kwenye simu."</string> <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"Soma hali sahihi ya simu"</string> <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Huruhusu programu kufikia hali sahihi ya simu. Ruhusa hii huwezesha programu kufahamu hali sahihi ya simu, iwapo simu inatumika au iko katika hali ya chini kwa chini, simu inaposhindikana, hali sahihi ya muunganisho wa data na muunganisho wa data unaposhindikana."</string> <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"zuia kompyuta ndogo dhidi ya kulala"</string> @@ -614,13 +637,13 @@ <string name="permdesc_manageAccounts" msgid="8698295625488292506">"Inaruhusu programu kutekeleza shughuli kama vile kuongeza na kutoa akaunti, na kufuta manenosiri yazo."</string> <string name="permlab_useCredentials" msgid="235481396163877642">"kutumia akaunti zilizo kwenye kifaa"</string> <string name="permdesc_useCredentials" msgid="7984227147403346422">"Inaruhusu programu kuomba shuhuda za uthibitisho."</string> - <string name="permlab_accessNetworkState" msgid="4951027964348974773">"Kuangalia mitandao"</string> + <string name="permlab_accessNetworkState" msgid="4951027964348974773">"kuona mitandao"</string> <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"Inaruhusu programu kuona taarifa kuhusu miunganisho ya mtandao kama vile mitandao ipi iliyopo na imeunganishwa."</string> <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"ufikiaji kamili wa mtandao"</string> <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"Inaruhusu programu kuunda soketi za mtandao na kutumia itifaki za mtandao maalum. Kivinajri na programu nyingine zilizotolewa zinamaanisha kutuma data kwenye mtandao, kwa hivyo kibali hiki hakihitajiki kutuma data kwenye mtandao."</string> <string name="permlab_writeApnSettings" msgid="505660159675751896">"mabadiliko / kuingilia mipangilio ya mtandao/msonmgamano"</string> <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Inaruhusu programu kubadilisha mipangilio ya mtandao na kukatiza na kukagua uendaji wa mtandao, kwa mfano kubadilisha kituo tarishi na mbadala cha APN yoyote. Programu hasidi zinaweza kuangalia, kuelekeza kwingine, au kurekebisha furushi za mtandao bila ya wewe kujua."</string> - <string name="permlab_changeNetworkState" msgid="958884291454327309">"badilisha muunganisho wa mtandao"</string> + <string name="permlab_changeNetworkState" msgid="958884291454327309">"kubadilisha muunganisho wa mtandao"</string> <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"Inaruhusu programu kubadilisha hali ya muunganisho wa mtandao."</string> <string name="permlab_changeTetherState" msgid="5952584964373017960">"Badilisha muunganisho uliofunganishwa"</string> <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Inaruhusu programu kubadilisha hali ya muunganisho wa mtandao uliofungwa."</string> @@ -650,25 +673,25 @@ <string name="permlab_bluetooth" msgid="6127769336339276828">"oanisha na vifaa vya Bluetooth"</string> <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Inaruhusu programu kuona usanidi wa Bluetooth kwenye kompyuta kibao, na kuunda na kukubali miunganisho kwa vifaa vilivyooanishwa."</string> <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Inaruhusu programu kuona usanidi wa Bluetooth kwenye simu, na kuunda na kukubali miunganisho kwa vifaa vilivyooanishwa."</string> - <string name="permlab_nfc" msgid="4423351274757876953">"dhibiti Mawasiliano ya vifaa vilivyo Karibu"</string> + <string name="permlab_nfc" msgid="4423351274757876953">"kudhibiti Mawasiliano ya Vifaa Vilivyokaribu (NFC)"</string> <string name="permdesc_nfc" msgid="7120611819401789907">"Inaruhusu programu kuwasiliana na lebo, kadi na wasomaji wa Near Field Communication (NFC)."</string> <string name="permlab_disableKeyguard" msgid="3598496301486439258">"zima kufuli la skrini yako"</string> <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Inaruhusu programu kulemaza ufunguo wa vitufe na usalama mwingine ambata wa nenosiri. Kwa mfano, simu inalemaza ufunguo wa viitufe inapopokea simu inayoingia, kisha inawezesha upya ufunguo wa vitufe wakati simu inapokamilika."</string> - <string name="permlab_readSyncSettings" msgid="6201810008230503052">"soma mipangilio ya usawazishaji"</string> + <string name="permlab_readSyncSettings" msgid="6201810008230503052">"kusoma mipangilio ya usawazishaji"</string> <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Inaruhusu programu kusoma mipangilio ya upatanishi wa akaunti. Kwa mfano, huku kunaweza kuamua kama programu ya Watu imepatanishwa na akaunti."</string> - <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"washa na uzime usawazishaji"</string> + <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"kuwasha na kuzima usawazishaji"</string> <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Inaruhusu programu kurekebisha mipangalio ya upatanishi wa akaunti. Kwa mfano, hii inaweza kuwezesha programu ya upatanishi wa Watu na akaunti."</string> - <string name="permlab_readSyncStats" msgid="7396577451360202448">"soma takwimu za usawazishaji"</string> + <string name="permlab_readSyncStats" msgid="7396577451360202448">"kusoma takwimu za usawazishaji"</string> <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Inaruhusu programu kusoma takwimu za upatanishi za akaunti, ikiwa ni pamoja na historia ya matukio ya upatanishi na kiasi cha data kimepatanishwa."</string> - <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"soma milisho ya kujiunga"</string> + <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"kusoma mipasho kutoka vyanzo unavyofuatilia"</string> <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Inaruhusu programu kupata maelezo kuhusu mlisho iliyolandanishwa kwa sasa."</string> - <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"andika milisho ya kujiunga"</string> + <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"kuandika mipasho kutoka vyanzo unavyofuatilia"</string> <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Inaruhusu programu kurekebisha milisho yako iliyolandanishwa kwa sasa. Programu hasidi zinaweza kubadilisha milisho yako iliyolandanishwa."</string> <string name="permlab_readDictionary" msgid="4107101525746035718">"soma maneno uliyoongeza kwenye kamusi"</string> <string name="permdesc_readDictionary" msgid="659614600338904243">"Inaruhusu programu kusoma maneno, majina na misemo yote ambayo mtumiaji alihifadhi katika kamusi ya mtumiaji."</string> <string name="permlab_writeDictionary" msgid="2183110402314441106">"ongeza maneno katika kamusi ya mtumiaji iliyofafanuliwa"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Inaruhusu programu kuandika maneno mapya katika kamusi ya mtumiaji."</string> - <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"soma maudhui ya hifadhi yako ya USB"</string> + <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"kusoma maudhui yaliyo kwenye hifadhi yako ya USB"</string> <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"soma maudhui ya kadi yako ya SD"</string> <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"Huruhusu programu kusoma maudhui ya hifadhi ya USB."</string> <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"Huruhusu programu kusoma maudhui ya kadi yako ya SD."</string> @@ -682,12 +705,12 @@ <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"Huruhusu programu kudhibiti hifadhi ya hati."</string> <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"Fikia hifadhi ya nje ya watumiaji wote"</string> <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"Inaruhusu programu kufikia hifadhi ya nje kwa watumiaji wote."</string> - <string name="permlab_cache_filesystem" msgid="5656487264819669824">"fikia faili za mfumo za kache"</string> - <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Inaruhusu programu kusoma na kuandika mfumo wa faili wa kache."</string> + <string name="permlab_cache_filesystem" msgid="5656487264819669824">"fikia faili za mfumo za akiba"</string> + <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Huruhusu programu kusoma na kuandika mfumo wa faili wa akiba."</string> <string name="permlab_use_sip" msgid="5986952362795870502">"piga/pokea simu za mtandao"</string> <string name="permdesc_use_sip" msgid="4717632000062674294">"Inaruhusu programu kutumia huduma ya SIP kupiga/kupokea simu za mtandao."</string> <string name="permlab_bind_call_service" msgid="6724009726671246551">"tumikisha skrini ya simu inayoendelea"</string> - <string name="permdesc_bind_call_service" msgid="8732547662442572435">"Inaruhusu programu kudhibiti wakati na jinsi mtumiaji anaona skrini ya simu inayoendelea."</string> + <string name="permdesc_bind_call_service" msgid="8732547662442572435">"Huruhusu programu kudhibiti wakati na jinsi mtumiaji anaona skrini anapopigiwa simu."</string> <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"soma matumizi ya historia ya mtandao"</string> <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"Inaruhusu programu kusoma historia ya matumizi ya mtandao kwa mitandao maalum na programu."</string> <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"dhibiti sera ya mtandao"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Huruhusu programu kurejesha, kuchunguza, na kuondoa arifa, ikiwa ni pamoja na zile zilizochapishwa na programu nyingine."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"unganisha kwenye huduma ya kisikilizi cha arifa"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Inaruhusu kishikilizi kuunganishwa kwenye kusano cha kiwango cha juu cha huduma ya kisikilizi cha arifa. Haipaswi kuhitajika tena kwa programu za kawaida."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"shurutisha kwa huduma ya mtoa masharti"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Humruhusu mmiliki kushurutisha kwa kiolesura cha kiwango cha juu cha huduma ya mtoa masharti. Kamwe isihitajike kwa pogramu za kawaida."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"omba programu ya usakinishaji inayotolewa na mtoa huduma."</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Inaruhusu kishikiliaji kuomba programu ya usakinishaji inayotolewa na mto huduma. Haipaswi kuhitajika kwa programu za kawaida."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"sikiliza matukio katika hali za mtandao"</string> @@ -710,9 +735,9 @@ <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Huruhusu programu kwa utoaji na matumizi ya vyeti vya DRM. Havifahi kuhitajika kwa ajili ya programu za kawaida."</string> <string name="policylab_limitPassword" msgid="4497420728857585791">"Kuweka kanuni za nenosiri"</string> <string name="policydesc_limitPassword" msgid="3252114203919510394">"Kudhibiti urefu na herufi zinazoruhusiwa katika manenosiri ya kufungua skrini."</string> - <string name="policylab_watchLogin" msgid="914130646942199503">"Kuhesabu idadi ya mara ambazo skrini inajaribu kufunguliwa"</string> - <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Fuatilia idadi ya manenosiri yasiyo sahihi yatakayoingizwa wakati wa kufungua skrini, na ufunge kompyuta kibao au ufute data yote iliyomo kama manenosiri mengi yenye makosa yataingizwa."</string> - <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Fuatilia idadi ya manenosiri yasiyo sahihi yatakayoingizwa wakati wa kufungua skrini, na ufunge simu au ufute data yote iliyomo kama manenosiri mengi sana yasiyo sahihi yataingizwa."</string> + <string name="policylab_watchLogin" msgid="914130646942199503">"Kuhesabu mara ambazo skrini inajaribu kufunguliwa"</string> + <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Kufuatilia idadi ya manenosiri yasiyo sahihi yatakayoingizwa wakati wa kufungua skrini, na kufunga kompyuta kibao au kufuta data yote iliyomo kama manenosiri mengi yasiyo sahihi yataingizwa."</string> + <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Kufuatilia idadi ya manenosiri yasiyo sahihi yatakayoingizwa wakati wa kufungua skrini, na kufunga simu au kufuta data yote iliyomo kama manenosiri mengi sana yasiyo sahihi yataingizwa."</string> <string name="policylab_resetPassword" msgid="2620077191242688955">"Kubadilisha nenosiri la kufungua skrini"</string> <string name="policydesc_resetPassword" msgid="605963962301904458">"Kubadilisha nenosiri la kufungua skrini."</string> <string name="policylab_forceLock" msgid="2274085384704248431">"Kufunga skrini"</string> @@ -1289,14 +1314,14 @@ <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Imeunganishwa kama kamera"</string> <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Imeunganishwa kama kisakinishi"</string> <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Imeunganishwa kwa kifuasi cha USB"</string> - <string name="usb_notification_message" msgid="2290859399983720271">"Gusa kwa chaguo nyingine za USB."</string> + <string name="usb_notification_message" msgid="2290859399983720271">"Gusa ili uone chaguo zingine za USB."</string> <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Fomati hifadhi ya USB?"</string> <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Umbiza kadi ya SD."</string> <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Faili zote zilizohifadhiwa katika hifadhi yako ya USB zitafutwa. Hatua hii haiwezi kubadilishwa!"</string> <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Data yote kwenye kadi yako itapotea."</string> <string name="extmedia_format_button_format" msgid="4131064560127478695">"Fomati"</string> - <string name="adb_active_notification_title" msgid="6729044778949189918">"Utatuaji USB umeunganishwa"</string> - <string name="adb_active_notification_message" msgid="1016654627626476142">"Gusa ili kulemaza utatuaji wa USB."</string> + <string name="adb_active_notification_title" msgid="6729044778949189918">"Utatuaji wa USB umeunganishwa"</string> + <string name="adb_active_notification_message" msgid="1016654627626476142">"Gusa ili uzime utatuaji wa USB."</string> <string name="select_input_method" msgid="4653387336791222978">"Chagua njia ya ingizo"</string> <string name="configure_input_methods" msgid="9091652157722495116">"Weka mbinu za ingizo"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Kibodi halisi"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Mandhari"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Badilisha mandhari"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Kisikilizi cha arifa"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Mtoa hali"</string> <string name="vpn_title" msgid="19615213552042827">"VPN imewezeshwa"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN imeamilishwa na <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Gusa ili kudhibiti mtandao."</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index c211018..826fa64 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<ไม่มีชื่อ>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"อนุญาตให้เจ้าของเชื่อมโยงกับส่วนติดต่อผู้ใช้ระดับสูงสุดของบริการ VPN ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"เชื่อมโยงกับวอลเปเปอร์"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"อนุญาตให้ผู้ใช้เชื่อมโยงกับส่วนติดต่อผู้ใช้ระดับสูงสุดของวอลเปเปอร์ ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"เชื่อมโยงกับโปรแกรมโต้ตอบด้วยเสียง"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"อนุญาตให้ผู้ใช้อุปกรณ์เชื่อมโยงกับอินเทอร์เฟซระดับบนสุดของบริการโต้ตอบด้วยเสียง ไม่จำเป็นสำหรับแอปทั่วไป"</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"ผูกกับจอแสดงผลระยะไกล"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"อนุญาตให้ผู้ใช้ผูกกับอินเทอร์เฟซระดับสูงสุดของจอแสดงผลระยะไกล ซึ่งแอปพลิเคชันทั่วไปไม่จำเป็นต้องใช้"</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"เชื่อมโยงกับบริการวิดเจ็ต"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"ทำให้แอปสามารถเรียกดู ตรวจสอบ และล้างการแจ้งเตือนได้ ซึ่งรวมถึงการแจ้งเตือนที่โพสต์โดยแอปอื่นๆ ด้วย"</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"เชื่อมโยงกับบริการตัวฟังการแจ้งเตือน"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"อนุญาตให้เจ้าของเชื่อมโยงกับอินเตอร์เฟซระดับสูงสุดของบริการตัวฟังการแจ้งเตือน ซึ่งไม่มีความจำเป็นสำหรับแอปธรรมดา"</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"เชื่อมโยงกับบริการของผู้เสนอเงื่อนไข"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"อนุญาตให้ผู้ใช้อุปกรณ์เชื่อมโยงกับอินเทอร์เฟซระดับบนสุดของบริการของผู้เสนอเงื่อนไข ไม่จำเป็นสำหรับแอปทั่วไป"</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"เรียกใช้แอปการกำหนดค่าของผู้ให้บริการ"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"อนุญาตให้ผู้ใช้สามารถเรียกใช้แอปการกำหนดค่าของผู้ให้บริการ ซึ่งแอปทั่วไปไม่จำเป็นต้องใช้"</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ฟังข้อสังเกตเกี่ยวกับสภาวะของเครือข่าย"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"วอลเปเปอร์"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"เปลี่ยนวอลเปเปอร์"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"ตัวฟังการแจ้งเตือน"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"ผู้เสนอเงื่อนไข"</string> <string name="vpn_title" msgid="19615213552042827">"VPN เปิดใช้งานแล้ว"</string> <string name="vpn_title_long" msgid="6400714798049252294">"เปิดใช้งาน VPN โดย <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"แตะเพื่อจัดการเครือข่าย"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index a7b7b8f..6e50517 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Walang pamagat>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Mga Setting"</string> <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Pinapayagan ang may-hawak na sumailalim sa nangungunang interface ng serbisyo ng Vpn. Hindi kailanman dapat na kailanganin para sa normal na apps."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"sumailalim sa wallpaper"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Pinapayagan ang may-hawak na sumailalim sa nangungunang interface ng isang wallpaper. Hindi kailanman dapat na kailanganin para sa normal na apps."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"i-bind sa isang voice interactor"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Nagbibigay-daan sa may-hawak na i-bind ang top-level na interface ng isang serbisyo sa pakikipag-ugnayan gamit ang boses. Hindi kailanman dapat kailanganin ng mga normal na app."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"magpasaklaw sa isang remote na display"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Binibigyang-daan ang may-hawak na masaklaw ang pinakamataas na antas ng interface ng isang remote na display. Hindi dapat kailanman kailanganin ng normal na apps."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"itali sa serbisyo ng widget"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Pinapayagan ang app na kumuha, sumuri, at mag-clear ng mga notification, kabilang ang mga na-post ng iba pang apps."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"mapailalim sa isang serbisyo ng notification listener"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Nagbibigay-daan sa may-ari na mapailalim sa interface sa tuktok na antas ng isang serbisyo ng notification listener. Hindi dapat kailanganin para sa karaniwang apps kahit kailan."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"i-bind sa isang serbisyo sa pagbibigay ng kundisyon"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Nagbibigay-daan sa naghahawak na i-bind ang top-level na interface ng isang serbisyo sa pagbibigay ng kundisyon. Hindi kailanman dapat kailanganin ng mga normal na app."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"paganahin ang app ng configuration na ibinigay ng carrier"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Nagbibigay-daan sa may-ari na paganahin ang app ng configuration na ibinigay ng carrier. Hindi dapat kailanganin para sa normal na apps kahit kailan."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"makinig sa mga obserbasyon sa mga kundisyon ng network"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Wallpaper"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Baguhin ang wallpaper"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Notification listener"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Nagbibigay ng kundisyon"</string> <string name="vpn_title" msgid="19615213552042827">"Naka-activate ang VPN"</string> <string name="vpn_title_long" msgid="6400714798049252294">"Isinaaktibo ang VPN ng <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Pindutin upang pamahalaan ang network."</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index bc73a93..bd2f926 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Adsız>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Ayarlar"</string> <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Cihazın sahibine bir VPN hizmetinin en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"bir duvar kağıdına tabi kıl"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Cihazın sahibine, duvar kağıdının en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"bir ses etkileşimi hizmetine bağlanma"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"İzin sahibinin, bir ses etkileşimi hizmetine ait üst düzey arayüze bağlanmasına izin verir. Normal uygulamalar için hiçbir zaman gerekli değildir."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"uzak ekrana bağlan"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"İzin sahibine, bir uzak ekranın en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bir widget hizmetine bağla"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Uygulamanın bildirimler almasına, bildirimleri incelemesine ve temizlemesine izin verir. Buna diğer uygulamalar tarafından yayınlanan bildirimler de dahildir."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bildirim dinleyici hizmetine bağlan"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"İzin sahibine bir bildirim dinleyici hizmetinin en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"bir durum sağlayıcı hizmetine bağlanma"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"İzin sahibinin, bir durum sağlayıcı hizmete ait üst düzey arayüze bağlanmasına izin verir. Normal uygulamalar için hiçbir zaman gerekli değildir."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"operatör tarafından sağlanan yapılandırma uygulamasını çalıştır"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"İzin sahibine, operatör tarafından sağlanan yapılandırma uygulamasını çalıştırma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ağ koşullarındaki gözlemleri dinle"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Duvar Kağıdı"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Duvar kağıdını değiştir"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Bildirim dinleyici"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Durum sağlayıcı"</string> <string name="vpn_title" msgid="19615213552042827">"VPN etkinleştirildi"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN, <xliff:g id="APP">%s</xliff:g> tarafından etkinleştirildi"</string> <string name="vpn_text" msgid="3011306607126450322">"Ağı yönetmek için dokunun."</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 75d77c8..d01c577 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"Тб"</string> <string name="petabyteShort" msgid="5637816680144990219">"Пб"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Без назви>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Дозволяє власникові прив’язуватися до інтерфейсу верхнього рівня служби VPN. Ніколи не застосовується для звичайних програм."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"прив’язати до фонового малюнка"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Дозволяє власнику прив’язуватися до інтерфейсу верхнього рівня фонового малюнка. Ніколи не застосовується для звичайних програм."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"підключитися до служби голосової взаємодії"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Додаток зможе підключатися до інтерфейсу верхнього рівня служби голосової взаємодії. Звичайні додатки ніколи не використовують цей дозвіл."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"прив’язуватися до віддаленого екрана"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Дозволяє власникові прив’язуватися до інтерфейсу верхнього рівня віддаленого екрана. Ніколи не застосовується для звичайних програм."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"прив\'язувати до служби віджетів"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Дозволяє програмі отримувати, перевіряти й очищати сповіщення, зокрема опубліковані іншими програмами."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"прив’язуватися до служби читання сповіщень"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Дозволяє власнику прив’язуватися до інтерфейсу верхнього рівня служби читання сповіщень. Ніколи не застосовується для звичайних програм."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"підключитися до служби постачання умов"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Додаток зможе підключатися до інтерфейсу верхнього рівня служби постачання умов. Звичайні додатки ніколи не використовують цей дозвіл."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"викликати надану оператором програму конфігурації"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Дозволяє власнику викликати надану оператором програму конфігурації. Ніколи не застосовується для звичайних програм."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"прослуховувати дані спостережень за станом мережі"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Фоновий мал."</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Змінити фоновий малюнок"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Служба читання сповіщень"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Постачальник умов"</string> <string name="vpn_title" msgid="19615213552042827">"Мережу VPN активовано"</string> <string name="vpn_title_long" msgid="6400714798049252294">"Мережу VPN активовано програмою <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Торкніться, щоб керувати мережею."</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index a1c03ad..24b2db5 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Không có tiêu đề>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -135,8 +157,7 @@ <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Đồng bộ hóa"</string> <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Quá nhiều lần xóa <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string> <string name="low_memory" product="tablet" msgid="6494019234102154896">"Bộ nhớ máy tính bảng đã đầy. Hãy xóa một số tệp để tạo thêm dung lượng."</string> - <!-- no translation found for low_memory (4415914910770005166) --> - <skip /> + <string name="low_memory" product="watch" msgid="4415914910770005166">"Bộ nhớ đồng hồ đã đầy. Hãy xóa một số tệp để giải phóng dung lượng."</string> <string name="low_memory" product="default" msgid="3475999286680000541">"Bộ nhớ điện thoại đã đầy. Hãy xóa một số tệp để tạo thêm dung lượng."</string> <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Mạng có thể được giám sát"</string> <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Bởi một bên thứ ba không xác định"</string> @@ -154,8 +175,7 @@ <string name="silent_mode_ring" msgid="8592241816194074353">"Bật chuông"</string> <string name="shutdown_progress" msgid="2281079257329981203">"Đang tắt…"</string> <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Máy tính bảng của bạn sẽ tắt."</string> - <!-- no translation found for shutdown_confirm (3490275567476369184) --> - <skip /> + <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Đồng hồ của bạn sẽ tắt."</string> <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Điện thoại của bạn sẽ tắt."</string> <string name="shutdown_confirm_question" msgid="2906544768881136183">"Bạn có muốn tắt không?"</string> <string name="reboot_safemode_title" msgid="7054509914500140361">"Khởi động lại ở chế độ an toàn"</string> @@ -175,8 +195,7 @@ <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="global_action_settings" msgid="1756531602592545966">"Cài đặt"</string> <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> @@ -390,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của dịch vụ Vpn. Không cần thiết cho các ứng dụng thông thường."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"liên kết với hình nền"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của hình nền. Không cần thiết cho các ứng dụng thông thường."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"liên kết với trình tương tác bằng giọng nói"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của dịch vụ tương tác bằng giọng nói. Không cần thiết cho các ứng dụng thông thường."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"liên kết với màn hình từ xa"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của màn hình từ xa. Không cần thiết cho các ứng dụng thông thường."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"liên kết với dịch vụ tiện ích con"</string> @@ -702,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Cho phép ứng dụng truy xuất, kiểm tra và xóa thông báo, bao gồm những thông báo được đăng bởi các ứng dụng khác."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"liên kết với dịch vụ trình xử lý thông báo"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của dịch vụ trình xử lý thông báo. Không cần thiết cho các ứng dụng thông thường."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"liên kết với dịch vụ trình cung cấp điều kiện"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của dịch vụ trình cung cấp điều kiện. Không cần thiết cho các ứng dụng thông thường."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"gọi ra ứng dụng cấu hình do nhà cung cấp dịch vụ cung cấp"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Cho phép chủ sở hữu gọi ra ứng dụng cấu hình do nhà cung cấp dịch vụ cung cấp. Không cần thiết cho các ứng dụng thông thường."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"quan sát các điều kiện mạng"</string> @@ -1372,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Hình nền"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Thay đổi hình nền"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Trình xử lý thông báo"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Trình cung cấp điều kiện"</string> <string name="vpn_title" msgid="19615213552042827">"Đã kích hoạt VPN"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN được <xliff:g id="APP">%s</xliff:g> kích hoạt"</string> <string name="vpn_text" msgid="3011306607126450322">"Chạm để quản lý mạng."</string> diff --git a/core/res/res/values-watch/config.xml b/core/res/res/values-watch/config.xml index 4c4d0ce..e71fa4a 100644 --- a/core/res/res/values-watch/config.xml +++ b/core/res/res/values-watch/config.xml @@ -27,4 +27,14 @@ <item>settings</item> </string-array> -</resources>
\ No newline at end of file + <!-- Base "touch slop" value used by ViewConfiguration as a + movement threshold where scrolling should begin. --> + <dimen name="config_viewConfigurationTouchSlop">4dp</dimen> + + <!-- Minimum velocity to initiate a fling, as measured in dips per second. --> + <dimen name="config_viewMinFlingVelocity">50dp</dimen> + + <!-- Maximum velocity to initiate a fling, as measured in dips per second. --> + <dimen name="config_viewMaxFlingVelocity">8000dp</dimen> + +</resources> diff --git a/core/res/res/values-watch/themes.xml b/core/res/res/values-watch/themes.xml new file mode 100644 index 0000000..9447d9c --- /dev/null +++ b/core/res/res/values-watch/themes.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- 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. +--> +<resources> + <style name="Theme.Dialog.Alert" parent="Theme.Micro.Dialog.Alert" /> + <style name="Theme.Dialog.AppError" parent="Theme.Micro.Dialog.AppError" /> + <style name="Theme.Holo.Dialog.Alert" parent="Theme.Micro.Dialog.Alert" /> + <style name="Theme.Holo.Light.Dialog.Alert" parent="Theme.Micro.Dialog.Alert" /> +</resources> diff --git a/core/res/res/values-watch/themes_device_defaults.xml b/core/res/res/values-watch/themes_device_defaults.xml new file mode 100644 index 0000000..705143c --- /dev/null +++ b/core/res/res/values-watch/themes_device_defaults.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- 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. +--> +<resources> + <style name="Theme.DeviceDefault" parent="Theme.Micro" /> + <style name="Theme.DeviceDefault.NoActionBar" parent="Theme.Micro" /> + <style name="Theme.DeviceDefault.Dialog" parent="Theme.Micro.Dialog" /> + <style name="Theme.DeviceDefault.Dialog.Alert" parent="Theme.Micro.Dialog.Alert" /> + <style name="Theme.DeviceDefault.Light" parent="Theme.Micro.Light" /> + <style name="Theme.DeviceDefault.Light.NoActionBar" parent="Theme.Micro.Light" /> + <style name="Theme.DeviceDefault.Light.DarkActionBar" parent="Theme.Micro.Light" /> + <style name="Theme.DeviceDefault.Light.Dialog" parent="Theme.Micro.Dialog" /> + <style name="Theme.DeviceDefault.Light.Dialog.Alert" parent="Theme.Micro.Dialog.Alert" /> + +</resources> + diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 134cf9a..9297e3a 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<未命名>"</string> <string name="ellipsis" msgid="7899829516048813237">"..."</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -77,14 +99,14 @@ <string name="serviceNotProvisioned" msgid="8614830180508686666">"未提供服务。"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"您无法更改来电显示设置。"</string> <string name="RestrictedChangedTitle" msgid="5592189398956187498">"网络可用情况发生变化"</string> - <string name="RestrictedOnData" msgid="8653794784690065540">"数据服务已禁用。"</string> - <string name="RestrictedOnEmergency" msgid="6581163779072833665">"紧急服务已禁用。"</string> - <string name="RestrictedOnNormal" msgid="4953867011389750673">"已禁用语音服务。"</string> - <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"已停用所有语音服务。"</string> - <string name="RestrictedOnSms" msgid="8314352327461638897">"已禁用短信服务。"</string> - <string name="RestrictedOnVoiceData" msgid="996636487106171320">"已停用语音/数据服务。"</string> - <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"已禁用语音/短信服务。"</string> - <string name="RestrictedOnAll" msgid="5643028264466092821">"已停用所有语音/数据/短信服务。"</string> + <string name="RestrictedOnData" msgid="8653794784690065540">"数据网络服务已停用。"</string> + <string name="RestrictedOnEmergency" msgid="6581163779072833665">"紧急服务已停用。"</string> + <string name="RestrictedOnNormal" msgid="4953867011389750673">"语音服务已停用。"</string> + <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"所有语音服务都已停用。"</string> + <string name="RestrictedOnSms" msgid="8314352327461638897">"短信服务已停用。"</string> + <string name="RestrictedOnVoiceData" msgid="996636487106171320">"语音/数据服务已停用。"</string> + <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"语音/短信服务已停用。"</string> + <string name="RestrictedOnAll" msgid="5643028264466092821">"所有语音/数据/短信服务都已停用。"</string> <string name="serviceClassVoice" msgid="1258393812335258019">"语音"</string> <string name="serviceClassData" msgid="872456782077937893">"数据"</string> <string name="serviceClassFAX" msgid="5566624998840486475">"传真"</string> @@ -173,8 +195,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> - <!-- no translation found for global_action_settings (1756531602592545966) --> - <skip /> + <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> @@ -388,6 +409,10 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"允许用户绑定到 VPN 服务的顶级接口。普通应用绝不需要此权限。"</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"绑定到壁纸"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"允许用户绑定到壁纸的顶级接口。普通应用绝不需要此权限。"</string> + <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) --> + <skip /> + <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) --> + <skip /> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"绑定至远程显示屏"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"允许应用绑定至远程显示屏的顶级接口。普通应用绝不需要此权限。"</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"绑定到小部件服务"</string> @@ -610,8 +635,8 @@ <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"允许该应用获取手机已知的帐户列表,其中可能包括由已安装的应用创建的所有帐户。"</string> <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"创建帐户并设置密码"</string> <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"允许应用使用 AccountManager 的帐户身份验证程序功能,包括创建帐户以及获取和设置其密码。"</string> - <string name="permlab_manageAccounts" msgid="4983126304757177305">"添加或删除帐户"</string> - <string name="permdesc_manageAccounts" msgid="8698295625488292506">"允许应用执行添加帐户、删除帐户、删除帐户密码等操作。"</string> + <string name="permlab_manageAccounts" msgid="4983126304757177305">"添加或移除帐户"</string> + <string name="permdesc_manageAccounts" msgid="8698295625488292506">"允许应用执行添加帐户、移除帐户、删除帐户密码等操作。"</string> <string name="permlab_useCredentials" msgid="235481396163877642">"使用设备上的帐户"</string> <string name="permdesc_useCredentials" msgid="7984227147403346422">"允许应用请求身份验证令牌。"</string> <string name="permlab_accessNetworkState" msgid="4951027964348974773">"查看网络连接"</string> @@ -700,6 +725,10 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"允许该应用检索、检查并清除通知,包括其他应用发布的通知。"</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"绑定到通知侦听器服务"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"允许应用绑定到通知侦听器服务的顶级接口(普通应用绝不需要此权限)。"</string> + <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) --> + <skip /> + <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) --> + <skip /> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"调用运营商提供的配置应用"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"允许应用调用运营商提供的配置应用。普通应用绝不需要此权限。"</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"监听网络状况的观测信息"</string> @@ -1370,6 +1399,8 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"壁纸"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"更改壁纸"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"通知侦听器"</string> + <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) --> + <skip /> <string name="vpn_title" msgid="19615213552042827">"VPN 已激活"</string> <string name="vpn_title_long" msgid="6400714798049252294">"“<xliff:g id="APP">%s</xliff:g>”已激活 VPN"</string> <string name="vpn_text" msgid="3011306607126450322">"触摸可管理网络。"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index 2d3c418..1c8cfe8 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<未命名>"</string> <string name="ellipsis" msgid="7899829516048813237">"..."</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"允許應用程式繫結至 VPN 服務的頂層介面 (不建議一般應用程式使用)。"</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"繫結至桌布"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"允許應用程式繫結至桌布的頂層介面 (不建議一般應用程式使用)。"</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"繫結至語音互動器"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"允許應用程式繫結至語音互動服務的頂層介面,但一般應用程式並不需要使用。"</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"繫結至遠端螢幕"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"允許應用程式繫結至遠端屏螢的頂層介面 (不建議一般應用程式使用)。"</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"繫結至小工具服務"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"允許應用程式擷取、檢查及清除通知 (包括由其他應用程式發佈的通知)。"</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"繫結至通知接聽器服務"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"允許應用程式繫結至通知接聽器服務的頂層介面 (不建議一般應用程式使用)。"</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"繫結至條件供應商服務"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"允許應用程式繫結至條件供應商服務的頂層介面,但一般應用程式並不需要使用。"</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"調用流動網絡供應商提供的設定應用程式"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"允許應用程式調用流動網絡供應商提供的設定應用程式 (不建議一般應用程式使用)。"</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"監聽對網絡狀況的觀察"</string> @@ -981,7 +1007,7 @@ <string name="permlab_setAlarm" msgid="1379294556362091814">"設定鬧鐘"</string> <string name="permdesc_setAlarm" msgid="316392039157473848">"允許應用程式在安裝的鬧鐘應用程式中設定鬧鐘,某些鬧鐘應用程式可能沒有這項功能。"</string> <string name="permlab_addVoicemail" msgid="5525660026090959044">"新增留言"</string> - <string name="permdesc_addVoicemail" msgid="6604508651428252437">"允許應用程式將訊息加到您的留言信箱收件匣。"</string> + <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> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"桌布"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"變更桌布"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"通知接聽器"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"條件供應商"</string> <string name="vpn_title" msgid="19615213552042827">"VPN 已啟用。"</string> <string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g> 已啟用 VPN"</string> <string name="vpn_text" msgid="3011306607126450322">"輕觸即可管理網絡。"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index e309acc..05e0894 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<未命名>"</string> <string name="ellipsis" msgid="7899829516048813237">"…"</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -173,8 +195,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> - <!-- no translation found for global_action_settings (1756531602592545966) --> - <skip /> + <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> @@ -388,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"允許應用程式聯繫至 VPN 服務的頂層介面 (一般應用程式不需使用)。"</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"連結至桌布"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"允許應用程式繫結至桌布的頂層介面 (一般應用程式不需使用)。"</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"繫結至語音互動器"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"允許應用程式繫結至語音互動服務的頂層介面 (一般應用程式並不需要)。"</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"繫結至遠端螢幕"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"允許應用程式繫結至遠端螢幕的頂層介面 (一般應用程式不需使用)。"</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"繫結至小工具服務"</string> @@ -700,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"允許應用程式擷取、檢查及清除通知 (包括由其他應用程式發佈的通知)。"</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"繫結至通知接聽器服務"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"允許應用程式繫結至通知接聽器服務的頂層介面 (一般應用程式不需使用)。"</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"繫結至條件提供者服務"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"允許應用程式繫結至條件提供者服務的頂層介面 (一般應用程式並不需要)。"</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"叫用行動通訊業者提供的設定應用程式"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"允許應用程式叫用行動通訊業者提供的設定應用程式 (一般應用程式並不需要)。"</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"監聽網路狀況觀察資訊"</string> @@ -1370,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"桌布"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"變更桌布"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"通知接聽器"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"條件提供者"</string> <string name="vpn_title" msgid="19615213552042827">"VPN 已啟用"</string> <string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g> 已啟用 VPN"</string> <string name="vpn_text" msgid="3011306607126450322">"輕觸即可管理網路。"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 4e36a1b..9c8542e 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -27,6 +27,28 @@ <string name="terabyteShort" msgid="231613018159186962">"TB"</string> <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string> + <!-- no translation found for durationDays (6652371460511178259) --> + <skip /> + <!-- no translation found for durationDayHours (2713107458736744435) --> + <skip /> + <!-- no translation found for durationDayHour (7293789639090958917) --> + <skip /> + <!-- no translation found for durationHours (4266858287167358988) --> + <skip /> + <!-- no translation found for durationHourMinutes (9029176248692041549) --> + <skip /> + <!-- no translation found for durationHourMinute (2741677355177402539) --> + <skip /> + <!-- no translation found for durationMinutes (3134226679883579347) --> + <skip /> + <!-- no translation found for durationMinuteSeconds (1424656185379003751) --> + <skip /> + <!-- no translation found for durationMinuteSecond (3989228718067466680) --> + <skip /> + <!-- no translation found for durationSeconds (8050088505238241405) --> + <skip /> + <!-- no translation found for durationSecond (985669622276420331) --> + <skip /> <string name="untitled" msgid="4638956954852782576">"<Akunasihloko>"</string> <string name="ellipsis" msgid="7899829516048813237">"..."</string> <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string> @@ -387,6 +409,8 @@ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Ivumela umnini ukuthi abophele kwissekelo esingaphezulu sesevisi ye-Vpm. Ayidingakeli izinhlelo zokusebenza ezejwayelekile."</string> <string name="permlab_bindWallpaper" msgid="8716400279937856462">"hlanganisa kwiphephadonga"</string> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Ivumela umbambi ukuhlanganisa uxhumano nomsebenzisi kwezinga eliphezulu lwephephadonga. Akusoze kwadingeka kwezinhlelo zokusebenza ezivamile."</string> + <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"hlanganisa kusisebenzisani sezwi"</string> + <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Ivumela umbambi ukuhlanganisa isixhumi esibonakalayo sesevisi yokusebenzisana yezwi. Akufanele kudingekele izinhlelo zokusebenza ezivamile."</string> <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"bophezela kusibonisi sesilawuli kude"</string> <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Ivumela umbambi ukuhlanganisa isixhumi esibonakalayo esisezingeni eliphezulu sesibonisi sesilawuli kude. Akumele idingelwe izinhlelo zokusebenza ezijwayelekile."</string> <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bophezela kube isevisi yesinqunjana"</string> @@ -699,6 +723,8 @@ <string name="permdesc_accessNotifications" msgid="458457742683431387">"Ivumela uhlelo lokusebenza ukuthi lithole, lihlole, liphinde lisuse izaziso, ezifaka lezo ezithunyelwe ezinye izinhlelo zokusebenza."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bophezela kwisevisi yomlaleli wesaziso"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Ivumela umbambi ukubophezela kwisixhumi esibonakalayo sezinga eliphezulu lesevisi yomlaleli wesaziso. Akusoze kwadingeka kwizinhlelo zokusebenza ezivamile."</string> + <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"hlanganisa kwisevisi yomhlinzeki wesimo"</string> + <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Ivumela umbambi ukuhlanganisa isixhumi esibonakalayo seleveli ephezulu sesevisi yomhlinzeki wesimo. Akufanele kudingekele izinhlelo zokusebenza ezivamile."</string> <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"buyisela uhlelo lokusebenza lokulungiselelwa okunikezwe yinkampani yenethiwekhi"</string> <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Ivumela umnikazi ukuthi abuyisele uhlelo lokusebenza lokulungiselelwa. Akumele idingelwe izinhlelo zokusebenza ezijwayelekile."</string> <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"Lalela okubonwayo kuzimo zenethiwekhi"</string> @@ -1369,6 +1395,7 @@ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Iphephadonga"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Shintsha iphephadonga"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Umlaleli wesaziso"</string> + <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Umhlinzeki wesimo"</string> <string name="vpn_title" msgid="19615213552042827">"I-VPN isiyasebenza"</string> <string name="vpn_title_long" msgid="6400714798049252294">"i-VPN ivuswe ngu <xliff:g id="APP">%s</xliff:g>"</string> <string name="vpn_text" msgid="3011306607126450322">"Thinta ukuze wengamele inethiwekhi."</string> diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml index f01f10e..305ba28 100644 --- a/core/res/res/values/arrays.xml +++ b/core/res/res/values/arrays.xml @@ -348,4 +348,43 @@ <item>中文 (繁體)</item> </string-array> + <!-- Used by callers to Resources.selectSystemTheme(). Defines the minimum + targetSdkVersion required for the theme style at a given index. + NOTE: Must be sorted in ascending order. --> + <integer-array name="system_theme_sdks"> + <item>0</item> + <item>11</item> + <item>14</item> + <item>21</item> + </integer-array> + + <!-- Used by Resources.selectDefaultTheme(). Defines the default theme style + for the targetSdkVersion at a given index (see system_theme_sdks). + NOTE: Must match number of entries in system_theme_sdks. --> + <array name="system_theme_styles"> + <item>@style/Theme</item> + <item>@style/Theme.Holo</item> + <item>@style/Theme.DeviceDefault</item> + <item>@style/Theme.DeviceDefault.Light.DarkActionBar</item> + </array> + + <!-- Used by ContextImpl for notifications. Defines the default dialog theme + style for the targetSdkVersion at a given index (see system_theme_sdks). + NOTE: Must match number of entries in system_theme_sdks. --> + <array name="system_theme_dialog_styles"> + <item>@style/Theme</item> + <item>@style/Theme.Holo.Dialog</item> + <item>@style/Theme.DeviceDefault.Dialog</item> + <item>@style/Theme.DeviceDefault.Light.Dialog</item> + </array> + + <!-- Used by InputMethodService.onCreate(). Defines the default IME theme + style for the targetSdkVersion at a given index (see system_theme_sdks). + NOTE: Must match number of entries in system_theme_sdks. --> + <array name="system_theme_ime_styles"> + <item>@style/Theme.InputMethod</item> + <item>@style/Theme.Holo.InputMethod</item> + <item>@style/Theme.DeviceDefault.InputMethod</item> + <item>@style/Theme.DeviceDefault.InputMethod</item> + </array> </resources> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index abac60e..e07ebd4 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -462,24 +462,24 @@ transitions between different window content. --> <attr name="windowContentTransitionManager" format="reference" /> - <!-- Reference to a TransitionManager XML resource defining the desired Transition + <!-- Reference to a Transition XML resource defining the desired Transition used to move Views into the initial Window's content Scene. Corresponds to {@link android.view.Window#setEnterTransition(android.transition.Transition)}. --> <attr name="windowEnterTransition" format="reference"/> - <!-- Reference to a TransitionManager XML resource defining the desired Transition + <!-- Reference to a Transition XML resource defining the desired Transition used to move Views out of the Window's content Scene when launching a new Activity. Corresponds to {@link android.view.Window#setExitTransition(android.transition.Transition)}. --> <attr name="windowExitTransition" format="reference"/> - <!-- Reference to a TransitionManager XML resource defining the desired Transition + <!-- Reference to a Transition XML resource defining the desired Transition used to move shared elements transferred into the Window's initial content Scene. Corresponds to {@link android.view.Window#setSharedElementEnterTransition( android.transition.Transition)}. --> <attr name="windowSharedElementEnterTransition" format="reference"/> - <!-- Reference to a TransitionManager XML resource defining the desired Transition + <!-- Reference to a Transition XML resource defining the desired Transition used when starting a new Activity to move shared elements prior to transferring to the called Activity. Corresponds to {@link android.view.Window#setSharedElementExitTransition( @@ -966,7 +966,6 @@ <attr name="colorButtonPressed" format="color" /> <attr name="colorButtonNormalColored" format="color" /> <attr name="colorButtonPressedColored" format="color" /> - </declare-styleable> <!-- **************************************************************** --> @@ -5025,6 +5024,12 @@ <declare-styleable name="TransitionTarget"> <!-- The id of a target on which this transition will animate changes. --> <attr name="targetId" format="reference" /> + <!-- The id of a target to exclude from this transition. --> + <attr name="excludeId" format="reference" /> + <!-- The fully-qualified name of the Class to exclude from this transition. --> + <attr name="excludeClass" format="string" /> + <!-- The fully-qualified name of the Class to include in this transition. --> + <attr name="targetClass" /> </declare-styleable> <!-- Use <code>set</code> as the root tag of the XML resource that @@ -6342,6 +6347,8 @@ <!-- Specifies padding that should be applied to the left and right sides of system-provided items in the bar. --> <attr name="itemPadding" format="dimension" /> + <!-- Set true to hide the action bar on a vertical nested scroll of content. --> + <attr name="hideOnContentScroll" format="boolean" /> </declare-styleable> <declare-styleable name="ActionMode"> diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml index d0c455b..441fd94 100644 --- a/core/res/res/values/colors.xml +++ b/core/res/res/values/colors.xml @@ -148,6 +148,8 @@ <color name="link_text_holo_dark">#5c5cff</color> <color name="link_text_holo_light">#0000ee</color> + <color name="micro_text_light">#434343</color> + <!-- Group buttons --> <eat-comment /> <color name="group_button_dialog_pressed_holo_dark">#46c5c1ff</color> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index f919c9f..624ed73 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1206,6 +1206,12 @@ movement threshold where scrolling should begin. --> <dimen name="config_viewConfigurationTouchSlop">8dp</dimen> + <!-- Minimum velocity to initiate a fling, as measured in dips per second. --> + <dimen name="config_viewMinFlingVelocity">50dp</dimen> + + <!-- Maximum velocity to initiate a fling, as measured in dips per second. --> + <dimen name="config_viewMaxFlingVelocity">8000dp</dimen> + <!-- Maximum number of grid columns permitted in the ResolverActivity used for picking activities to handle an intent. --> <integer name="config_maxResolverActivityColumns">2</integer> diff --git a/core/res/res/values/ids.xml b/core/res/res/values/ids.xml index a79e1fe..889c368 100644 --- a/core/res/res/values/ids.xml +++ b/core/res/res/values/ids.xml @@ -84,4 +84,5 @@ <item type="id" name="scene_layoutid_cache" /> <item type="id" name="shared_element_name" /> <item type="id" name="mask" /> + <item type="id" name="shared_element" /> </resources> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 85ef004..22c2b05 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2162,8 +2162,12 @@ <public type="attr" name="windowAllowExitTransitionOverlap" /> <public type="attr" name="windowAllowEnterTransitionOverlap" /> <public type="attr" name="sessionService" /> + <public type="attr" name="stackViewStyle" /> <public type="attr" name="switchStyle" /> <public type="attr" name="elevation" /> + <public type="attr" name="excludeId" /> + <public type="attr" name="excludeClass" /> + <public type="attr" name="hideOnContentScroll" /> <public-padding type="dimen" name="l_resource_pad" end="0x01050010" /> @@ -2174,18 +2178,29 @@ <public type="id" name="shared_element_name" /> <public type="id" name="mask" /> + <public type="id" name="shared_element" /> <public-padding type="style" name="l_resource_pad" end="0x01030200" /> - <public type="style" name="Widget.Holo.FragmentBreadCrumbs" /> - <public type="style" name="Widget.Holo.Light.FragmentBreadCrumbs" /> - <public type="style" name="Widget.DeviceDefault.FragmentBreadCrumbs" /> - <public type="style" name="Widget.DeviceDefault.Light.FragmentBreadCrumbs" /> <public type="style" name="Widget.FastScroll" /> + <public type="style" name="Widget.StackView" /> + <public type="style" name="Widget.Holo.FastScroll" /> + <public type="style" name="Widget.Holo.FragmentBreadCrumbs" /> + <public type="style" name="Widget.Holo.StackView" /> + + <public type="style" name="Widget.Holo.Light.Button.Borderless" /> <public type="style" name="Widget.Holo.Light.FastScroll" /> + <public type="style" name="Widget.Holo.Light.FragmentBreadCrumbs" /> + <public type="style" name="Widget.Holo.Light.StackView" /> + <public type="style" name="Widget.DeviceDefault.FastScroll" /> + <public type="style" name="Widget.DeviceDefault.FragmentBreadCrumbs" /> + <public type="style" name="Widget.DeviceDefault.StackView" /> + <public type="style" name="Widget.DeviceDefault.Light.FastScroll" /> + <public type="style" name="Widget.DeviceDefault.Light.FragmentBreadCrumbs" /> + <public type="style" name="Widget.DeviceDefault.Light.StackView" /> <public type="style" name="TextAppearance.Quantum" /> <public type="style" name="TextAppearance.Quantum.DialogWindowTitle" /> @@ -2262,7 +2277,6 @@ <public type="style" name="Widget.Quantum.ActionButton" /> <public type="style" name="Widget.Quantum.ActionButton.CloseMode" /> <public type="style" name="Widget.Quantum.ActionButton.Overflow" /> - <public type="style" name="Widget.Quantum.ActionButton.TextButton" /> <public type="style" name="Widget.Quantum.ActionMode" /> <public type="style" name="Widget.Quantum.AutoCompleteTextView" /> <public type="style" name="Widget.Quantum.Button" /> @@ -2271,6 +2285,8 @@ <public type="style" name="Widget.Quantum.Button.Inset" /> <public type="style" name="Widget.Quantum.Button.Small" /> <public type="style" name="Widget.Quantum.Button.Toggle" /> + <public type="style" name="Widget.Quantum.Button.Paper" /> + <public type="style" name="Widget.Quantum.Button.Paper.Color" /> <public type="style" name="Widget.Quantum.ButtonBar" /> <public type="style" name="Widget.Quantum.ButtonBar.AlertDialog" /> <public type="style" name="Widget.Quantum.CalendarView" /> @@ -2305,6 +2321,7 @@ <public type="style" name="Widget.Quantum.ScrollView" /> <public type="style" name="Widget.Quantum.SeekBar" /> <public type="style" name="Widget.Quantum.SegmentedButton" /> + <public type="style" name="Widget.Quantum.StackView" /> <public type="style" name="Widget.Quantum.Spinner" /> <public type="style" name="Widget.Quantum.Tab" /> <public type="style" name="Widget.Quantum.TabWidget" /> @@ -2325,10 +2342,13 @@ <public type="style" name="Widget.Quantum.Light.ActionMode" /> <public type="style" name="Widget.Quantum.Light.AutoCompleteTextView" /> <public type="style" name="Widget.Quantum.Light.Button" /> + <public type="style" name="Widget.Quantum.Light.Button.Borderless" /> <public type="style" name="Widget.Quantum.Light.Button.Borderless.Small" /> <public type="style" name="Widget.Quantum.Light.Button.Inset" /> <public type="style" name="Widget.Quantum.Light.Button.Small" /> <public type="style" name="Widget.Quantum.Light.Button.Toggle" /> + <public type="style" name="Widget.Quantum.Light.Button.Paper" /> + <public type="style" name="Widget.Quantum.Light.Button.Paper.Color" /> <public type="style" name="Widget.Quantum.Light.ButtonBar" /> <public type="style" name="Widget.Quantum.Light.ButtonBar.AlertDialog" /> <public type="style" name="Widget.Quantum.Light.CalendarView" /> @@ -2365,6 +2385,7 @@ <public type="style" name="Widget.Quantum.Light.ScrollView" /> <public type="style" name="Widget.Quantum.Light.SeekBar" /> <public type="style" name="Widget.Quantum.Light.SegmentedButton" /> + <public type="style" name="Widget.Quantum.Light.StackView" /> <public type="style" name="Widget.Quantum.Light.Spinner" /> <public type="style" name="Widget.Quantum.Light.Tab" /> <public type="style" name="Widget.Quantum.Light.TabWidget" /> @@ -2373,12 +2394,6 @@ <public type="style" name="Widget.Quantum.Light.WebTextView" /> <public type="style" name="Widget.Quantum.Light.WebView" /> - <public type="style" name="Widget.Quantum.Button.Paper" /> - <public type="style" name="Widget.Quantum.Button.Paper.Color" /> - - <public type="style" name="Widget.Quantum.Light.Button.Paper" /> - <public type="style" name="Widget.Quantum.Light.Button.Paper.Color" /> - <public type="style" name="TextAppearance.Quantum.Display4" /> <public type="style" name="TextAppearance.Quantum.Display3" /> <public type="style" name="TextAppearance.Quantum.Display2" /> @@ -2392,8 +2407,6 @@ <public type="style" name="TextAppearance.Quantum.Menu" /> <public type="style" name="TextAppearance.Quantum.Button" /> - <public type="style" name="Widget.Holo.Light.Button.Borderless" /> - <public-padding type="interpolator" name="l_resource_pad" end="0x010c0010" /> <!-- An interpolator which accelerates fast but decelerates slowly. --> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 57b2c01..97400b2 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -454,6 +454,12 @@ <!-- Label for the Android system components when they are shown to the user. --> <string name="android_system_label">Android System</string> + <!-- Label for the user owner in the intent forwarding app. --> + <string name="user_owner_label">Personal</string> + + <!-- Label for a corporate profile in the intent forwarding app. --> + <string name="managed_profile_label">Work</string> + <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> <string name="permgrouplab_costMoney">Services that cost you money</string> <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index fc0fccc..37716f7 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -397,6 +397,11 @@ please see styles_device_defaults.xml. <item name="android:disabledAlpha">?android:attr/disabledAlpha</item> </style> + <style name="Widget.StackView"> + <item name="android:resOutColor">@android:color/holo_blue_light</item> + <item name="android:clickColor">@android:color/holo_blue_light</item> + </style> + <style name="Widget.ProgressBar"> <item name="android:indeterminateOnly">true</item> <item name="android:indeterminateDrawable">@android:drawable/progress_medium_white</item> @@ -1609,11 +1614,6 @@ please see styles_device_defaults.xml. <item name="android:minWidth">64dip</item> </style> - <style name="Widget.Holo.StackView"> - <item name="android:resOutColor">@android:color/holo_blue_light</item> - <item name="android:clickColor">@android:color/holo_blue_light</item> - </style> - <style name="Widget.Holo.Button.Borderless"> <item name="android:background">?android:attr/selectableItemBackground</item> <item name="android:paddingStart">4dip</item> @@ -1645,6 +1645,11 @@ please see styles_device_defaults.xml. <item name="android:minHeight">48dip</item> </style> + <style name="Widget.Holo.StackView"> + <item name="android:resOutColor">@android:color/holo_blue_light</item> + <item name="android:clickColor">@android:color/holo_blue_light</item> + </style> + <style name="Holo.ButtonBar" parent="ButtonBar"> <item name="android:paddingTop">0dip</item> <item name="android:paddingStart">0dip</item> @@ -2099,6 +2104,11 @@ please see styles_device_defaults.xml. <item name="android:minHeight">48dip</item> </style> + <style name="Widget.Holo.Light.StackView"> + <item name="android:resOutColor">@android:color/holo_blue_light</item> + <item name="android:clickColor">@android:color/holo_blue_light</item> + </style> + <style name="Holo.Light.ButtonBar" parent="Holo.ButtonBar"> </style> diff --git a/core/res/res/values/styles_device_defaults.xml b/core/res/res/values/styles_device_defaults.xml index 629b2b7..60e06ce 100644 --- a/core/res/res/values/styles_device_defaults.xml +++ b/core/res/res/values/styles_device_defaults.xml @@ -72,7 +72,7 @@ easier. <style name="Widget.DeviceDefault.PopupMenu" parent="Widget.Quantum.PopupMenu"/> <style name="Widget.DeviceDefault.ActionButton" parent="Widget.Quantum.ActionButton"/> <style name="Widget.DeviceDefault.ActionButton.Overflow" parent="Widget.Quantum.ActionButton.Overflow"/> - <style name="Widget.DeviceDefault.ActionButton.TextButton" parent="Widget.Quantum.ActionButton.TextButton"/> + <style name="Widget.DeviceDefault.ActionButton.TextButton" parent="Widget.Quantum.ActionButton"/> <style name="Widget.DeviceDefault.ActionMode" parent="Widget.Quantum.ActionMode"/> <style name="Widget.DeviceDefault.ActionButton.CloseMode" parent="Widget.Quantum.ActionButton.CloseMode"/> <style name="Widget.DeviceDefault.ActionBar" parent="Widget.Quantum.ActionBar"/> @@ -97,6 +97,7 @@ easier. <style name="Widget.DeviceDefault.ImageWell" parent="Widget.Quantum.ImageWell"/> <style name="Widget.DeviceDefault.KeyboardView" parent="Widget.Quantum.KeyboardView"/> <style name="Widget.DeviceDefault.ListView.White" parent="Widget.Quantum.ListView.White"/> + <style name="Widget.DeviceDefault.MediaRouteButton" parent="Widget.Quantum.MediaRouteButton" /> <style name="Widget.DeviceDefault.NumberPicker" parent="Widget.Quantum.NumberPicker"/> <style name="Widget.DeviceDefault.PreferenceFrameLayout" parent="Widget.Quantum.PreferenceFrameLayout"/> <style name="Widget.DeviceDefault.ProgressBar.Inverse" parent="Widget.Quantum.ProgressBar.Inverse"/> @@ -114,11 +115,13 @@ easier. <style name="Widget.DeviceDefault.TextSuggestionsPopupWindow" parent="Widget.Quantum.TextSuggestionsPopupWindow"/> <style name="Widget.DeviceDefault.TextView.ListSeparator" parent="Widget.Quantum.TextView.ListSeparator"/> <style name="Widget.DeviceDefault.TimePicker" parent="Widget.Quantum.TimePicker"/> + <style name="Widget.DeviceDefault.Light" parent="Widget.Quantum.Light"/> <style name="Widget.DeviceDefault.Light.Button" parent="Widget.Quantum.Light.Button"/> <style name="Widget.DeviceDefault.Light.Button.Small" parent="Widget.Quantum.Light.Button.Small"/> <style name="Widget.DeviceDefault.Light.Button.Inset" parent="Widget.Quantum.Light.Button.Inset"/> <style name="Widget.DeviceDefault.Light.Button.Toggle" parent="Widget.Quantum.Light.Button.Toggle"/> + <style name="Widget.DeviceDefault.Light.StackView" parent="Widget.Quantum.Light.StackView"/> <style name="Widget.DeviceDefault.Light.TextView" parent="Widget.Quantum.Light.TextView"/> <style name="Widget.DeviceDefault.Light.CheckedTextView" parent="Widget.Quantum.Light.CheckedTextView"/> <style name="Widget.DeviceDefault.Light.AutoCompleteTextView" parent="Widget.Quantum.Light.AutoCompleteTextView"/> @@ -131,6 +134,7 @@ easier. <style name="Widget.DeviceDefault.Light.GridView" parent="Widget.Quantum.Light.GridView"/> <style name="Widget.DeviceDefault.Light.ImageButton" parent="Widget.Quantum.Light.ImageButton"/> <style name="Widget.DeviceDefault.Light.ListView" parent="Widget.Quantum.Light.ListView"/> + <style name="Widget.DeviceDefault.Light.MediaRouteButton" parent="Widget.Quantum.Light.MediaRouteButton" /> <style name="Widget.DeviceDefault.Light.PopupWindow" parent="Widget.Quantum.Light.PopupWindow"/> <style name="Widget.DeviceDefault.Light.ProgressBar" parent="Widget.Quantum.Light.ProgressBar"/> <style name="Widget.DeviceDefault.Light.ProgressBar.Horizontal" parent="Widget.Quantum.Light.ProgressBar.Horizontal"/> @@ -195,7 +199,6 @@ easier. <style name="Widget.DeviceDefault.Light.TimePicker" parent="Widget.Quantum.Light.TimePicker"/> <style name="Widget.DeviceDefault.Light.TextSuggestionsPopupWindow" parent="Widget.Quantum.Light.TextSuggestionsPopupWindow"/> - <!-- Text Appearance Styles --> <style name="TextAppearance.DeviceDefault" parent="TextAppearance.Quantum"/> <style name="TextAppearance.DeviceDefault.Inverse" parent="TextAppearance.Quantum.Inverse"/> @@ -207,6 +210,8 @@ easier. <style name="TextAppearance.DeviceDefault.Small.Inverse" parent="TextAppearance.Quantum.Small.Inverse"/> <style name="TextAppearance.DeviceDefault.SearchResult.Title" parent="TextAppearance.Quantum.SearchResult.Title"/> <style name="TextAppearance.DeviceDefault.SearchResult.Subtitle" parent="TextAppearance.Quantum.SearchResult.Subtitle"/> + <style name="TextAppearance.DeviceDefault.TimePicker.TimeLabel" parent="TextAppearance.Quantum.TimePicker.TimeLabel"/> + <style name="TextAppearance.DeviceDefault.TimePicker.AmPmLabel" parent="TextAppearance.Quantum.TimePicker.AmPmLabel"/> <style name="TextAppearance.DeviceDefault.Widget" parent="TextAppearance.Quantum.Widget"/> <style name="TextAppearance.DeviceDefault.Widget.Button" parent="TextAppearance.Quantum.Widget.Button"/> <style name="TextAppearance.DeviceDefault.Widget.IconMenu.Item" parent="TextAppearance.Quantum.Widget.IconMenu.Item"/> @@ -235,20 +240,6 @@ easier. <!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. --> <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle.Inverse" parent="TextAppearance.Quantum.Widget.ActionMode.Subtitle.Inverse"/> <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Menu" parent="TextAppearance.Quantum.Widget.ActionBar.Menu"/> - <style name="TextAppearance.DeviceDefault.Light" parent="TextAppearance.Quantum.Light"/> - <style name="TextAppearance.DeviceDefault.Light.Inverse" parent="TextAppearance.Quantum.Light.Inverse"/> - <style name="TextAppearance.DeviceDefault.Light.Large" parent="TextAppearance.Quantum.Light.Large"/> - <style name="TextAppearance.DeviceDefault.Light.Large.Inverse" parent="TextAppearance.Quantum.Light.Large.Inverse"/> - <style name="TextAppearance.DeviceDefault.Light.Medium" parent="TextAppearance.Quantum.Light.Medium"/> - <style name="TextAppearance.DeviceDefault.Light.Medium.Inverse" parent="TextAppearance.Quantum.Light.Medium.Inverse"/> - <style name="TextAppearance.DeviceDefault.Light.SearchResult.Subtitle" parent="TextAppearance.Quantum.Light.SearchResult.Subtitle"/> - <style name="TextAppearance.DeviceDefault.Light.SearchResult.Title" parent="TextAppearance.Quantum.Light.SearchResult.Title"/> - <style name="TextAppearance.DeviceDefault.Light.Small" parent="TextAppearance.Quantum.Light.Small"/> - <style name="TextAppearance.DeviceDefault.Light.Small.Inverse" parent="TextAppearance.Quantum.Light.Small.Inverse"/> - <style name="TextAppearance.DeviceDefault.Light.Widget.Button" parent="TextAppearance.Quantum.Light.Widget.Button"/> - <style name="TextAppearance.DeviceDefault.Light.Widget.PopupMenu.Large" parent="TextAppearance.Quantum.Light.Widget.PopupMenu.Large"/> - <style name="TextAppearance.DeviceDefault.Light.Widget.PopupMenu.Small" parent="TextAppearance.Quantum.Light.Widget.PopupMenu.Small"/> - <!-- Preference Styles --> <style name="Preference.DeviceDefault" parent="Preference.Quantum"/> @@ -262,7 +253,6 @@ easier. <style name="Preference.DeviceDefault.RingtonePreference" parent="Preference.Quantum.RingtonePreference"/> <style name="Preference.DeviceDefault.SwitchPreference" parent="Preference.Quantum.SwitchPreference"/> - <!-- AlertDialog Styles --> <style name="AlertDialog.DeviceDefault" parent="AlertDialog.Quantum"/> <style name="AlertDialog.DeviceDefault.Light" parent="AlertDialog.Quantum.Light"/> @@ -271,32 +261,20 @@ easier. <style name="Animation.DeviceDefault.Activity" parent="Animation.Quantum.Activity"/> <style name="Animation.DeviceDefault.Dialog" parent="Animation.Quantum.Dialog"/> - <!-- DialogWindowTitle Styles --> <style name="DialogWindowTitle.DeviceDefault" parent="DialogWindowTitle.Quantum"/> <style name="DialogWindowTitle.DeviceDefault.Light" parent="DialogWindowTitle.Quantum.Light"/> - <!-- WindowTitle Styles --> <style name="WindowTitle.DeviceDefault" parent="WindowTitle.Quantum"/> <style name="WindowTitleBackground.DeviceDefault" parent="WindowTitleBackground.Quantum"/> - <!-- Other Styles --> <style name="DeviceDefault.ButtonBar" parent="Widget.Quantum.ButtonBar"/> <style name="DeviceDefault.ButtonBar.AlertDialog" parent="Widget.Quantum.ButtonBar.AlertDialog"/> <style name="DeviceDefault.SegmentedButton" parent="Widget.Quantum.SegmentedButton"/> + <style name="DeviceDefault.Light.ButtonBar" parent="Widget.Quantum.Light.ButtonBar"/> <style name="DeviceDefault.Light.ButtonBar.AlertDialog" parent="Widget.Quantum.Light.ButtonBar.AlertDialog"/> <style name="DeviceDefault.Light.SegmentedButton" parent="Widget.Quantum.Light.SegmentedButton"/> - - <style name="Widget.DeviceDefault.MediaRouteButton" parent="Widget.Quantum.MediaRouteButton" /> - <style name="Widget.DeviceDefault.Light.MediaRouteButton" parent="Widget.Quantum.Light.MediaRouteButton" /> - - <style name="TextAppearance.DeviceDefault.TimePicker.TimeLabel" parent="TextAppearance.Quantum.TimePicker.TimeLabel"/> - <style name="TextAppearance.DeviceDefault.Light.TimePicker.TimeLabel" parent="TextAppearance.Quantum.Light.TimePicker.TimeLabel"/> - <style name="TextAppearance.DeviceDefault.TimePicker.AmPmLabel" parent="TextAppearance.Quantum.TimePicker.AmPmLabel"/> - <style name="TextAppearance.DeviceDefault.Light.TimePicker.AmPmLabel" parent="TextAppearance.Quantum.Light.TimePicker.AmPmLabel"/> - <style name="Theme.DeviceDefault.Dialog.TimePicker" parent="Theme.Quantum.Dialog.TimePicker"/> - <style name="Theme.DeviceDefault.Light.Dialog.TimePicker" parent="Theme.Quantum.Light.Dialog.TimePicker"/> </resources> diff --git a/core/res/res/values/styles_micro.xml b/core/res/res/values/styles_micro.xml index 52d90bc..bdaa49d 100644 --- a/core/res/res/values/styles_micro.xml +++ b/core/res/res/values/styles_micro.xml @@ -14,21 +14,44 @@ limitations under the License. --> <resources> + <style name="AlertDialog.Micro" parent="AlertDialog.Holo.Light"> + <item name="layout">@layout/alert_dialog_micro</item> + </style> + + <style name="DialogWindowTitle.Micro"> + <item name="maxLines">1</item> + <item name="scrollHorizontally">true</item> + <item name="textAppearance">@style/TextAppearance.Micro.DialogWindowTitle</item> + </style> + + <style name="TextAppearance.Micro" parent="TextAppearance.Holo"> + <item name="textSize">20sp</item> + <item name="fontFamily">sans-serif-condensed-light</item> + <item name="textColor">@color/micro_text_light</item> + </style> + + <style name="TextAppearance.Micro.DialogWindowTitle" parent="TextAppearance.Holo.DialogWindowTitle"> + <item name="textSize">20sp</item> + <item name="fontFamily">sans-serif-condensed-light</item> + <item name="textColor">@color/micro_text_light</item> + </style> + <style name="Widget.Micro" parent="Widget.Holo" /> <style name="Widget.Micro.TextView"> - <item name="android:fontFamily">sans-serif-condensed</item> + <item name="fontFamily">sans-serif-condensed</item> </style> <style name="Widget.Micro.NumberPicker"> - <item name="android:internalLayout">@android:layout/number_picker_with_selector_wheel_micro</item> - <item name="android:solidColor">@android:color/transparent</item> - <item name="android:selectionDivider">@android:drawable/numberpicker_selection_divider</item> - <item name="android:selectionDividerHeight">0dip</item> - <item name="android:selectionDividersDistance">104dip</item> - <item name="android:internalMinWidth">64dip</item> - <item name="android:internalMaxHeight">180dip</item> - <item name="virtualButtonPressedDrawable">?android:attr/selectableItemBackground</item> - <item name="android:descendantFocusability">blocksDescendants</item> + <item name="internalLayout">@layout/number_picker_with_selector_wheel_micro</item> + <item name="solidColor">@color/transparent</item> + <item name="selectionDivider">@drawable/numberpicker_selection_divider</item> + <item name="selectionDividerHeight">0dip</item> + <item name="selectionDividersDistance">104dip</item> + <item name="internalMinWidth">64dip</item> + <item name="internalMaxHeight">180dip</item> + <item name="virtualButtonPressedDrawable">?attr/selectableItemBackground</item> + <item name="descendantFocusability">blocksDescendants</item> </style> + </resources> diff --git a/core/res/res/values/styles_quantum.xml b/core/res/res/values/styles_quantum.xml index 57f2443..23172c1 100644 --- a/core/res/res/values/styles_quantum.xml +++ b/core/res/res/values/styles_quantum.xml @@ -351,40 +351,6 @@ please see styles_device_defaults.xml. <item name="textStyle">bold</item> </style> - <!-- Light text styles --> - <style name="TextAppearance.Quantum.Light" parent="TextAppearance.Quantum"/> - <style name="TextAppearance.Quantum.Light.Inverse" parent="TextAppearance.Quantum.Inverse"/> - <style name="TextAppearance.Quantum.Light.Large" parent="TextAppearance.Quantum.Large"/> - <style name="TextAppearance.Quantum.Light.Large.Inverse" parent="TextAppearance.Quantum.Large.Inverse"/> - <style name="TextAppearance.Quantum.Light.Medium" parent="TextAppearance.Quantum.Medium"/> - <style name="TextAppearance.Quantum.Light.Medium.Inverse" parent="TextAppearance.Quantum.Medium.Inverse"/> - <style name="TextAppearance.Quantum.Light.Small" parent="TextAppearance.Quantum.Small"/> - <style name="TextAppearance.Quantum.Light.Small.Inverse" parent="TextAppearance.Quantum.Small.Inverse"/> - <style name="TextAppearance.Quantum.Light.SearchResult" parent="TextAppearance.Quantum.SearchResult"/> - <style name="TextAppearance.Quantum.Light.SearchResult.Title" parent="TextAppearance.Quantum.SearchResult.Title"/> - <style name="TextAppearance.Quantum.Light.SearchResult.Subtitle" parent="TextAppearance.Quantum.SearchResult.Subtitle"/> - <style name="TextAppearance.Quantum.Light.Widget" parent="TextAppearance.Quantum.Widget"/> - <style name="TextAppearance.Quantum.Light.Widget.Button" parent="TextAppearance.Quantum.Widget.Button"/> - <style name="TextAppearance.Quantum.Light.Widget.EditText" parent="TextAppearance.Quantum.Widget.EditText"/> - <style name="TextAppearance.Quantum.Light.Widget.Switch" parent="TextAppearance.Quantum.Widget.Switch"/> - <style name="TextAppearance.Quantum.Light.Widget.PopupMenu" parent="TextAppearance.Quantum.Widget.PopupMenu"/> - <style name="TextAppearance.Quantum.Light.Widget.PopupMenu.Large" parent="TextAppearance.Quantum.Widget.PopupMenu.Large"/> - <style name="TextAppearance.Quantum.Light.Widget.PopupMenu.Small" parent="TextAppearance.Quantum.Widget.PopupMenu.Small"/> - <style name="TextAppearance.Quantum.Light.Widget.DropDownHint" parent="TextAppearance.Quantum.Widget.DropDownHint"/> - <style name="TextAppearance.Quantum.Light.Widget.ActionMode.Title" parent="TextAppearance.Quantum.Widget.ActionMode.Title"/> - <style name="TextAppearance.Quantum.Light.Widget.ActionMode.Subtitle" parent="TextAppearance.Quantum.Widget.ActionMode.Subtitle"/> - <style name="TextAppearance.Quantum.Light.WindowTitle" parent="TextAppearance.Quantum.WindowTitle"/> - <style name="TextAppearance.Quantum.Light.DialogWindowTitle" parent="TextAppearance.Quantum.DialogWindowTitle"/> - <style name="TextAppearance.Quantum.Light.CalendarViewWeekDayView" parent="TextAppearance.Quantum.CalendarViewWeekDayView"/> - - <style name="TextAppearance.Quantum.Light.TimePicker.TimeLabel" parent="TextAppearance.Quantum.TimePicker.TimeLabel"> - <item name="textColor">?attr/textColorSecondary</item> - </style> - - <style name="TextAppearance.Quantum.Light.TimePicker.AmPmLabel" parent="TextAppearance.Quantum.TimePicker.AmPmLabel"> - <item name="textColor">?attr/textColorSecondary</item> - </style> - <!-- Widget Styles --> <style name="Quantum"/> @@ -743,8 +709,6 @@ please see styles_device_defaults.xml. <item name="scaleType">center</item> </style> - <style name="Widget.Quantum.ActionButton.TextButton" parent="Widget.Quantum.ButtonBar"/> - <style name="Widget.Quantum.ActionBar.TabView" parent="Widget.ActionBar.TabView"> <item name="background">@drawable/tab_indicator_quantum</item> <item name="paddingStart">16dip</item> @@ -842,6 +806,7 @@ please see styles_device_defaults.xml. <item name="background">@drawable/btn_group_holo_light</item> </style> + <style name="Widget.Quantum.Light.StackView" parent="Widget.Quantum.StackView"/> <style name="Widget.Quantum.Light.TextView" parent="Widget.Quantum.TextView"/> <style name="Widget.Quantum.Light.TextView.ListSeparator" parent="Widget.Quantum.TextView.ListSeparator"/> <style name="Widget.Quantum.Light.TextView.SpinnerItem" parent="Widget.Quantum.TextView.SpinnerItem"/> @@ -861,7 +826,7 @@ please see styles_device_defaults.xml. <style name="Widget.Quantum.Light.CompoundButton.Star" parent="Widget.Quantum.CompoundButton.Star"/> <style name="Widget.Quantum.Light.CompoundButton.Switch" parent="Widget.Quantum.CompoundButton.Switch"> - <item name="switchTextAppearance">@style/TextAppearance.Quantum.Light.Widget.Switch</item> + <item name="switchTextAppearance">@style/TextAppearance.Quantum.Widget.Switch</item> </style> <style name="Widget.Quantum.Light.ListView.DropDown" parent="Widget.Quantum.ListView.DropDown"/> @@ -880,7 +845,7 @@ please see styles_device_defaults.xml. <item name="unfocusedMonthDateColor">#7F08002B</item> <item name="weekNumberColor">#7F080021</item> <item name="weekSeparatorLineColor">#7F08002A</item> - <item name="weekDayTextAppearance">@style/TextAppearance.Quantum.Light.CalendarViewWeekDayView</item> + <item name="weekDayTextAppearance">@style/TextAppearance.Quantum.CalendarViewWeekDayView</item> </style> <style name="Widget.Quantum.Light.NumberPicker" parent="Widget.Quantum.NumberPicker"/> @@ -1058,7 +1023,7 @@ please see styles_device_defaults.xml. </style> <style name="DialogWindowTitle.Quantum.Light"> - <item name="textAppearance">@style/TextAppearance.Quantum.Light.DialogWindowTitle</item> + <item name="textAppearance">@style/TextAppearance.Quantum.DialogWindowTitle</item> </style> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index d4ac74a..516a13b 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -232,7 +232,6 @@ <java-symbol type="attr" name="preferenceFrameLayoutStyle" /> <java-symbol type="attr" name="searchDialogTheme" /> <java-symbol type="attr" name="searchViewSearchIcon" /> - <java-symbol type="attr" name="stackViewStyle" /> <java-symbol type="attr" name="textAppearanceAutoCorrectionSuggestion" /> <java-symbol type="attr" name="textAppearanceEasyCorrectSuggestion" /> <java-symbol type="attr" name="textAppearanceMisspelledSuggestion" /> @@ -328,6 +327,8 @@ <java-symbol type="dimen" name="accessibility_touch_slop" /> <java-symbol type="dimen" name="config_prefDialogWidth" /> <java-symbol type="dimen" name="config_viewConfigurationTouchSlop" /> + <java-symbol type="dimen" name="config_viewMinFlingVelocity" /> + <java-symbol type="dimen" name="config_viewMaxFlingVelocity" /> <java-symbol type="dimen" name="default_app_widget_padding_bottom" /> <java-symbol type="dimen" name="default_app_widget_padding_left" /> <java-symbol type="dimen" name="default_app_widget_padding_right" /> @@ -1624,6 +1625,7 @@ <java-symbol type="string" name="wifi_display_notification_connected_message" /> <java-symbol type="string" name="wifi_display_notification_disconnect" /> <java-symbol type="style" name="Theme.Dialog.AppError" /> + <java-symbol type="style" name="Theme.Micro.Dialog.Alert" /> <java-symbol type="style" name="Theme.Toast" /> <java-symbol type="xml" name="storage_list" /> <java-symbol type="bool" name="config_dreamsSupported" /> @@ -1859,5 +1861,9 @@ <java-symbol type="id" name="icon_frame" /> <java-symbol type="style" name="Animation.VolumePanel" /> <java-symbol type="transition" name="no_transition" /> + <java-symbol type="array" name="system_theme_sdks" /> + <java-symbol type="array" name="system_theme_styles" /> + <java-symbol type="array" name="system_theme_dialog_styles" /> + <java-symbol type="array" name="system_theme_ime_styles" /> </resources> diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml index 0ce5094..80c10dd 100644 --- a/core/res/res/values/themes_device_defaults.xml +++ b/core/res/res/values/themes_device_defaults.xml @@ -51,139 +51,139 @@ easier. --> <style name="Theme.DeviceDefault" parent="Theme.Quantum" > <!-- Text styles --> - <item name="textAppearance">@android:style/TextAppearance.DeviceDefault</item> - <item name="textAppearanceInverse">@android:style/TextAppearance.DeviceDefault.Inverse</item> + <item name="textAppearance">@style/TextAppearance.DeviceDefault</item> + <item name="textAppearanceInverse">@style/TextAppearance.DeviceDefault.Inverse</item> - <item name="textAppearanceLarge">@android:style/TextAppearance.DeviceDefault.Large</item> - <item name="textAppearanceMedium">@android:style/TextAppearance.DeviceDefault.Medium</item> - <item name="textAppearanceSmall">@android:style/TextAppearance.DeviceDefault.Small</item> - <item name="textAppearanceLargeInverse">@android:style/TextAppearance.DeviceDefault.Large.Inverse</item> - <item name="textAppearanceMediumInverse">@android:style/TextAppearance.DeviceDefault.Medium.Inverse</item> - <item name="textAppearanceSmallInverse">@android:style/TextAppearance.DeviceDefault.Small.Inverse</item> - <item name="textAppearanceSearchResultTitle">@android:style/TextAppearance.DeviceDefault.SearchResult.Title</item> - <item name="textAppearanceSearchResultSubtitle">@android:style/TextAppearance.DeviceDefault.SearchResult.Subtitle</item> + <item name="textAppearanceLarge">@style/TextAppearance.DeviceDefault.Large</item> + <item name="textAppearanceMedium">@style/TextAppearance.DeviceDefault.Medium</item> + <item name="textAppearanceSmall">@style/TextAppearance.DeviceDefault.Small</item> + <item name="textAppearanceLargeInverse">@style/TextAppearance.DeviceDefault.Large.Inverse</item> + <item name="textAppearanceMediumInverse">@style/TextAppearance.DeviceDefault.Medium.Inverse</item> + <item name="textAppearanceSmallInverse">@style/TextAppearance.DeviceDefault.Small.Inverse</item> + <item name="textAppearanceSearchResultTitle">@style/TextAppearance.DeviceDefault.SearchResult.Title</item> + <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.DeviceDefault.SearchResult.Subtitle</item> - <item name="textAppearanceButton">@android:style/TextAppearance.DeviceDefault.Widget.Button</item> + <item name="textAppearanceButton">@style/TextAppearance.DeviceDefault.Widget.Button</item> - <item name="textAppearanceLargePopupMenu">@android:style/TextAppearance.DeviceDefault.Widget.PopupMenu.Large</item> - <item name="textAppearanceSmallPopupMenu">@android:style/TextAppearance.DeviceDefault.Widget.PopupMenu.Small</item> + <item name="textAppearanceLargePopupMenu">@style/TextAppearance.DeviceDefault.Widget.PopupMenu.Large</item> + <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.DeviceDefault.Widget.PopupMenu.Small</item> <!-- Button styles --> - <item name="buttonStyle">@android:style/Widget.DeviceDefault.Button</item> + <item name="buttonStyle">@style/Widget.DeviceDefault.Button</item> - <item name="buttonStyleSmall">@android:style/Widget.DeviceDefault.Button.Small</item> - <item name="buttonStyleInset">@android:style/Widget.DeviceDefault.Button.Inset</item> + <item name="buttonStyleSmall">@style/Widget.DeviceDefault.Button.Small</item> + <item name="buttonStyleInset">@style/Widget.DeviceDefault.Button.Inset</item> - <item name="buttonStyleToggle">@android:style/Widget.DeviceDefault.Button.Toggle</item> - <item name="switchStyle">@android:style/Widget.DeviceDefault.CompoundButton.Switch</item> + <item name="buttonStyleToggle">@style/Widget.DeviceDefault.Button.Toggle</item> + <item name="switchStyle">@style/Widget.DeviceDefault.CompoundButton.Switch</item> - <item name="borderlessButtonStyle">@android:style/Widget.DeviceDefault.Button.Borderless</item> + <item name="borderlessButtonStyle">@style/Widget.DeviceDefault.Button.Borderless</item> - <item name="listSeparatorTextViewStyle">@android:style/Widget.DeviceDefault.TextView.ListSeparator</item> + <item name="listSeparatorTextViewStyle">@style/Widget.DeviceDefault.TextView.ListSeparator</item> <!-- Window attributes --> - <item name="windowTitleStyle">@android:style/WindowTitle.DeviceDefault</item> - <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackground.DeviceDefault</item> - <item name="android:windowAnimationStyle">@android:style/Animation.DeviceDefault.Activity</item> + <item name="windowTitleStyle">@style/WindowTitle.DeviceDefault</item> + <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground.DeviceDefault</item> + <item name="windowAnimationStyle">@style/Animation.DeviceDefault.Activity</item> <!-- Dialog attributes --> - <item name="dialogTheme">@android:style/Theme.DeviceDefault.Dialog</item> + <item name="dialogTheme">@style/Theme.DeviceDefault.Dialog</item> <!-- AlertDialog attributes --> - <item name="alertDialogTheme">@android:style/Theme.DeviceDefault.Dialog.Alert</item> - <item name="alertDialogStyle">@android:style/AlertDialog.DeviceDefault</item> + <item name="alertDialogTheme">@style/Theme.DeviceDefault.Dialog.Alert</item> + <item name="alertDialogStyle">@style/AlertDialog.DeviceDefault</item> <!-- Presentation attributes --> - <item name="presentationTheme">@android:style/Theme.DeviceDefault.Dialog.Presentation</item> + <item name="presentationTheme">@style/Theme.DeviceDefault.Dialog.Presentation</item> <!-- Text selection handle attributes --> - <item name="textSelectHandleWindowStyle">@android:style/Widget.DeviceDefault.TextSelectHandle</item> - <item name="textSuggestionsWindowStyle">@android:style/Widget.DeviceDefault.TextSuggestionsPopupWindow</item> + <item name="textSelectHandleWindowStyle">@style/Widget.DeviceDefault.TextSelectHandle</item> + <item name="textSuggestionsWindowStyle">@style/Widget.DeviceDefault.TextSuggestionsPopupWindow</item> <!-- Widget styles --> - <item name="absListViewStyle">@android:style/Widget.DeviceDefault.AbsListView</item> - <item name="autoCompleteTextViewStyle">@android:style/Widget.DeviceDefault.AutoCompleteTextView</item> - <item name="checkboxStyle">@android:style/Widget.DeviceDefault.CompoundButton.CheckBox</item> - <item name="checkedTextViewStyle">@android:style/Widget.DeviceDefault.CheckedTextView</item> - <item name="dropDownListViewStyle">@android:style/Widget.DeviceDefault.ListView.DropDown</item> - <item name="editTextStyle">@android:style/Widget.DeviceDefault.EditText</item> - <item name="expandableListViewStyle">@android:style/Widget.DeviceDefault.ExpandableListView</item> - <item name="expandableListViewWhiteStyle">@android:style/Widget.DeviceDefault.ExpandableListView.White</item> - <item name="galleryStyle">@android:style/Widget.DeviceDefault.Gallery</item> - <item name="gestureOverlayViewStyle">@android:style/Widget.DeviceDefault.GestureOverlayView</item> - <item name="gridViewStyle">@android:style/Widget.DeviceDefault.GridView</item> - <item name="imageButtonStyle">@android:style/Widget.DeviceDefault.ImageButton</item> - <item name="imageWellStyle">@android:style/Widget.DeviceDefault.ImageWell</item> - <item name="listViewStyle">@android:style/Widget.DeviceDefault.ListView</item> - <item name="listViewWhiteStyle">@android:style/Widget.DeviceDefault.ListView.White</item> - <item name="popupWindowStyle">@android:style/Widget.DeviceDefault.PopupWindow</item> - <item name="progressBarStyle">@android:style/Widget.DeviceDefault.ProgressBar</item> - <item name="progressBarStyleHorizontal">@android:style/Widget.DeviceDefault.ProgressBar.Horizontal</item> - <item name="progressBarStyleSmall">@android:style/Widget.DeviceDefault.ProgressBar.Small</item> - <item name="progressBarStyleSmallTitle">@android:style/Widget.DeviceDefault.ProgressBar.Small.Title</item> - <item name="progressBarStyleLarge">@android:style/Widget.DeviceDefault.ProgressBar.Large</item> - <item name="progressBarStyleInverse">@android:style/Widget.DeviceDefault.ProgressBar.Inverse</item> - <item name="progressBarStyleSmallInverse">@android:style/Widget.DeviceDefault.ProgressBar.Small.Inverse</item> - <item name="progressBarStyleLargeInverse">@android:style/Widget.DeviceDefault.ProgressBar.Large.Inverse</item> - <item name="seekBarStyle">@android:style/Widget.DeviceDefault.SeekBar</item> - <item name="ratingBarStyle">@android:style/Widget.DeviceDefault.RatingBar</item> - <item name="ratingBarStyleIndicator">@android:style/Widget.DeviceDefault.RatingBar.Indicator</item> - <item name="ratingBarStyleSmall">@android:style/Widget.DeviceDefault.RatingBar.Small</item> - <item name="radioButtonStyle">@android:style/Widget.DeviceDefault.CompoundButton.RadioButton</item> - <item name="scrollViewStyle">@android:style/Widget.DeviceDefault.ScrollView</item> - <item name="horizontalScrollViewStyle">@android:style/Widget.DeviceDefault.HorizontalScrollView</item> - <item name="dropDownSpinnerStyle">@android:style/Widget.DeviceDefault.Spinner.DropDown</item> - <item name="starStyle">@android:style/Widget.DeviceDefault.CompoundButton.Star</item> - <item name="tabWidgetStyle">@android:style/Widget.DeviceDefault.TabWidget</item> - <item name="textViewStyle">@android:style/Widget.DeviceDefault.TextView</item> - <item name="webTextViewStyle">@android:style/Widget.DeviceDefault.WebTextView</item> - <item name="webViewStyle">@android:style/Widget.DeviceDefault.WebView</item> - <item name="dropDownItemStyle">@android:style/Widget.DeviceDefault.DropDownItem</item> - <item name="spinnerDropDownItemStyle">@android:style/Widget.DeviceDefault.DropDownItem.Spinner</item> - <item name="spinnerItemStyle">@android:style/Widget.DeviceDefault.TextView.SpinnerItem</item> - <item name="dropDownHintAppearance">@android:style/TextAppearance.DeviceDefault.Widget.DropDownHint</item> - <item name="keyboardViewStyle">@android:style/Widget.DeviceDefault.KeyboardView</item> - <item name="quickContactBadgeStyleWindowSmall">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowSmall</item> - <item name="quickContactBadgeStyleWindowMedium">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowMedium</item> - <item name="quickContactBadgeStyleWindowLarge">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowLarge</item> - <item name="quickContactBadgeStyleSmallWindowSmall">@android:style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowSmall</item> - <item name="quickContactBadgeStyleSmallWindowMedium">@android:style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowMedium</item> - <item name="quickContactBadgeStyleSmallWindowLarge">@android:style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowLarge</item> - <item name="listPopupWindowStyle">@android:style/Widget.DeviceDefault.ListPopupWindow</item> - <item name="popupMenuStyle">@android:style/Widget.DeviceDefault.PopupMenu</item> - <item name="stackViewStyle">@android:style/Widget.DeviceDefault.StackView</item> + <item name="absListViewStyle">@style/Widget.DeviceDefault.AbsListView</item> + <item name="autoCompleteTextViewStyle">@style/Widget.DeviceDefault.AutoCompleteTextView</item> + <item name="checkboxStyle">@style/Widget.DeviceDefault.CompoundButton.CheckBox</item> + <item name="checkedTextViewStyle">@style/Widget.DeviceDefault.CheckedTextView</item> + <item name="dropDownListViewStyle">@style/Widget.DeviceDefault.ListView.DropDown</item> + <item name="editTextStyle">@style/Widget.DeviceDefault.EditText</item> + <item name="expandableListViewStyle">@style/Widget.DeviceDefault.ExpandableListView</item> + <item name="expandableListViewWhiteStyle">@style/Widget.DeviceDefault.ExpandableListView.White</item> + <item name="galleryStyle">@style/Widget.DeviceDefault.Gallery</item> + <item name="gestureOverlayViewStyle">@style/Widget.DeviceDefault.GestureOverlayView</item> + <item name="gridViewStyle">@style/Widget.DeviceDefault.GridView</item> + <item name="imageButtonStyle">@style/Widget.DeviceDefault.ImageButton</item> + <item name="imageWellStyle">@style/Widget.DeviceDefault.ImageWell</item> + <item name="listViewStyle">@style/Widget.DeviceDefault.ListView</item> + <item name="listViewWhiteStyle">@style/Widget.DeviceDefault.ListView.White</item> + <item name="popupWindowStyle">@style/Widget.DeviceDefault.PopupWindow</item> + <item name="progressBarStyle">@style/Widget.DeviceDefault.ProgressBar</item> + <item name="progressBarStyleHorizontal">@style/Widget.DeviceDefault.ProgressBar.Horizontal</item> + <item name="progressBarStyleSmall">@style/Widget.DeviceDefault.ProgressBar.Small</item> + <item name="progressBarStyleSmallTitle">@style/Widget.DeviceDefault.ProgressBar.Small.Title</item> + <item name="progressBarStyleLarge">@style/Widget.DeviceDefault.ProgressBar.Large</item> + <item name="progressBarStyleInverse">@style/Widget.DeviceDefault.ProgressBar.Inverse</item> + <item name="progressBarStyleSmallInverse">@style/Widget.DeviceDefault.ProgressBar.Small.Inverse</item> + <item name="progressBarStyleLargeInverse">@style/Widget.DeviceDefault.ProgressBar.Large.Inverse</item> + <item name="seekBarStyle">@style/Widget.DeviceDefault.SeekBar</item> + <item name="ratingBarStyle">@style/Widget.DeviceDefault.RatingBar</item> + <item name="ratingBarStyleIndicator">@style/Widget.DeviceDefault.RatingBar.Indicator</item> + <item name="ratingBarStyleSmall">@style/Widget.DeviceDefault.RatingBar.Small</item> + <item name="radioButtonStyle">@style/Widget.DeviceDefault.CompoundButton.RadioButton</item> + <item name="scrollViewStyle">@style/Widget.DeviceDefault.ScrollView</item> + <item name="horizontalScrollViewStyle">@style/Widget.DeviceDefault.HorizontalScrollView</item> + <item name="dropDownSpinnerStyle">@style/Widget.DeviceDefault.Spinner.DropDown</item> + <item name="starStyle">@style/Widget.DeviceDefault.CompoundButton.Star</item> + <item name="tabWidgetStyle">@style/Widget.DeviceDefault.TabWidget</item> + <item name="textViewStyle">@style/Widget.DeviceDefault.TextView</item> + <item name="webTextViewStyle">@style/Widget.DeviceDefault.WebTextView</item> + <item name="webViewStyle">@style/Widget.DeviceDefault.WebView</item> + <item name="dropDownItemStyle">@style/Widget.DeviceDefault.DropDownItem</item> + <item name="spinnerDropDownItemStyle">@style/Widget.DeviceDefault.DropDownItem.Spinner</item> + <item name="spinnerItemStyle">@style/Widget.DeviceDefault.TextView.SpinnerItem</item> + <item name="dropDownHintAppearance">@style/TextAppearance.DeviceDefault.Widget.DropDownHint</item> + <item name="keyboardViewStyle">@style/Widget.DeviceDefault.KeyboardView</item> + <item name="quickContactBadgeStyleWindowSmall">@style/Widget.DeviceDefault.QuickContactBadge.WindowSmall</item> + <item name="quickContactBadgeStyleWindowMedium">@style/Widget.DeviceDefault.QuickContactBadge.WindowMedium</item> + <item name="quickContactBadgeStyleWindowLarge">@style/Widget.DeviceDefault.QuickContactBadge.WindowLarge</item> + <item name="quickContactBadgeStyleSmallWindowSmall">@style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowSmall</item> + <item name="quickContactBadgeStyleSmallWindowMedium">@style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowMedium</item> + <item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowLarge</item> + <item name="listPopupWindowStyle">@style/Widget.DeviceDefault.ListPopupWindow</item> + <item name="popupMenuStyle">@style/Widget.DeviceDefault.PopupMenu</item> + <item name="stackViewStyle">@style/Widget.DeviceDefault.StackView</item> <!-- Preference styles --> - <item name="preferenceScreenStyle">@android:style/Preference.DeviceDefault.PreferenceScreen</item> - <item name="preferenceCategoryStyle">@android:style/Preference.DeviceDefault.Category</item> - <item name="preferenceStyle">@android:style/Preference.DeviceDefault</item> - <item name="preferenceInformationStyle">@android:style/Preference.DeviceDefault.Information</item> - <item name="checkBoxPreferenceStyle">@android:style/Preference.DeviceDefault.CheckBoxPreference</item> - <item name="switchPreferenceStyle">@android:style/Preference.DeviceDefault.SwitchPreference</item> - <item name="yesNoPreferenceStyle">@android:style/Preference.DeviceDefault.DialogPreference.YesNoPreference</item> - <item name="dialogPreferenceStyle">@android:style/Preference.DeviceDefault.DialogPreference</item> - <item name="editTextPreferenceStyle">@android:style/Preference.DeviceDefault.DialogPreference.EditTextPreference</item> - <item name="ringtonePreferenceStyle">@android:style/Preference.DeviceDefault.RingtonePreference</item> + <item name="preferenceScreenStyle">@style/Preference.DeviceDefault.PreferenceScreen</item> + <item name="preferenceCategoryStyle">@style/Preference.DeviceDefault.Category</item> + <item name="preferenceStyle">@style/Preference.DeviceDefault</item> + <item name="preferenceInformationStyle">@style/Preference.DeviceDefault.Information</item> + <item name="checkBoxPreferenceStyle">@style/Preference.DeviceDefault.CheckBoxPreference</item> + <item name="switchPreferenceStyle">@style/Preference.DeviceDefault.SwitchPreference</item> + <item name="yesNoPreferenceStyle">@style/Preference.DeviceDefault.DialogPreference.YesNoPreference</item> + <item name="dialogPreferenceStyle">@style/Preference.DeviceDefault.DialogPreference</item> + <item name="editTextPreferenceStyle">@style/Preference.DeviceDefault.DialogPreference.EditTextPreference</item> + <item name="ringtonePreferenceStyle">@style/Preference.DeviceDefault.RingtonePreference</item> <!-- Action bar styles --> - <item name="actionDropDownStyle">@android:style/Widget.DeviceDefault.Spinner.DropDown.ActionBar</item> - <item name="actionButtonStyle">@android:style/Widget.DeviceDefault.ActionButton</item> - <item name="actionOverflowButtonStyle">@android:style/Widget.DeviceDefault.ActionButton.Overflow</item> + <item name="actionDropDownStyle">@style/Widget.DeviceDefault.Spinner.DropDown.ActionBar</item> + <item name="actionButtonStyle">@style/Widget.DeviceDefault.ActionButton</item> + <item name="actionOverflowButtonStyle">@style/Widget.DeviceDefault.ActionButton.Overflow</item> <item name="actionBarTabStyle">@style/Widget.DeviceDefault.ActionBar.TabView</item> <item name="actionBarTabBarStyle">@style/Widget.DeviceDefault.ActionBar.TabBar</item> <item name="actionBarTabTextStyle">@style/Widget.DeviceDefault.ActionBar.TabText</item> <item name="actionModeStyle">@style/Widget.DeviceDefault.ActionMode</item> <item name="actionModeCloseButtonStyle">@style/Widget.DeviceDefault.ActionButton.CloseMode</item> - <item name="actionBarStyle">@android:style/Widget.DeviceDefault.ActionBar</item> - <item name="actionModePopupWindowStyle">@android:style/Widget.DeviceDefault.PopupWindow.ActionMode</item> + <item name="actionBarStyle">@style/Widget.DeviceDefault.ActionBar</item> + <item name="actionModePopupWindowStyle">@style/Widget.DeviceDefault.PopupWindow.ActionMode</item> - <item name="buttonBarStyle">@android:style/DeviceDefault.ButtonBar</item> - <item name="segmentedButtonStyle">@android:style/DeviceDefault.SegmentedButton</item> + <item name="buttonBarStyle">@style/DeviceDefault.ButtonBar</item> + <item name="segmentedButtonStyle">@style/DeviceDefault.SegmentedButton</item> <item name="searchDialogTheme">@style/Theme.DeviceDefault.SearchBar</item> <!-- PreferenceFrameLayout attributes --> - <item name="preferenceFrameLayoutStyle">@android:style/Widget.DeviceDefault.PreferenceFrameLayout</item> + <item name="preferenceFrameLayoutStyle">@style/Widget.DeviceDefault.PreferenceFrameLayout</item> <!-- NumberPicker style--> <item name="numberPickerStyle">@style/Widget.DeviceDefault.NumberPicker</item> @@ -201,165 +201,240 @@ easier. <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.DeviceDefault.TimePicker.AmPmLabel</item> <!-- TimePicker dialog theme --> - <item name="timePickerDialogTheme">@android:style/Theme.DeviceDefault.Dialog.TimePicker</item> + <item name="timePickerDialogTheme">@style/Theme.DeviceDefault.Dialog.TimePicker</item> <!-- DatePicker style --> <item name="datePickerStyle">@style/Widget.DeviceDefault.DatePicker</item> - <item name="mediaRouteButtonStyle">@android:style/Widget.DeviceDefault.MediaRouteButton</item> + <item name="mediaRouteButtonStyle">@style/Widget.DeviceDefault.MediaRouteButton</item> </style> <!-- Variant of {@link #Theme_DeviceDefault} with no action bar --> - <style name="Theme.DeviceDefault.NoActionBar" parent="Theme.Quantum.NoActionBar" > - </style> + <style name="Theme.DeviceDefault.NoActionBar" parent="Theme.Quantum.NoActionBar" /> <!-- Variant of {@link #Theme_DeviceDefault} with no action bar and no status bar. This theme sets {@link android.R.attr#windowFullscreen} to true. --> - <style name="Theme.DeviceDefault.NoActionBar.Fullscreen" parent="Theme.Quantum.NoActionBar.Fullscreen" > - </style> + <style name="Theme.DeviceDefault.NoActionBar.Fullscreen" parent="Theme.Quantum.NoActionBar.Fullscreen" /> <!-- Variant of {@link #Theme_DeviceDefault} with no action bar and no status bar and extending in to overscan region. This theme sets {@link android.R.attr#windowFullscreen} and {@link android.R.attr#windowOverscan} to true. --> - <style name="Theme.DeviceDefault.NoActionBar.Overscan" parent="Theme.Quantum.NoActionBar.Overscan" > - </style> + <style name="Theme.DeviceDefault.NoActionBar.Overscan" parent="Theme.Quantum.NoActionBar.Overscan" /> <!-- Variant of {@link #Theme_DeviceDefault} that has no title bar and translucent system decor. This theme sets {@link android.R.attr#windowTranslucentStatus} and {@link android.R.attr#windowTranslucentNavigation} to true. --> - <style name="Theme.DeviceDefault.NoActionBar.TranslucentDecor" parent="Theme.Quantum.NoActionBar.TranslucentDecor" > + <style name="Theme.DeviceDefault.NoActionBar.TranslucentDecor" parent="Theme.Quantum.NoActionBar.TranslucentDecor" /> + + <!-- DeviceDefault theme for dialog windows and activities. This changes the window to be + floating (not fill the entire screen), and puts a frame around its contents. You can set this + theme on an activity if you would like to make an activity that looks like a Dialog. --> + <style name="Theme.DeviceDefault.Dialog" parent="Theme.Quantum.Dialog" > + <item name="windowTitleStyle">@style/DialogWindowTitle.DeviceDefault</item> + <item name="windowAnimationStyle">@style/Animation.DeviceDefault.Dialog</item> + + <item name="buttonBarStyle">@style/DeviceDefault.ButtonBar.AlertDialog</item> + <item name="borderlessButtonStyle">@style/Widget.DeviceDefault.Button.Borderless.Small</item> + + <item name="textAppearance">@style/TextAppearance.DeviceDefault</item> + <item name="textAppearanceInverse">@style/TextAppearance.DeviceDefault.Inverse</item> + </style> + + <!-- Variant of {@link #Theme_DeviceDefault_Dialog} that has a nice minimum width for a + regular dialog. --> + <style name="Theme.DeviceDefault.Dialog.MinWidth" parent="Theme.Quantum.Dialog.MinWidth" /> + + <!-- Variant of {@link #Theme_DeviceDefault_Dialog} without an action bar --> + <style name="Theme.DeviceDefault.Dialog.NoActionBar" parent="Theme.Quantum.Dialog.NoActionBar" /> + + <!-- Variant of {@link #Theme_DeviceDefault_Dialog_NoActionBar} that has a nice minimum width + for a regular dialog. --> + <style name="Theme.DeviceDefault.Dialog.NoActionBar.MinWidth" parent="Theme.Quantum.Dialog.NoActionBar.MinWidth" /> + + <!-- Variant of Theme.DeviceDefault.Dialog that has a fixed size. --> + <style name="Theme.DeviceDefault.Dialog.FixedSize"> + <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item> + <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item> + <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item> + <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item> + </style> + + <!-- Variant of Theme.DeviceDefault.Dialog.NoActionBar that has a fixed size. --> + <style name="Theme.DeviceDefault.Dialog.NoActionBar.FixedSize"> + <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item> + <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item> + <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item> + <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item> + </style> + + <!-- DeviceDefault theme for a window that will be displayed either full-screen on smaller + screens (small, normal) or as a dialog on larger screens (large, xlarge). --> + <style name="Theme.DeviceDefault.DialogWhenLarge" parent="Theme.Quantum.DialogWhenLarge" /> + + <!-- DeviceDefault theme for a window without an action bar that will be displayed either + full-screen on smaller screens (small, normal) or as a dialog on larger screens (large, + xlarge). --> + <style name="Theme.DeviceDefault.DialogWhenLarge.NoActionBar" parent="Theme.Quantum.DialogWhenLarge.NoActionBar" /> + + <!-- DeviceDefault theme for a presentation window on a secondary display. --> + <style name="Theme.DeviceDefault.Dialog.Presentation" parent="Theme.Quantum.Dialog.Presentation" /> + + <style name="Theme.DeviceDefault.Dialog.TimePicker" parent="Theme.Quantum.Dialog.TimePicker"/> + + <!-- DeviceDefault theme for panel windows. This removes all extraneous window + decorations, so you basically have an empty rectangle in which to place your content. It makes + the window floating, with a transparent background, and turns off dimming behind the window. --> + <style name="Theme.DeviceDefault.Panel" parent="Theme.Quantum.Panel" /> + + <!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear + behind them. --> + <style name="Theme.DeviceDefault.Wallpaper" parent="Theme.Quantum.Wallpaper" /> + + <!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear + behind them and without an action bar. --> + <style name="Theme.DeviceDefault.Wallpaper.NoTitleBar" parent="Theme.Quantum.Wallpaper.NoTitleBar" /> + + <!-- DeviceDefault style for input methods, which is used by the + {@link android.inputmethodservice.InputMethodService} class.--> + <style name="Theme.DeviceDefault.InputMethod" parent="Theme.Quantum.InputMethod" /> + + <style name="Theme.DeviceDefault.Dialog.Alert" parent="Theme.Quantum.Dialog.Alert"> + <item name="windowTitleStyle">@style/DialogWindowTitle.DeviceDefault</item> </style> + <style name="Theme.DeviceDefault.SearchBar" parent="Theme.Quantum.SearchBar" /> + <style name="Theme.DeviceDefault.Dialog.NoFrame" parent="Theme.Quantum.Dialog.NoFrame" /> + <!-- Variant of {@link #Theme_DeviceDefault} with a light-colored style --> <style name="Theme.DeviceDefault.Light" parent="Theme.Quantum.Light" > <!-- Text styles --> - <item name="textAppearance">@android:style/TextAppearance.DeviceDefault.Light</item> - <item name="textAppearanceInverse">@android:style/TextAppearance.DeviceDefault.Light.Inverse</item> + <item name="textAppearance">@style/TextAppearance.DeviceDefault</item> + <item name="textAppearanceInverse">@style/TextAppearance.DeviceDefault.Inverse</item> - <item name="textAppearanceLarge">@android:style/TextAppearance.DeviceDefault.Light.Large</item> - <item name="textAppearanceMedium">@android:style/TextAppearance.DeviceDefault.Light.Medium</item> - <item name="textAppearanceSmall">@android:style/TextAppearance.DeviceDefault.Light.Small</item> - <item name="textAppearanceLargeInverse">@android:style/TextAppearance.DeviceDefault.Light.Large.Inverse</item> - <item name="textAppearanceMediumInverse">@android:style/TextAppearance.DeviceDefault.Light.Medium.Inverse</item> - <item name="textAppearanceSmallInverse">@android:style/TextAppearance.DeviceDefault.Light.Small.Inverse</item> - <item name="textAppearanceSearchResultTitle">@android:style/TextAppearance.DeviceDefault.Light.SearchResult.Title</item> - <item name="textAppearanceSearchResultSubtitle">@android:style/TextAppearance.DeviceDefault.Light.SearchResult.Subtitle</item> + <item name="textAppearanceLarge">@style/TextAppearance.DeviceDefault.Large</item> + <item name="textAppearanceMedium">@style/TextAppearance.DeviceDefault.Medium</item> + <item name="textAppearanceSmall">@style/TextAppearance.DeviceDefault.Small</item> + <item name="textAppearanceLargeInverse">@style/TextAppearance.DeviceDefault.Large.Inverse</item> + <item name="textAppearanceMediumInverse">@style/TextAppearance.DeviceDefault.Medium.Inverse</item> + <item name="textAppearanceSmallInverse">@style/TextAppearance.DeviceDefault.Small.Inverse</item> + <item name="textAppearanceSearchResultTitle">@style/TextAppearance.DeviceDefault.SearchResult.Title</item> + <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.DeviceDefault.SearchResult.Subtitle</item> - <item name="textAppearanceButton">@android:style/TextAppearance.DeviceDefault.Light.Widget.Button</item> + <item name="textAppearanceButton">@style/TextAppearance.DeviceDefault.Widget.Button</item> - <item name="textAppearanceLargePopupMenu">@android:style/TextAppearance.DeviceDefault.Light.Widget.PopupMenu.Large</item> - <item name="textAppearanceSmallPopupMenu">@android:style/TextAppearance.DeviceDefault.Light.Widget.PopupMenu.Small</item> + <item name="textAppearanceLargePopupMenu">@style/TextAppearance.DeviceDefault.Widget.PopupMenu.Large</item> + <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.DeviceDefault.Widget.PopupMenu.Small</item> <!-- Button styles --> - <item name="buttonStyle">@android:style/Widget.DeviceDefault.Light.Button</item> + <item name="buttonStyle">@style/Widget.DeviceDefault.Light.Button</item> - <item name="buttonStyleSmall">@android:style/Widget.DeviceDefault.Light.Button.Small</item> - <item name="buttonStyleInset">@android:style/Widget.DeviceDefault.Light.Button.Inset</item> + <item name="buttonStyleSmall">@style/Widget.DeviceDefault.Light.Button.Small</item> + <item name="buttonStyleInset">@style/Widget.DeviceDefault.Light.Button.Inset</item> - <item name="buttonStyleToggle">@android:style/Widget.DeviceDefault.Light.Button.Toggle</item> + <item name="buttonStyleToggle">@style/Widget.DeviceDefault.Light.Button.Toggle</item> - <item name="borderlessButtonStyle">@android:style/Widget.DeviceDefault.Light.Button.Borderless</item> + <item name="borderlessButtonStyle">@style/Widget.DeviceDefault.Light.Button.Borderless</item> - <item name="listSeparatorTextViewStyle">@android:style/Widget.DeviceDefault.Light.TextView.ListSeparator</item> + <item name="listSeparatorTextViewStyle">@style/Widget.DeviceDefault.Light.TextView.ListSeparator</item> - <item name="windowTitleStyle">@android:style/WindowTitle.DeviceDefault</item> - <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackground.DeviceDefault</item> - <item name="android:windowAnimationStyle">@android:style/Animation.DeviceDefault.Activity</item> + <item name="windowTitleStyle">@style/WindowTitle.DeviceDefault</item> + <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground.DeviceDefault</item> + <item name="windowAnimationStyle">@style/Animation.DeviceDefault.Activity</item> <!-- Dialog attributes --> - <item name="dialogTheme">@android:style/Theme.DeviceDefault.Light.Dialog</item> + <item name="dialogTheme">@style/Theme.DeviceDefault.Light.Dialog</item> <!-- AlertDialog attributes --> - <item name="alertDialogTheme">@android:style/Theme.DeviceDefault.Light.Dialog.Alert</item> - <item name="alertDialogStyle">@android:style/AlertDialog.DeviceDefault.Light</item> + <item name="alertDialogTheme">@style/Theme.DeviceDefault.Light.Dialog.Alert</item> + <item name="alertDialogStyle">@style/AlertDialog.DeviceDefault.Light</item> <!-- Presentation attributes --> - <item name="presentationTheme">@android:style/Theme.DeviceDefault.Light.Dialog.Presentation</item> + <item name="presentationTheme">@style/Theme.DeviceDefault.Light.Dialog.Presentation</item> <!-- Text selection handle attributes --> - <item name="textSelectHandleWindowStyle">@android:style/Widget.DeviceDefault.TextSelectHandle</item> - <item name="textSuggestionsWindowStyle">@android:style/Widget.DeviceDefault.Light.TextSuggestionsPopupWindow</item> + <item name="textSelectHandleWindowStyle">@style/Widget.DeviceDefault.TextSelectHandle</item> + <item name="textSuggestionsWindowStyle">@style/Widget.DeviceDefault.Light.TextSuggestionsPopupWindow</item> <!-- Widget styles --> - <item name="absListViewStyle">@android:style/Widget.DeviceDefault.Light.AbsListView</item> - <item name="autoCompleteTextViewStyle">@android:style/Widget.DeviceDefault.Light.AutoCompleteTextView</item> - <item name="checkboxStyle">@android:style/Widget.DeviceDefault.Light.CompoundButton.CheckBox</item> - <item name="checkedTextViewStyle">@android:style/Widget.DeviceDefault.Light.CheckedTextView</item> - <item name="dropDownListViewStyle">@android:style/Widget.DeviceDefault.Light.ListView.DropDown</item> - <item name="editTextStyle">@android:style/Widget.DeviceDefault.Light.EditText</item> - <item name="expandableListViewStyle">@android:style/Widget.DeviceDefault.Light.ExpandableListView</item> - <item name="expandableListViewWhiteStyle">@android:style/Widget.DeviceDefault.Light.ExpandableListView.White</item> - <item name="galleryStyle">@android:style/Widget.DeviceDefault.Light.Gallery</item> - <item name="gestureOverlayViewStyle">@android:style/Widget.DeviceDefault.Light.GestureOverlayView</item> - <item name="gridViewStyle">@android:style/Widget.DeviceDefault.Light.GridView</item> - <item name="imageButtonStyle">@android:style/Widget.DeviceDefault.Light.ImageButton</item> - <item name="imageWellStyle">@android:style/Widget.DeviceDefault.Light.ImageWell</item> - <item name="listViewStyle">@android:style/Widget.DeviceDefault.Light.ListView</item> - <item name="listViewWhiteStyle">@android:style/Widget.DeviceDefault.Light.ListView.White</item> - <item name="popupWindowStyle">@android:style/Widget.DeviceDefault.Light.PopupWindow</item> - <item name="progressBarStyle">@android:style/Widget.DeviceDefault.Light.ProgressBar</item> - <item name="progressBarStyleHorizontal">@android:style/Widget.DeviceDefault.Light.ProgressBar.Horizontal</item> - <item name="progressBarStyleSmall">@android:style/Widget.DeviceDefault.Light.ProgressBar.Small</item> - <item name="progressBarStyleSmallTitle">@android:style/Widget.DeviceDefault.Light.ProgressBar.Small.Title</item> - <item name="progressBarStyleLarge">@android:style/Widget.DeviceDefault.Light.ProgressBar.Large</item> - <item name="progressBarStyleInverse">@android:style/Widget.DeviceDefault.Light.ProgressBar.Inverse</item> - <item name="progressBarStyleSmallInverse">@android:style/Widget.DeviceDefault.Light.ProgressBar.Small.Inverse</item> - <item name="progressBarStyleLargeInverse">@android:style/Widget.DeviceDefault.Light.ProgressBar.Large.Inverse</item> - <item name="seekBarStyle">@android:style/Widget.DeviceDefault.Light.SeekBar</item> - <item name="ratingBarStyle">@android:style/Widget.DeviceDefault.Light.RatingBar</item> - <item name="ratingBarStyleIndicator">@android:style/Widget.DeviceDefault.Light.RatingBar.Indicator</item> - <item name="ratingBarStyleSmall">@android:style/Widget.DeviceDefault.Light.RatingBar.Small</item> - <item name="radioButtonStyle">@android:style/Widget.DeviceDefault.Light.CompoundButton.RadioButton</item> - <item name="scrollViewStyle">@android:style/Widget.DeviceDefault.Light.ScrollView</item> - <item name="horizontalScrollViewStyle">@android:style/Widget.DeviceDefault.Light.HorizontalScrollView</item> - <item name="dropDownSpinnerStyle">@android:style/Widget.DeviceDefault.Light.Spinner.DropDown</item> - <item name="starStyle">@android:style/Widget.DeviceDefault.Light.CompoundButton.Star</item> - <item name="tabWidgetStyle">@android:style/Widget.DeviceDefault.Light.TabWidget</item> - <item name="textViewStyle">@android:style/Widget.DeviceDefault.Light.TextView</item> - <item name="webTextViewStyle">@android:style/Widget.DeviceDefault.Light.WebTextView</item> - <item name="webViewStyle">@android:style/Widget.DeviceDefault.Light.WebView</item> - <item name="dropDownItemStyle">@android:style/Widget.DeviceDefault.Light.DropDownItem</item> - <item name="spinnerDropDownItemStyle">@android:style/Widget.DeviceDefault.Light.DropDownItem.Spinner</item> - <item name="spinnerItemStyle">@android:style/Widget.DeviceDefault.Light.TextView.SpinnerItem</item> - <item name="dropDownHintAppearance">@android:style/TextAppearance.DeviceDefault.Widget.DropDownHint</item> - <item name="keyboardViewStyle">@android:style/Widget.DeviceDefault.KeyboardView</item> - <item name="quickContactBadgeStyleWindowSmall">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowSmall</item> - <item name="quickContactBadgeStyleWindowMedium">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowMedium</item> - <item name="quickContactBadgeStyleWindowLarge">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowLarge</item> - <item name="quickContactBadgeStyleSmallWindowSmall">@android:style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowSmall</item> - <item name="quickContactBadgeStyleSmallWindowMedium">@android:style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowMedium</item> - <item name="quickContactBadgeStyleSmallWindowLarge">@android:style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowLarge</item> - <item name="listPopupWindowStyle">@android:style/Widget.DeviceDefault.Light.ListPopupWindow</item> - <item name="popupMenuStyle">@android:style/Widget.DeviceDefault.Light.PopupMenu</item> - <item name="stackViewStyle">@android:style/Widget.DeviceDefault.StackView</item> + <item name="absListViewStyle">@style/Widget.DeviceDefault.Light.AbsListView</item> + <item name="autoCompleteTextViewStyle">@style/Widget.DeviceDefault.Light.AutoCompleteTextView</item> + <item name="checkboxStyle">@style/Widget.DeviceDefault.Light.CompoundButton.CheckBox</item> + <item name="checkedTextViewStyle">@style/Widget.DeviceDefault.Light.CheckedTextView</item> + <item name="dropDownListViewStyle">@style/Widget.DeviceDefault.Light.ListView.DropDown</item> + <item name="editTextStyle">@style/Widget.DeviceDefault.Light.EditText</item> + <item name="expandableListViewStyle">@style/Widget.DeviceDefault.Light.ExpandableListView</item> + <item name="expandableListViewWhiteStyle">@style/Widget.DeviceDefault.Light.ExpandableListView.White</item> + <item name="galleryStyle">@style/Widget.DeviceDefault.Light.Gallery</item> + <item name="gestureOverlayViewStyle">@style/Widget.DeviceDefault.Light.GestureOverlayView</item> + <item name="gridViewStyle">@style/Widget.DeviceDefault.Light.GridView</item> + <item name="imageButtonStyle">@style/Widget.DeviceDefault.Light.ImageButton</item> + <item name="imageWellStyle">@style/Widget.DeviceDefault.Light.ImageWell</item> + <item name="listViewStyle">@style/Widget.DeviceDefault.Light.ListView</item> + <item name="listViewWhiteStyle">@style/Widget.DeviceDefault.Light.ListView.White</item> + <item name="popupWindowStyle">@style/Widget.DeviceDefault.Light.PopupWindow</item> + <item name="progressBarStyle">@style/Widget.DeviceDefault.Light.ProgressBar</item> + <item name="progressBarStyleHorizontal">@style/Widget.DeviceDefault.Light.ProgressBar.Horizontal</item> + <item name="progressBarStyleSmall">@style/Widget.DeviceDefault.Light.ProgressBar.Small</item> + <item name="progressBarStyleSmallTitle">@style/Widget.DeviceDefault.Light.ProgressBar.Small.Title</item> + <item name="progressBarStyleLarge">@style/Widget.DeviceDefault.Light.ProgressBar.Large</item> + <item name="progressBarStyleInverse">@style/Widget.DeviceDefault.Light.ProgressBar.Inverse</item> + <item name="progressBarStyleSmallInverse">@style/Widget.DeviceDefault.Light.ProgressBar.Small.Inverse</item> + <item name="progressBarStyleLargeInverse">@style/Widget.DeviceDefault.Light.ProgressBar.Large.Inverse</item> + <item name="seekBarStyle">@style/Widget.DeviceDefault.Light.SeekBar</item> + <item name="ratingBarStyle">@style/Widget.DeviceDefault.Light.RatingBar</item> + <item name="ratingBarStyleIndicator">@style/Widget.DeviceDefault.Light.RatingBar.Indicator</item> + <item name="ratingBarStyleSmall">@style/Widget.DeviceDefault.Light.RatingBar.Small</item> + <item name="radioButtonStyle">@style/Widget.DeviceDefault.Light.CompoundButton.RadioButton</item> + <item name="scrollViewStyle">@style/Widget.DeviceDefault.Light.ScrollView</item> + <item name="horizontalScrollViewStyle">@style/Widget.DeviceDefault.Light.HorizontalScrollView</item> + <item name="dropDownSpinnerStyle">@style/Widget.DeviceDefault.Light.Spinner.DropDown</item> + <item name="starStyle">@style/Widget.DeviceDefault.Light.CompoundButton.Star</item> + <item name="tabWidgetStyle">@style/Widget.DeviceDefault.Light.TabWidget</item> + <item name="textViewStyle">@style/Widget.DeviceDefault.Light.TextView</item> + <item name="webTextViewStyle">@style/Widget.DeviceDefault.Light.WebTextView</item> + <item name="webViewStyle">@style/Widget.DeviceDefault.Light.WebView</item> + <item name="dropDownItemStyle">@style/Widget.DeviceDefault.Light.DropDownItem</item> + <item name="spinnerDropDownItemStyle">@style/Widget.DeviceDefault.Light.DropDownItem.Spinner</item> + <item name="spinnerItemStyle">@style/Widget.DeviceDefault.Light.TextView.SpinnerItem</item> + <item name="dropDownHintAppearance">@style/TextAppearance.DeviceDefault.Widget.DropDownHint</item> + <item name="keyboardViewStyle">@style/Widget.DeviceDefault.KeyboardView</item> + <item name="quickContactBadgeStyleWindowSmall">@style/Widget.DeviceDefault.QuickContactBadge.WindowSmall</item> + <item name="quickContactBadgeStyleWindowMedium">@style/Widget.DeviceDefault.QuickContactBadge.WindowMedium</item> + <item name="quickContactBadgeStyleWindowLarge">@style/Widget.DeviceDefault.QuickContactBadge.WindowLarge</item> + <item name="quickContactBadgeStyleSmallWindowSmall">@style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowSmall</item> + <item name="quickContactBadgeStyleSmallWindowMedium">@style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowMedium</item> + <item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowLarge</item> + <item name="listPopupWindowStyle">@style/Widget.DeviceDefault.Light.ListPopupWindow</item> + <item name="popupMenuStyle">@style/Widget.DeviceDefault.Light.PopupMenu</item> + <item name="stackViewStyle">@style/Widget.DeviceDefault.Light.StackView</item> <!-- Preference styles --> - <item name="preferenceScreenStyle">@android:style/Preference.DeviceDefault.PreferenceScreen</item> - <item name="preferenceCategoryStyle">@android:style/Preference.DeviceDefault.Category</item> - <item name="preferenceStyle">@android:style/Preference.DeviceDefault</item> - <item name="preferenceInformationStyle">@android:style/Preference.DeviceDefault.Information</item> - <item name="checkBoxPreferenceStyle">@android:style/Preference.DeviceDefault.CheckBoxPreference</item> - <item name="switchPreferenceStyle">@android:style/Preference.DeviceDefault.SwitchPreference</item> - <item name="yesNoPreferenceStyle">@android:style/Preference.DeviceDefault.DialogPreference.YesNoPreference</item> - <item name="dialogPreferenceStyle">@android:style/Preference.DeviceDefault.DialogPreference</item> - <item name="editTextPreferenceStyle">@android:style/Preference.DeviceDefault.DialogPreference.EditTextPreference</item> - <item name="ringtonePreferenceStyle">@android:style/Preference.DeviceDefault.RingtonePreference</item> + <item name="preferenceScreenStyle">@style/Preference.DeviceDefault.PreferenceScreen</item> + <item name="preferenceCategoryStyle">@style/Preference.DeviceDefault.Category</item> + <item name="preferenceStyle">@style/Preference.DeviceDefault</item> + <item name="preferenceInformationStyle">@style/Preference.DeviceDefault.Information</item> + <item name="checkBoxPreferenceStyle">@style/Preference.DeviceDefault.CheckBoxPreference</item> + <item name="switchPreferenceStyle">@style/Preference.DeviceDefault.SwitchPreference</item> + <item name="yesNoPreferenceStyle">@style/Preference.DeviceDefault.DialogPreference.YesNoPreference</item> + <item name="dialogPreferenceStyle">@style/Preference.DeviceDefault.DialogPreference</item> + <item name="editTextPreferenceStyle">@style/Preference.DeviceDefault.DialogPreference.EditTextPreference</item> + <item name="ringtonePreferenceStyle">@style/Preference.DeviceDefault.RingtonePreference</item> <!-- Action bar styles --> - <item name="actionDropDownStyle">@android:style/Widget.DeviceDefault.Light.Spinner.DropDown.ActionBar</item> - <item name="actionButtonStyle">@android:style/Widget.DeviceDefault.Light.ActionButton</item> - <item name="actionOverflowButtonStyle">@android:style/Widget.DeviceDefault.Light.ActionButton.Overflow</item> + <item name="actionDropDownStyle">@style/Widget.DeviceDefault.Light.Spinner.DropDown.ActionBar</item> + <item name="actionButtonStyle">@style/Widget.DeviceDefault.Light.ActionButton</item> + <item name="actionOverflowButtonStyle">@style/Widget.DeviceDefault.Light.ActionButton.Overflow</item> <item name="actionBarTabStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabView</item> <item name="actionBarTabBarStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabBar</item> <item name="actionBarTabTextStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabText</item> <item name="actionModeStyle">@style/Widget.DeviceDefault.Light.ActionMode</item> <item name="actionModeCloseButtonStyle">@style/Widget.DeviceDefault.Light.ActionButton.CloseMode</item> - <item name="actionBarStyle">@android:style/Widget.DeviceDefault.Light.ActionBar</item> - <item name="actionModePopupWindowStyle">@android:style/Widget.DeviceDefault.Light.PopupWindow.ActionMode</item> + <item name="actionBarStyle">@style/Widget.DeviceDefault.Light.ActionBar</item> + <item name="actionModePopupWindowStyle">@style/Widget.DeviceDefault.Light.PopupWindow.ActionMode</item> - <item name="buttonBarStyle">@android:style/DeviceDefault.Light.ButtonBar</item> - <item name="segmentedButtonStyle">@android:style/DeviceDefault.Light.SegmentedButton</item> + <item name="buttonBarStyle">@style/DeviceDefault.Light.ButtonBar</item> + <item name="segmentedButtonStyle">@style/DeviceDefault.Light.SegmentedButton</item> <item name="searchDialogTheme">@style/Theme.DeviceDefault.Light.SearchBar</item> @@ -373,216 +448,117 @@ easier. <item name="timePickerStyle">@style/Widget.DeviceDefault.Light.TimePicker</item> <!-- TimePicker Header time label text appearance --> - <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.DeviceDefault.Light.TimePicker.TimeLabel</item> + <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.DeviceDefault.TimePicker.TimeLabel</item> <!-- TimePicker Header am pm label text appearance --> - <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.DeviceDefault.Light.TimePicker.AmPmLabel</item> + <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.DeviceDefault.TimePicker.AmPmLabel</item> <!-- TimePicker dialog theme --> - <item name="timePickerDialogTheme">@android:style/Theme.DeviceDefault.Light.Dialog.TimePicker</item> + <item name="timePickerDialogTheme">@style/Theme.DeviceDefault.Light.Dialog.TimePicker</item> <!-- DatePicker style --> <item name="datePickerStyle">@style/Widget.DeviceDefault.Light.DatePicker</item> - <item name="mediaRouteButtonStyle">@android:style/Widget.DeviceDefault.Light.MediaRouteButton</item> + <item name="mediaRouteButtonStyle">@style/Widget.DeviceDefault.Light.MediaRouteButton</item> </style> - <!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar --> - <style name="Theme.DeviceDefault.Light.NoActionBar" parent="Theme.Quantum.Light.NoActionBar" > + + <!-- Variant of the DeviceDefault (light) theme that has a solid (opaque) action bar with an + inverse color profile. --> + <style name="Theme.DeviceDefault.Light.DarkActionBar" parent="Theme.Quantum.Light.DarkActionBar" > + <item name="actionBarStyle">@style/Widget.DeviceDefault.Light.ActionBar.Solid.Inverse</item> + <item name="actionDropDownStyle">@style/Widget.DeviceDefault.Spinner.DropDown.ActionBar</item> + <item name="actionButtonStyle">@style/Widget.DeviceDefault.ActionButton</item> + <item name="actionOverflowButtonStyle">@style/Widget.DeviceDefault.ActionButton.Overflow</item> + <item name="actionBarTabStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabView.Inverse</item> + <item name="actionBarTabBarStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabBar.Inverse</item> + <item name="actionBarTabTextStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabText.Inverse</item> + <item name="actionModeStyle">@style/Widget.DeviceDefault.Light.ActionMode.Inverse</item> + <item name="actionModeCloseButtonStyle">@style/Widget.DeviceDefault.ActionButton.CloseMode</item> + <item name="actionModePopupWindowStyle">@style/Widget.DeviceDefault.PopupWindow.ActionMode</item> </style> + + <!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar --> + <style name="Theme.DeviceDefault.Light.NoActionBar" parent="Theme.Quantum.Light.NoActionBar" /> + <!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar and no status bar. This theme sets {@link android.R.attr#windowFullscreen} to true. --> - <style name="Theme.DeviceDefault.Light.NoActionBar.Fullscreen" parent="Theme.Quantum.Light.NoActionBar.Fullscreen" > - </style> + <style name="Theme.DeviceDefault.Light.NoActionBar.Fullscreen" parent="Theme.Quantum.Light.NoActionBar.Fullscreen" /> + <!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar and no status bar and extending in to overscan region. This theme sets {@link android.R.attr#windowFullscreen} and {@link android.R.attr#windowOverscan} to true. --> - <style name="Theme.DeviceDefault.Light.NoActionBar.Overscan" - parent="Theme.Quantum.Light.NoActionBar.Overscan" > - </style> + <style name="Theme.DeviceDefault.Light.NoActionBar.Overscan" parent="Theme.Quantum.Light.NoActionBar.Overscan" /> + <!-- Variant of {@link #Theme_DeviceDefault_Light} that has no title bar and translucent system decor. This theme sets {@link android.R.attr#windowTranslucentStatus} and {@link android.R.attr#windowTranslucentNavigation} to true. --> - <style name="Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor" - parent="Theme.Quantum.Light.NoActionBar.TranslucentDecor" > - </style> - <!-- DeviceDefault theme for dialog windows and activities. This changes the window to be - floating (not fill the entire screen), and puts a frame around its contents. You can set this - theme on an activity if you would like to make an activity that looks like a Dialog. --> - <style name="Theme.DeviceDefault.Dialog" parent="Theme.Quantum.Dialog" > - <item name="android:windowTitleStyle">@android:style/DialogWindowTitle.DeviceDefault</item> - <item name="android:windowAnimationStyle">@android:style/Animation.DeviceDefault.Dialog</item> - - <item name="android:buttonBarStyle">@android:style/DeviceDefault.ButtonBar.AlertDialog</item> - <item name="borderlessButtonStyle">@android:style/Widget.DeviceDefault.Button.Borderless.Small</item> - - <item name="textAppearance">@android:style/TextAppearance.DeviceDefault</item> - <item name="textAppearanceInverse">@android:style/TextAppearance.DeviceDefault.Inverse</item> - </style> - <!-- Variant of {@link #Theme_DeviceDefault_Dialog} that has a nice minimum width for a - regular dialog. --> - <style name="Theme.DeviceDefault.Dialog.MinWidth" parent="Theme.Quantum.Dialog.MinWidth" > - - </style> - <!-- Variant of {@link #Theme_DeviceDefault_Dialog} without an action bar --> - <style name="Theme.DeviceDefault.Dialog.NoActionBar" parent="Theme.Quantum.Dialog.NoActionBar" > - - </style> - <!-- Variant of {@link #Theme_DeviceDefault_Dialog_NoActionBar} that has a nice minimum width - for a regular dialog. --> - <style name="Theme.DeviceDefault.Dialog.NoActionBar.MinWidth" parent="Theme.Quantum.Dialog.NoActionBar.MinWidth" > - - </style> - - <!-- Variant of Theme.DeviceDefault.Dialog that has a fixed size. --> - <style name="Theme.DeviceDefault.Dialog.FixedSize"> - <item name="windowFixedWidthMajor">@android:dimen/dialog_fixed_width_major</item> - <item name="windowFixedWidthMinor">@android:dimen/dialog_fixed_width_minor</item> - <item name="windowFixedHeightMajor">@android:dimen/dialog_fixed_height_major</item> - <item name="windowFixedHeightMinor">@android:dimen/dialog_fixed_height_minor</item> - </style> - - <!-- Variant of Theme.DeviceDefault.Dialog.NoActionBar that has a fixed size. --> - <style name="Theme.DeviceDefault.Dialog.NoActionBar.FixedSize"> - <item name="windowFixedWidthMajor">@android:dimen/dialog_fixed_width_major</item> - <item name="windowFixedWidthMinor">@android:dimen/dialog_fixed_width_minor</item> - <item name="windowFixedHeightMajor">@android:dimen/dialog_fixed_height_major</item> - <item name="windowFixedHeightMinor">@android:dimen/dialog_fixed_height_minor</item> - </style> + <style name="Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor" parent="Theme.Quantum.Light.NoActionBar.TranslucentDecor" /> <!-- DeviceDefault light theme for dialog windows and activities. This changes the window to be floating (not fill the entire screen), and puts a frame around its contents. You can set this theme on an activity if you would like to make an activity that looks like a Dialog.--> <style name="Theme.DeviceDefault.Light.Dialog" parent="Theme.Quantum.Light.Dialog" > - <item name="android:windowTitleStyle">@android:style/DialogWindowTitle.DeviceDefault.Light</item> - <item name="android:windowAnimationStyle">@android:style/Animation.DeviceDefault.Dialog</item> + <item name="windowTitleStyle">@style/DialogWindowTitle.DeviceDefault.Light</item> + <item name="windowAnimationStyle">@style/Animation.DeviceDefault.Dialog</item> - <item name="android:buttonBarStyle">@android:style/DeviceDefault.Light.ButtonBar.AlertDialog</item> - <item name="borderlessButtonStyle">@android:style/Widget.DeviceDefault.Light.Button.Borderless.Small</item> + <item name="buttonBarStyle">@style/DeviceDefault.Light.ButtonBar.AlertDialog</item> + <item name="borderlessButtonStyle">@style/Widget.DeviceDefault.Light.Button.Borderless.Small</item> - <item name="textAppearance">@android:style/TextAppearance.DeviceDefault.Light</item> - <item name="textAppearanceInverse">@android:style/TextAppearance.DeviceDefault.Light.Inverse</item> + <item name="textAppearance">@style/TextAppearance.DeviceDefault</item> + <item name="textAppearanceInverse">@style/TextAppearance.DeviceDefault.Inverse</item> </style> + <!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog} that has a nice minimum width for a regular dialog. --> - <style name="Theme.DeviceDefault.Light.Dialog.MinWidth" parent="Theme.Quantum.Light.Dialog.MinWidth" > + <style name="Theme.DeviceDefault.Light.Dialog.MinWidth" parent="Theme.Quantum.Light.Dialog.MinWidth" /> - </style> <!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog} without an action bar --> - <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar" parent="Theme.Quantum.Light.Dialog.NoActionBar" > + <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar" parent="Theme.Quantum.Light.Dialog.NoActionBar" /> - </style> <!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog_NoActionBar} that has a nice minimum width for a regular dialog. --> - <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar.MinWidth" parent="Theme.Quantum.Light.Dialog.NoActionBar.MinWidth" > - - </style> + <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar.MinWidth" parent="Theme.Quantum.Light.Dialog.NoActionBar.MinWidth" /> <!-- Variant of Theme.DeviceDefault.Dialog that has a fixed size. --> <style name="Theme.DeviceDefault.Light.Dialog.FixedSize"> - <item name="windowFixedWidthMajor">@android:dimen/dialog_fixed_width_major</item> - <item name="windowFixedWidthMinor">@android:dimen/dialog_fixed_width_minor</item> - <item name="windowFixedHeightMajor">@android:dimen/dialog_fixed_height_major</item> - <item name="windowFixedHeightMinor">@android:dimen/dialog_fixed_height_minor</item> + <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item> + <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item> + <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item> + <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item> </style> <!-- Variant of Theme.DeviceDefault.Dialog.NoActionBar that has a fixed size. --> <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar.FixedSize"> - <item name="windowFixedWidthMajor">@android:dimen/dialog_fixed_width_major</item> - <item name="windowFixedWidthMinor">@android:dimen/dialog_fixed_width_minor</item> - <item name="windowFixedHeightMajor">@android:dimen/dialog_fixed_height_major</item> - <item name="windowFixedHeightMinor">@android:dimen/dialog_fixed_height_minor</item> + <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item> + <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item> + <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item> + <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item> </style> - <!-- DeviceDefault theme for a window that will be displayed either full-screen on smaller - screens (small, normal) or as a dialog on larger screens (large, xlarge). --> - <style name="Theme.DeviceDefault.DialogWhenLarge" parent="Theme.Quantum.DialogWhenLarge" > - - </style> - <!-- DeviceDefault theme for a window without an action bar that will be displayed either - full-screen on smaller screens (small, normal) or as a dialog on larger screens (large, - xlarge). --> - <style name="Theme.DeviceDefault.DialogWhenLarge.NoActionBar" parent="Theme.Quantum.DialogWhenLarge.NoActionBar" > - - </style> <!-- DeviceDefault light theme for a window that will be displayed either full-screen on smaller screens (small, normal) or as a dialog on larger screens (large, xlarge). --> - <style name="Theme.DeviceDefault.Light.DialogWhenLarge" parent="Theme.Quantum.Light.DialogWhenLarge" > + <style name="Theme.DeviceDefault.Light.DialogWhenLarge" parent="Theme.Quantum.Light.DialogWhenLarge" /> - </style> <!-- DeviceDefault light theme for a window without an action bar that will be displayed either full-screen on smaller screens (small, normal) or as a dialog on larger screens (large, xlarge). --> - <style name="Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar" parent="Theme.Quantum.Light.DialogWhenLarge.NoActionBar" > - - </style> - - <!-- DeviceDefault theme for a presentation window on a secondary display. --> - <style name="Theme.DeviceDefault.Dialog.Presentation" parent="Theme.Quantum.Dialog.Presentation"> - </style> + <style name="Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar" parent="Theme.Quantum.Light.DialogWhenLarge.NoActionBar" /> <!-- DeviceDefault light theme for a presentation window on a secondary display. --> - <style name="Theme.DeviceDefault.Light.Dialog.Presentation" parent="Theme.Quantum.Light.Dialog.Presentation"> - </style> + <style name="Theme.DeviceDefault.Light.Dialog.Presentation" parent="Theme.Quantum.Light.Dialog.Presentation" /> - <!-- DeviceDefault theme for panel windows. This removes all extraneous window - decorations, so you basically have an empty rectangle in which to place your content. It makes - the window floating, with a transparent background, and turns off dimming behind the window. --> - <style name="Theme.DeviceDefault.Panel" parent="Theme.Quantum.Panel" > + <style name="Theme.DeviceDefault.Light.Dialog.TimePicker" parent="Theme.Quantum.Light.Dialog.TimePicker"/> - </style> <!-- DeviceDefault light theme for panel windows. This removes all extraneous window decorations, so you basically have an empty rectangle in which to place your content. It makes the window floating, with a transparent background, and turns off dimming behind the window. --> - <style name="Theme.DeviceDefault.Light.Panel" parent="Theme.Quantum.Light.Panel" > - - </style> - <!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear - behind them. --> - <style name="Theme.DeviceDefault.Wallpaper" parent="Theme.Quantum.Wallpaper" > - - </style> - <!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear - behind them and without an action bar. --> - <style name="Theme.DeviceDefault.Wallpaper.NoTitleBar" parent="Theme.Quantum.Wallpaper.NoTitleBar" > + <style name="Theme.DeviceDefault.Light.Panel" parent="Theme.Quantum.Light.Panel" /> - </style> - <!-- DeviceDefault style for input methods, which is used by the - {@link android.inputmethodservice.InputMethodService} class.--> - <style name="Theme.DeviceDefault.InputMethod" parent="Theme.Quantum.InputMethod" > - - </style> - <!-- Variant of the DeviceDefault (light) theme that has a solid (opaque) action bar with an - inverse color profile. --> - <style name="Theme.DeviceDefault.Light.DarkActionBar" parent="Theme.Quantum.Light.DarkActionBar" > - <item name="android:actionBarStyle">@android:style/Widget.DeviceDefault.Light.ActionBar.Solid.Inverse</item> - - <item name="actionDropDownStyle">@android:style/Widget.DeviceDefault.Spinner.DropDown.ActionBar</item> - <item name="actionButtonStyle">@android:style/Widget.DeviceDefault.ActionButton</item> - <item name="actionOverflowButtonStyle">@android:style/Widget.DeviceDefault.ActionButton.Overflow</item> - <item name="actionBarTabStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabView.Inverse</item> - <item name="actionBarTabBarStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabBar.Inverse</item> - <item name="actionBarTabTextStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabText.Inverse</item> - <item name="actionModeStyle">@style/Widget.DeviceDefault.Light.ActionMode.Inverse</item> - <item name="actionModeCloseButtonStyle">@style/Widget.DeviceDefault.ActionButton.CloseMode</item> - <item name="actionModePopupWindowStyle">@android:style/Widget.DeviceDefault.PopupWindow.ActionMode</item> - - </style> - - <style name="Theme.DeviceDefault.Dialog.Alert" parent="Theme.Quantum.Dialog.Alert"> - <item name="windowTitleStyle">@android:style/DialogWindowTitle.DeviceDefault</item> - </style> <style name="Theme.DeviceDefault.Light.Dialog.Alert" parent="Theme.Quantum.Light.Dialog.Alert"> - <item name="windowTitleStyle">@android:style/DialogWindowTitle.DeviceDefault.Light</item> + <item name="windowTitleStyle">@style/DialogWindowTitle.DeviceDefault.Light</item> </style> - <style name="Theme.DeviceDefault.SearchBar" parent="Theme.Quantum.SearchBar"> - </style> - <style name="Theme.DeviceDefault.Light.SearchBar" parent="Theme.Quantum.Light.SearchBar"> - - </style> - - <style name="Theme.DeviceDefault.Dialog.NoFrame" parent="Theme.Quantum.Dialog.NoFrame"> - </style> + <style name="Theme.DeviceDefault.Light.SearchBar" parent="Theme.Quantum.Light.SearchBar" /> </resources> diff --git a/core/res/res/values/themes_micro.xml b/core/res/res/values/themes_micro.xml index f51b8df..39df700 100644 --- a/core/res/res/values/themes_micro.xml +++ b/core/res/res/values/themes_micro.xml @@ -15,20 +15,51 @@ --> <resources> <style name="Theme.Micro" parent="Theme.Holo.NoActionBar"> - <item name="textViewStyle">@android:style/Widget.Micro.TextView</item> - <item name="numberPickerStyle">@android:style/Widget.Micro.NumberPicker</item> - <item name="windowAnimationStyle">@android:style/Animation.SwipeDismiss</item> + <item name="alertDialogTheme">@style/Theme.Micro.Dialog.Alert</item> + <item name="alertDialogStyle">@style/AlertDialog.Micro</item> + <item name="dialogTheme">@style/Theme.Micro.Dialog</item> + <item name="textViewStyle">@style/Widget.Micro.TextView</item> + + <item name="numberPickerStyle">@style/Widget.Micro.NumberPicker</item> + <item name="windowAnimationStyle">@style/Animation.SwipeDismiss</item> <item name="windowIsFloating">false</item> <item name="windowIsTranslucent">true</item> <item name="windowSwipeToDismiss">true</item> </style> <style name="Theme.Micro.Light" parent="Theme.Holo.Light.NoActionBar"> - <item name="textViewStyle">@android:style/Widget.Micro.TextView</item> - <item name="numberPickerStyle">@android:style/Widget.Micro.NumberPicker</item> - <item name="windowAnimationStyle">@android:style/Animation.SwipeDismiss</item> + <item name="alertDialogTheme">@style/Theme.Micro.Dialog.Alert</item> + <item name="alertDialogStyle">@style/AlertDialog.Micro</item> + <item name="dialogTheme">@style/Theme.Micro.Dialog</item> + <item name="textViewStyle">@style/Widget.Micro.TextView</item> + <item name="numberPickerStyle">@style/Widget.Micro.NumberPicker</item> + <item name="windowAnimationStyle">@style/Animation.SwipeDismiss</item> <item name="windowIsFloating">false</item> <item name="windowIsTranslucent">true</item> <item name="windowSwipeToDismiss">true</item> </style> + + <style name="Theme.Micro.Dialog" parent="Theme.Holo.Light.Dialog"> + <item name="windowTitleStyle">@android:style/DialogWindowTitle.Micro</item> + <item name="windowIsFloating">false</item> + <item name="windowFullscreen">true</item> + <item name="textAppearance">@style/TextAppearance.Micro</item> + <item name="textAppearanceInverse">@style/TextAppearance.Micro</item> + </style> + + <style name="Theme.Micro.Dialog.Alert" parent="Theme.Holo.Light.Dialog.Alert"> + <item name="windowTitleStyle">@style/DialogWindowTitle.Micro</item> + <item name="alertDialogStyle">@style/AlertDialog.Micro</item> + <item name="windowIsFloating">false</item> + </style> + + <style name="Theme.Micro.Dialog.AppError" parent="Theme.Micro.Dialog"> + <item name="windowBackground">@null</item> + <item name="alertDialogStyle">@style/AlertDialog.Micro</item> + <item name="windowOverscan">true</item> + <item name="windowCloseOnTouchOutside">false</item> + <item name="textSize">20sp</item> + <item name="fontFamily">sans-serif-condensed-light</item> + <item name="textColor">@color/micro_text_light</item> + </style> </resources> diff --git a/core/res/res/values/themes_quantum.xml b/core/res/res/values/themes_quantum.xml index 9f76eae..e3ac1ad 100644 --- a/core/res/res/values/themes_quantum.xml +++ b/core/res/res/values/themes_quantum.xml @@ -391,8 +391,8 @@ please see themes_device_defaults.xml. <item name="backgroundDimAmount">0.6</item> <!-- Text styles --> - <item name="textAppearance">@style/TextAppearance.Quantum.Light</item> - <item name="textAppearanceInverse">@style/TextAppearance.Quantum.Light.Inverse</item> + <item name="textAppearance">@style/TextAppearance.Quantum</item> + <item name="textAppearanceInverse">@style/TextAppearance.Quantum.Inverse</item> <item name="textColorPrimary">@color/primary_text_quantum_light</item> <item name="textColorPrimaryInverse">@color/primary_text_quantum_dark</item> @@ -411,16 +411,16 @@ please see themes_device_defaults.xml. <item name="textColorSearchUrl">@color/search_url_text_quantum_light</item> <item name="textColorAlertDialogListItem">@color/primary_text_quantum_light</item> - <item name="textAppearanceLarge">@style/TextAppearance.Quantum.Light.Large</item> - <item name="textAppearanceLargeInverse">@style/TextAppearance.Quantum.Light.Large.Inverse</item> - <item name="textAppearanceMedium">@style/TextAppearance.Quantum.Light.Medium</item> - <item name="textAppearanceMediumInverse">@style/TextAppearance.Quantum.Light.Medium.Inverse</item> - <item name="textAppearanceSmall">@style/TextAppearance.Quantum.Light.Small</item> - <item name="textAppearanceSmallInverse">@style/TextAppearance.Quantum.Light.Small.Inverse</item> - <item name="textAppearanceSearchResultTitle">@style/TextAppearance.Quantum.Light.SearchResult.Title</item> - <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.Quantum.Light.SearchResult.Subtitle</item> + <item name="textAppearanceLarge">@style/TextAppearance.Quantum.Large</item> + <item name="textAppearanceLargeInverse">@style/TextAppearance.Quantum.Large.Inverse</item> + <item name="textAppearanceMedium">@style/TextAppearance.Quantum.Medium</item> + <item name="textAppearanceMediumInverse">@style/TextAppearance.Quantum.Medium.Inverse</item> + <item name="textAppearanceSmall">@style/TextAppearance.Quantum.Small</item> + <item name="textAppearanceSmallInverse">@style/TextAppearance.Quantum.Small.Inverse</item> + <item name="textAppearanceSearchResultTitle">@style/TextAppearance.Quantum.SearchResult.Title</item> + <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.Quantum.SearchResult.Subtitle</item> - <item name="textAppearanceButton">@style/TextAppearance.Quantum.Light.Widget.Button</item> + <item name="textAppearanceButton">@style/TextAppearance.Quantum.Widget.Button</item> <item name="editTextColor">?attr/textColorPrimary</item> <item name="editTextBackground">@drawable/edit_text_quantum</item> @@ -430,8 +430,8 @@ please see themes_device_defaults.xml. <item name="textCheckMark">@drawable/indicator_check_mark_light</item> <item name="textCheckMarkInverse">@drawable/indicator_check_mark_dark</item> - <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Quantum.Light.Widget.PopupMenu.Large</item> - <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.Quantum.Light.Widget.PopupMenu.Small</item> + <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Quantum.Widget.PopupMenu.Large</item> + <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.Quantum.Widget.PopupMenu.Small</item> <!-- Button styles --> <item name="buttonStyle">@style/Widget.Quantum.Light.Button</item> @@ -606,7 +606,7 @@ please see themes_device_defaults.xml. <item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.Quantum.QuickContactBadgeSmall.WindowLarge</item> <item name="listPopupWindowStyle">@style/Widget.Quantum.Light.ListPopupWindow</item> <item name="popupMenuStyle">@style/Widget.Quantum.Light.PopupMenu</item> - <item name="stackViewStyle">@style/Widget.Quantum.StackView</item> + <item name="stackViewStyle">@style/Widget.Quantum.Light.StackView</item> <item name="activityChooserViewStyle">@style/Widget.Quantum.Light.ActivityChooserView</item> <item name="fragmentBreadCrumbsStyle">@style/Widget.Quantum.Light.FragmentBreadCrumbs</item> @@ -690,10 +690,10 @@ please see themes_device_defaults.xml. <item name="timePickerHeaderBackgroundColor">?attr/colorBackground</item> <!-- TimePicker Header time label text appearance --> - <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.Quantum.Light.TimePicker.TimeLabel</item> + <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.Quantum.TimePicker.TimeLabel</item> <!-- TimePicker Header am pm label text appearance --> - <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.Quantum.Light.TimePicker.AmPmLabel</item> + <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.Quantum.TimePicker.AmPmLabel</item> <!-- TimePicker dialog theme --> <item name="timePickerDialogTheme">@style/Theme.Quantum.Light.Dialog.TimePicker</item> @@ -1031,8 +1031,8 @@ please see themes_device_defaults.xml. <item name="buttonBarStyle">@style/Widget.Quantum.Light.ButtonBar.AlertDialog</item> <item name="borderlessButtonStyle">@style/Widget.Quantum.Light.Button.Borderless.Small</item> - <item name="textAppearance">@style/TextAppearance.Quantum.Light</item> - <item name="textAppearanceInverse">@style/TextAppearance.Quantum.Light.Inverse</item> + <item name="textAppearance">@style/TextAppearance.Quantum</item> + <item name="textAppearanceInverse">@style/TextAppearance.Quantum.Inverse</item> <item name="listPreferredItemPaddingLeft">16dip</item> <item name="listPreferredItemPaddingRight">16dip</item> diff --git a/core/tests/bluetoothtests/src/android/bluetooth/BluetoothInstrumentation.java b/core/tests/bluetoothtests/src/android/bluetooth/BluetoothInstrumentation.java index 34393f9..0cd19f2 100644 --- a/core/tests/bluetoothtests/src/android/bluetooth/BluetoothInstrumentation.java +++ b/core/tests/bluetoothtests/src/android/bluetooth/BluetoothInstrumentation.java @@ -25,6 +25,7 @@ public class BluetoothInstrumentation extends Instrumentation { private BluetoothTestUtils mUtils = null; private BluetoothAdapter mAdapter = null; private Bundle mArgs = null; + private Bundle mSuccessResult = null; private BluetoothTestUtils getBluetoothTestUtils() { if (mUtils == null) { @@ -46,6 +47,9 @@ public class BluetoothInstrumentation extends Instrumentation { public void onCreate(Bundle arguments) { super.onCreate(arguments); mArgs = arguments; + // create the default result response, but only use it in success code path + mSuccessResult = new Bundle(); + mSuccessResult.putString("result", "SUCCESS"); start(); } @@ -67,24 +71,23 @@ public class BluetoothInstrumentation extends Instrumentation { public void enable() { getBluetoothTestUtils().enable(getBluetoothAdapter()); - finish(null); + finish(mSuccessResult); } public void disable() { getBluetoothTestUtils().disable(getBluetoothAdapter()); - finish(null); + finish(mSuccessResult); } public void unpairAll() { getBluetoothTestUtils().unpairAll(getBluetoothAdapter()); - finish(null); + finish(mSuccessResult); } public void getName() { String name = getBluetoothAdapter().getName(); - Bundle bundle = new Bundle(); - bundle.putString("name", name); - finish(bundle); + mSuccessResult.putString("name", name); + finish(mSuccessResult); } public void finish(Bundle result) { diff --git a/core/tests/inputmethodtests/run_core_inputmethod_test.sh b/core/tests/inputmethodtests/run_core_inputmethod_test.sh index b0b119b..9029ba5 100755 --- a/core/tests/inputmethodtests/run_core_inputmethod_test.sh +++ b/core/tests/inputmethodtests/run_core_inputmethod_test.sh @@ -21,4 +21,4 @@ if [[ $rebuild == true ]]; then $COMMAND fi -adb shell am instrument -w -e class android.os.InputMethodTest,android.os.InputMethodSubtypeArrayTest com.android.frameworks.coretests.inputmethod/android.test.InstrumentationTestRunner +adb shell am instrument -w -e class android.os.InputMethodTest,android.os.InputMethodSubtypeArrayTest,android.os.InputMethodSubtypeSwitchingControllerTest com.android.frameworks.coretests.inputmethod/android.test.InstrumentationTestRunner diff --git a/core/tests/inputmethodtests/src/android/os/InputMethodSubtypeSwitchingControllerTest.java b/core/tests/inputmethodtests/src/android/os/InputMethodSubtypeSwitchingControllerTest.java new file mode 100644 index 0000000..6d33529 --- /dev/null +++ b/core/tests/inputmethodtests/src/android/os/InputMethodSubtypeSwitchingControllerTest.java @@ -0,0 +1,205 @@ +/* + * 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 android.os; + +import android.content.pm.ApplicationInfo; +import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; +import android.test.InstrumentationTestCase; +import android.test.suitebuilder.annotation.SmallTest; +import android.view.inputmethod.InputMethodInfo; +import android.view.inputmethod.InputMethodSubtype; +import android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder; + +import com.android.internal.inputmethod.InputMethodSubtypeSwitchingController; +import com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class InputMethodSubtypeSwitchingControllerTest extends InstrumentationTestCase { + final private static String DUMMY_PACKAGE_NAME = "dymmy package name"; + final private static String DUMMY_SETTING_ACTIVITY_NAME = ""; + final private static boolean DUMMY_IS_AUX_IME = false; + final private static boolean DUMMY_FORCE_DEFAULT = false; + final private static int DUMMY_IS_DEFAULT_RES_ID = 0; + final private static String SYSTEM_LOCALE = "en_US"; + + private static InputMethodSubtype createDummySubtype(final String locale) { + final InputMethodSubtypeBuilder builder = new InputMethodSubtypeBuilder(); + return builder.setSubtypeNameResId(0) + .setSubtypeIconResId(0) + .setSubtypeLocale(locale) + .setIsAsciiCapable(true) + .build(); + } + + private static void addDummyImeSubtypeListItems(List<ImeSubtypeListItem> items, + String imeName, String imeLabel, List<String> subtypeLocales, + boolean supportsSwitchingToNextInputMethod) { + final ResolveInfo ri = new ResolveInfo(); + final ServiceInfo si = new ServiceInfo(); + final ApplicationInfo ai = new ApplicationInfo(); + ai.packageName = DUMMY_PACKAGE_NAME; + ai.enabled = true; + si.applicationInfo = ai; + si.enabled = true; + si.packageName = DUMMY_PACKAGE_NAME; + si.name = imeName; + si.exported = true; + si.nonLocalizedLabel = imeLabel; + ri.serviceInfo = si; + final List<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>(); + for (String subtypeLocale : subtypeLocales) { + subtypes.add(createDummySubtype(subtypeLocale)); + } + final InputMethodInfo imi = new InputMethodInfo(ri, DUMMY_IS_AUX_IME, + DUMMY_SETTING_ACTIVITY_NAME, subtypes, DUMMY_IS_DEFAULT_RES_ID, + DUMMY_FORCE_DEFAULT, supportsSwitchingToNextInputMethod); + for (int i = 0; i < subtypes.size(); ++i) { + final String subtypeLocale = subtypeLocales.get(i); + final InputMethodSubtype subtype = subtypes.get(i); + items.add(new ImeSubtypeListItem(imeName, subtypeLocale, imi, i, subtypeLocale, + SYSTEM_LOCALE)); + } + } + + private static List<ImeSubtypeListItem> createTestData() { + final List<ImeSubtypeListItem> items = new ArrayList<ImeSubtypeListItem>(); + addDummyImeSubtypeListItems(items, "switchAwareLatinIme", "switchAwareLatinIme", + Arrays.asList("en_US", "es_US", "fr"), + true /* supportsSwitchingToNextInputMethod*/); + addDummyImeSubtypeListItems(items, "nonSwitchAwareLatinIme", "nonSwitchAwareLatinIme", + Arrays.asList("en_UK", "hi"), + false /* supportsSwitchingToNextInputMethod*/); + addDummyImeSubtypeListItems(items, "switchAwareJapaneseIme", "switchAwareJapaneseIme", + Arrays.asList("ja_JP"), + true /* supportsSwitchingToNextInputMethod*/); + addDummyImeSubtypeListItems(items, "nonSwitchAwareJapaneseIme", "nonSwitchAwareJapaneseIme", + Arrays.asList("ja_JP"), + false /* supportsSwitchingToNextInputMethod*/); + return items; + } + + @SmallTest + public void testGetNextInputMethodImplWithNotOnlyCurrentIme() throws Exception { + final List<ImeSubtypeListItem> imList = createTestData(); + + final boolean ONLY_CURRENT_IME = false; + ImeSubtypeListItem currentIme; + ImeSubtypeListItem nextIme; + + // "switchAwareLatinIme/en_US" -> "switchAwareLatinIme/es_US" + currentIme = imList.get(0); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertEquals(imList.get(1), nextIme); + // "switchAwareLatinIme/es_US" -> "switchAwareLatinIme/fr" + currentIme = imList.get(1); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertEquals(imList.get(2), nextIme); + // "switchAwareLatinIme/fr" -> "nonSwitchAwareLatinIme/en_UK + currentIme = imList.get(2); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertEquals(imList.get(3), nextIme); + // "nonSwitchAwareLatinIme/en_UK" -> "nonSwitchAwareLatinIme/hi" + currentIme = imList.get(3); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertEquals(imList.get(4), nextIme); + // "nonSwitchAwareLatinIme/hi" -> "switchAwareJapaneseIme/ja_JP" + currentIme = imList.get(4); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertEquals(imList.get(5), nextIme); + // "switchAwareJapaneseIme/ja_JP" -> "nonSwitchAwareJapaneseIme/ja_JP" + currentIme = imList.get(5); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertEquals(imList.get(6), nextIme); + // "nonSwitchAwareJapaneseIme/ja_JP" -> "switchAwareLatinIme/en_US" + currentIme = imList.get(6); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertEquals(imList.get(0), nextIme); + } + + @SmallTest + public void testGetNextInputMethodImplWithOnlyCurrentIme() throws Exception { + final List<ImeSubtypeListItem> imList = createTestData(); + + final boolean ONLY_CURRENT_IME = true; + ImeSubtypeListItem currentIme; + ImeSubtypeListItem nextIme; + + // "switchAwareLatinIme/en_US" -> "switchAwareLatinIme/es_US" + currentIme = imList.get(0); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertEquals(imList.get(1), nextIme); + // "switchAwareLatinIme/es_US" -> "switchAwareLatinIme/fr" + currentIme = imList.get(1); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertEquals(imList.get(2), nextIme); + // "switchAwareLatinIme/fr" -> "switchAwareLatinIme/en_US" + currentIme = imList.get(2); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertEquals(imList.get(0), nextIme); + + // "nonSwitchAwareLatinIme/en_UK" -> "nonSwitchAwareLatinIme/hi" + currentIme = imList.get(3); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertEquals(imList.get(4), nextIme); + // "nonSwitchAwareLatinIme/hi" -> "switchAwareLatinIme/en_UK" + currentIme = imList.get(4); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertEquals(imList.get(3), nextIme); + + // "switchAwareJapaneseIme/ja_JP" -> null + currentIme = imList.get(5); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertNull(nextIme); + + // "nonSwitchAwareJapaneseIme/ja_JP" -> null + currentIme = imList.get(6); + nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl( + imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype( + currentIme.mSubtypeName.toString())); + assertNull(nextIme); + } + } |