diff options
136 files changed, 988 insertions, 289 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 65e0b90384bf..b439c1dc02c4 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -7449,6 +7449,7 @@ public class Activity extends ContextThemeWrapper } /** @hide */ + @Override @NonNull public View[] findViewsByAccessibilityIdTraversal(@NonNull int[] viewIds) { final View[] views = new View[viewIds.length]; final ArrayList<ViewRootImpl> roots = @@ -7472,6 +7473,25 @@ public class Activity extends ContextThemeWrapper /** @hide */ @Override + @Nullable public View findViewByAccessibilityIdTraversal(int viewId) { + final ArrayList<ViewRootImpl> roots = + WindowManagerGlobal.getInstance().getRootViews(getActivityToken()); + for (int rootNum = 0; rootNum < roots.size(); rootNum++) { + final View rootView = roots.get(rootNum).getView(); + + if (rootView != null) { + final View view = rootView.findViewByAccessibilityIdTraversal(viewId); + if (view != null) { + return view; + } + } + } + + return null; + } + + /** @hide */ + @Override @NonNull public boolean[] getViewVisibility(@NonNull int[] viewIds) { final boolean[] isVisible = new boolean[viewIds.length]; final View views[] = findViewsByAccessibilityIdTraversal(viewIds); diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index a155de369f12..268a105b7c6f 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -846,9 +846,8 @@ class ContextImpl extends Context { // Calling start activity from outside an activity without FLAG_ACTIVITY_NEW_TASK is // generally not allowed, except if the caller specifies the task id the activity should // be launched in. - if ((intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) == 0 - && (options == null - || ActivityOptions.fromBundle(options).getLaunchTaskId() == -1)) { + if ((intent.getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) == 0 + && options != null && ActivityOptions.fromBundle(options).getLaunchTaskId() == -1) { throw new AndroidRuntimeException( "Calling startActivity() from outside of an Activity " + " context requires the FLAG_ACTIVITY_NEW_TASK flag." diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index b559604ea14e..e525ab3f1f3e 100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -1760,7 +1760,9 @@ public class Resources { public final Theme newTheme() { Theme theme = new Theme(); theme.setImpl(mResourcesImpl.newThemeImpl()); - mThemeRefs.add(new WeakReference<>(theme)); + synchronized (mThemeRefs) { + mThemeRefs.add(new WeakReference<>(theme)); + } return theme; } diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 2bb5f28e6bec..2c9b2e4388f8 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -138,6 +138,8 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb case DRAW_FINISHED_MSG: { mDrawFinished = true; if (mAttachedToWindow) { + mParent.requestTransparentRegion(SurfaceView.this); + notifyDrawFinished(); invalidate(); } @@ -247,7 +249,6 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb getViewRootImpl().addWindowStoppedCallback(this); mWindowStopped = false; - mParent.requestTransparentRegion(this); mViewVisibility = getVisibility() == VISIBLE; updateRequestedVisibility(); @@ -352,7 +353,7 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb @Override public boolean gatherTransparentRegion(Region region) { - if (isAboveParent()) { + if (isAboveParent() || !mDrawFinished) { return super.gatherTransparentRegion(region); } diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index dc53c22e8cea..13ffeecd235e 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -401,6 +401,13 @@ public interface WindowManagerPolicy { boolean isAnimatingLw(); /** + * @return Whether the window can affect SystemUI flags, meaning that SystemUI (system bars, + * for example) will be affected by the flags specified in this window. This is the + * case when the surface is on screen but not exiting. + */ + boolean canAffectSystemUiFlags(); + + /** * Is this window considered to be gone for purposes of layout? */ boolean isGoneForLayoutLw(); diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index 39ac39951d23..d8b316e70320 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -186,6 +186,10 @@ public final class AutofillManager { @GuardedBy("mLock") @Nullable private TrackedViews mTrackedViews; + /** Views that are only tracked because they are fillable and could be anchoring the UI. */ + @GuardedBy("mLock") + @Nullable private ArraySet<AutofillId> mFillableIds; + /** @hide */ public interface AutofillClient { /** @@ -238,13 +242,22 @@ public final class AutofillManager { boolean isVisibleForAutofill(); /** - * Find views by traversing the hierarchies of the client. + * Finds views by traversing the hierarchies of the client. * * @param viewIds The accessibility ids of the views to find * - * @return And array containing the views, or {@code null} if not found + * @return And array containing the views (empty if no views found). */ @NonNull View[] findViewsByAccessibilityIdTraversal(@NonNull int[] viewIds); + + /** + * Finds a view by traversing the hierarchies of the client. + * + * @param viewId The accessibility id of the views to find + * + * @return The view, or {@code null} if not found + */ + @Nullable View findViewByAccessibilityIdTraversal(int viewId); } /** @@ -471,8 +484,17 @@ public final class AutofillManager { */ public void notifyViewVisibilityChange(@NonNull View view, boolean isVisible) { synchronized (mLock) { - if (mEnabled && mSessionId != NO_SESSION && mTrackedViews != null) { - mTrackedViews.notifyViewVisibilityChange(view, isVisible); + if (mEnabled && mSessionId != NO_SESSION) { + if (!isVisible && mFillableIds != null) { + final AutofillId id = view.getAutofillId(); + if (mFillableIds.contains(id)) { + if (sDebug) Log.d(TAG, "Hidding UI when view " + id + " became invisible"); + requestHideFillUi(id, view); + } + } + if (mTrackedViews != null) { + mTrackedViews.notifyViewVisibilityChange(view, isVisible); + } } } } @@ -1048,9 +1070,10 @@ public final class AutofillManager { * * @param trackedIds The views to be tracked * @param saveOnAllViewsInvisible Finish the session once all tracked views are invisible. + * @param fillableIds Views that might anchor FillUI. */ - private void setTrackedViews(int sessionId, List<AutofillId> trackedIds, - boolean saveOnAllViewsInvisible) { + private void setTrackedViews(int sessionId, @Nullable AutofillId[] trackedIds, + boolean saveOnAllViewsInvisible, @Nullable AutofillId[] fillableIds) { synchronized (mLock) { if (mEnabled && mSessionId == sessionId) { if (saveOnAllViewsInvisible) { @@ -1058,15 +1081,32 @@ public final class AutofillManager { } else { mTrackedViews = null; } + if (fillableIds != null) { + if (mFillableIds == null) { + mFillableIds = new ArraySet<>(fillableIds.length); + } + for (AutofillId id : fillableIds) { + mFillableIds.add(id); + } + if (sVerbose) { + Log.v(TAG, "setTrackedViews(): fillableIds=" + fillableIds + + ", mFillableIds" + mFillableIds); + } + } } } } - private void requestHideFillUi(int sessionId, AutofillId id) { + private void requestHideFillUi(AutofillId id) { final View anchor = findView(id); + if (sVerbose) Log.v(TAG, "requestHideFillUi(" + id + "): anchor = " + anchor); if (anchor == null) { return; } + requestHideFillUi(id, anchor); + } + + private void requestHideFillUi(AutofillId id, View anchor) { AutofillCallback callback = null; synchronized (mLock) { @@ -1123,6 +1163,18 @@ public final class AutofillManager { * * @return The array of viewIds. */ + // TODO: move to Helper as static method + @NonNull private int[] getViewIds(@NonNull AutofillId[] autofillIds) { + final int numIds = autofillIds.length; + final int[] viewIds = new int[numIds]; + for (int i = 0; i < numIds; i++) { + viewIds[i] = autofillIds[i].getViewId(); + } + + return viewIds; + } + + // TODO: move to Helper as static method @NonNull private int[] getViewIds(@NonNull List<AutofillId> autofillIds) { final int numIds = autofillIds.size(); final int[] viewIds = new int[numIds]; @@ -1147,7 +1199,7 @@ public final class AutofillManager { return null; } - return client.findViewsByAccessibilityIdTraversal(new int[]{autofillId.getViewId()})[0]; + return client.findViewByAccessibilityIdTraversal(autofillId.getViewId()); } /** @hide */ @@ -1173,6 +1225,7 @@ public final class AutofillManager { * * @return {@code true} iff set is not empty and value is in set */ + // TODO: move to Helper as static method private <T> boolean isInSet(@Nullable ArraySet<T> set, T value) { return set != null && set.contains(value); } @@ -1186,6 +1239,7 @@ public final class AutofillManager { * @return The set including the new value. If set was {@code null}, a set containing only * the new value. */ + // TODO: move to Helper as static method @NonNull private <T> ArraySet<T> addToSet(@Nullable ArraySet<T> set, T valueToAdd) { if (set == null) { @@ -1206,6 +1260,7 @@ public final class AutofillManager { * @return The set without the removed value. {@code null} if set was null, or is empty * after removal. */ + // TODO: move to Helper as static method @Nullable private <T> ArraySet<T> removeFromSet(@Nullable ArraySet<T> set, T valueToRemove) { if (set == null) { @@ -1226,11 +1281,8 @@ public final class AutofillManager { * * @param trackedIds The views to be tracked */ - TrackedViews(List<AutofillId> trackedIds) { - mVisibleTrackedIds = null; - mInvisibleTrackedIds = null; - - AutofillClient client = getClientLocked(); + TrackedViews(@Nullable AutofillId[] trackedIds) { + final AutofillClient client = getClientLocked(); if (trackedIds != null && client != null) { final boolean[] isVisible; @@ -1238,12 +1290,12 @@ public final class AutofillManager { isVisible = client.getViewVisibility(getViewIds(trackedIds)); } else { // All false - isVisible = new boolean[trackedIds.size()]; + isVisible = new boolean[trackedIds.length]; } - final int numIds = trackedIds.size(); + final int numIds = trackedIds.length; for (int i = 0; i < numIds; i++) { - final AutofillId id = trackedIds.get(i); + final AutofillId id = trackedIds[i]; if (isVisible[i]) { mVisibleTrackedIds = addToSet(mVisibleTrackedIds, id); @@ -1294,6 +1346,9 @@ public final class AutofillManager { } if (mVisibleTrackedIds == null) { + if (sVerbose) { + Log.v(TAG, "No more visible ids. Invisibile = " + mInvisibleTrackedIds); + } finishSessionLocked(); } } @@ -1473,8 +1528,7 @@ public final class AutofillManager { public void requestHideFillUi(int sessionId, AutofillId id) { final AutofillManager afm = mAfm.get(); if (afm != null) { - afm.mContext.getMainThreadHandler().post( - () -> afm.requestHideFillUi(sessionId, id)); + afm.mContext.getMainThreadHandler().post(() -> afm.requestHideFillUi(id)); } } @@ -1501,12 +1555,12 @@ public final class AutofillManager { } @Override - public void setTrackedViews(int sessionId, List<AutofillId> ids, - boolean saveOnAllViewsInvisible) { + public void setTrackedViews(int sessionId, AutofillId[] ids, + boolean saveOnAllViewsInvisible, AutofillId[] fillableIds) { final AutofillManager afm = mAfm.get(); if (afm != null) { - afm.mContext.getMainThreadHandler().post( - () -> afm.setTrackedViews(sessionId, ids, saveOnAllViewsInvisible) + afm.mContext.getMainThreadHandler().post(() -> + afm.setTrackedViews(sessionId, ids, saveOnAllViewsInvisible, fillableIds) ); } } diff --git a/core/java/android/view/autofill/IAutoFillManagerClient.aidl b/core/java/android/view/autofill/IAutoFillManagerClient.aidl index 1d66f7f7f463..d18b1816e09e 100644 --- a/core/java/android/view/autofill/IAutoFillManagerClient.aidl +++ b/core/java/android/view/autofill/IAutoFillManagerClient.aidl @@ -52,8 +52,8 @@ oneway interface IAutoFillManagerClient { * Sets the views to track. If saveOnAllViewsInvisible is set and all these view are invisible * the session is finished automatically. */ - void setTrackedViews(int sessionId, in List<AutofillId> ids, - boolean saveOnAllViewsInvisible); + void setTrackedViews(int sessionId, in @nullable AutofillId[] savableIds, + boolean saveOnAllViewsInvisible, in @nullable AutofillId[] fillableIds); /** * Requests showing the fill UI. diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java index 9823431270d4..ba3aa36067d5 100644 --- a/core/java/com/android/internal/policy/DecorView.java +++ b/core/java/com/android/internal/policy/DecorView.java @@ -1759,8 +1759,9 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind mFloatingActionMode.finish(); } cleanupFloatingActionModeViews(); + mFloatingToolbar = new FloatingToolbar(mContext, mWindow); final FloatingActionMode mode = - new FloatingActionMode(mContext, callback, originatingView); + new FloatingActionMode(mContext, callback, originatingView, mFloatingToolbar); mFloatingActionModeOriginatingView = originatingView; mFloatingToolbarPreDrawListener = new ViewTreeObserver.OnPreDrawListener() { @@ -1775,8 +1776,6 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind private void setHandledFloatingActionMode(ActionMode mode) { mFloatingActionMode = mode; - mFloatingToolbar = new FloatingToolbar(mContext, mWindow); - ((FloatingActionMode) mFloatingActionMode).setFloatingToolbar(mFloatingToolbar); mFloatingActionMode.invalidate(); // Will show the floating toolbar if necessary. mFloatingActionModeOriginatingView.getViewTreeObserver() .addOnPreDrawListener(mFloatingToolbarPreDrawListener); diff --git a/core/java/com/android/internal/view/FloatingActionMode.java b/core/java/com/android/internal/view/FloatingActionMode.java index effe21902f91..ff211b6c2d62 100644 --- a/core/java/com/android/internal/view/FloatingActionMode.java +++ b/core/java/com/android/internal/view/FloatingActionMode.java @@ -16,6 +16,7 @@ package com.android.internal.view; +import android.annotation.NonNull; import android.content.Context; import android.graphics.Point; import android.graphics.Rect; @@ -36,26 +37,26 @@ import com.android.internal.widget.FloatingToolbar; import java.util.Arrays; -public class FloatingActionMode extends ActionMode { +public final class FloatingActionMode extends ActionMode { private static final int MAX_HIDE_DURATION = 3000; private static final int MOVING_HIDE_DELAY = 50; - private final Context mContext; - private final ActionMode.Callback2 mCallback; - private final MenuBuilder mMenu; - private final Rect mContentRect; - private final Rect mContentRectOnScreen; - private final Rect mPreviousContentRectOnScreen; - private final int[] mViewPositionOnScreen; - private final int[] mPreviousViewPositionOnScreen; - private final int[] mRootViewPositionOnScreen; - private final Rect mViewRectOnScreen; - private final Rect mPreviousViewRectOnScreen; - private final Rect mScreenRect; - private final View mOriginatingView; + @NonNull private final Context mContext; + @NonNull private final ActionMode.Callback2 mCallback; + @NonNull private final MenuBuilder mMenu; + @NonNull private final Rect mContentRect; + @NonNull private final Rect mContentRectOnScreen; + @NonNull private final Rect mPreviousContentRectOnScreen; + @NonNull private final int[] mViewPositionOnScreen; + @NonNull private final int[] mPreviousViewPositionOnScreen; + @NonNull private final int[] mRootViewPositionOnScreen; + @NonNull private final Rect mViewRectOnScreen; + @NonNull private final Rect mPreviousViewRectOnScreen; + @NonNull private final Rect mScreenRect; + @NonNull private final View mOriginatingView; + @NonNull private final Point mDisplaySize; private final int mBottomAllowance; - private final Point mDisplaySize; private final Runnable mMovingOff = new Runnable() { public void run() { @@ -75,11 +76,12 @@ public class FloatingActionMode extends ActionMode { } }; - private FloatingToolbar mFloatingToolbar; - private FloatingToolbarVisibilityHelper mFloatingToolbarVisibilityHelper; + @NonNull private FloatingToolbar mFloatingToolbar; + @NonNull private FloatingToolbarVisibilityHelper mFloatingToolbarVisibilityHelper; public FloatingActionMode( - Context context, ActionMode.Callback2 callback, View originatingView) { + Context context, ActionMode.Callback2 callback, + View originatingView, FloatingToolbar floatingToolbar) { mContext = Preconditions.checkNotNull(context); mCallback = Preconditions.checkNotNull(callback); mMenu = new MenuBuilder(context).setDefaultShowAsAction( @@ -110,17 +112,13 @@ public class FloatingActionMode extends ActionMode { mBottomAllowance = context.getResources() .getDimensionPixelSize(R.dimen.content_rect_bottom_clip_allowance); mDisplaySize = new Point(); + setFloatingToolbar(Preconditions.checkNotNull(floatingToolbar)); } - public void setFloatingToolbar(FloatingToolbar floatingToolbar) { + private void setFloatingToolbar(FloatingToolbar floatingToolbar) { mFloatingToolbar = floatingToolbar .setMenu(mMenu) - .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - return mMenu.performItemAction(item, 0); - } - }); + .setOnMenuItemClickListener(item -> mMenu.performItemAction(item, 0)); mFloatingToolbarVisibilityHelper = new FloatingToolbarVisibilityHelper(mFloatingToolbar); mFloatingToolbarVisibilityHelper.activate(); } @@ -142,21 +140,17 @@ public class FloatingActionMode extends ActionMode { @Override public void invalidate() { - checkToolbarInitialized(); mCallback.onPrepareActionMode(this, mMenu); invalidateContentRect(); // Will re-layout and show the toolbar if necessary. } @Override public void invalidateContentRect() { - checkToolbarInitialized(); mCallback.onGetContentRect(this, mOriginatingView, mContentRect); repositionToolbar(); } public void updateViewLocationInWindow() { - checkToolbarInitialized(); - mOriginatingView.getLocationOnScreen(mViewPositionOnScreen); mOriginatingView.getRootView().getLocationOnScreen(mRootViewPositionOnScreen); mOriginatingView.getGlobalVisibleRect(mViewRectOnScreen); @@ -172,8 +166,6 @@ public class FloatingActionMode extends ActionMode { } private void repositionToolbar() { - checkToolbarInitialized(); - mContentRectOnScreen.set(mContentRect); // Offset the content rect into screen coordinates, taking into account any transformations @@ -235,8 +227,6 @@ public class FloatingActionMode extends ActionMode { @Override public void hide(long duration) { - checkToolbarInitialized(); - if (duration == ActionMode.DEFAULT_HIDE_DURATION) { duration = ViewConfiguration.getDefaultActionModeHideDuration(); } @@ -253,14 +243,12 @@ public class FloatingActionMode extends ActionMode { @Override public void onWindowFocusChanged(boolean hasWindowFocus) { - checkToolbarInitialized(); mFloatingToolbarVisibilityHelper.setWindowFocused(hasWindowFocus); mFloatingToolbarVisibilityHelper.updateToolbarVisibility(); } @Override public void finish() { - checkToolbarInitialized(); reset(); mCallback.onDestroyActionMode(this); } @@ -290,14 +278,6 @@ public class FloatingActionMode extends ActionMode { return new MenuInflater(mContext); } - /** - * @throws IllegalStateException - */ - private void checkToolbarInitialized() { - Preconditions.checkState(mFloatingToolbar != null); - Preconditions.checkState(mFloatingToolbarVisibilityHelper != null); - } - private void reset() { mFloatingToolbar.dismiss(); mFloatingToolbarVisibilityHelper.deactivate(); diff --git a/core/java/com/android/internal/widget/FloatingToolbar.java b/core/java/com/android/internal/widget/FloatingToolbar.java index 8c71cf7006ff..40796e156e49 100644 --- a/core/java/com/android/internal/widget/FloatingToolbar.java +++ b/core/java/com/android/internal/widget/FloatingToolbar.java @@ -52,7 +52,6 @@ import android.view.animation.AnimationSet; import android.view.animation.Transformation; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; -import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.ImageView; @@ -67,6 +66,7 @@ import java.util.List; import com.android.internal.R; import com.android.internal.util.Preconditions; +import java.util.Objects; /** * A floating toolbar for showing contextual menu items. @@ -82,12 +82,7 @@ public final class FloatingToolbar { public static final String FLOATING_TOOLBAR_TAG = "floating_toolbar"; private static final MenuItem.OnMenuItemClickListener NO_OP_MENUITEM_CLICK_LISTENER = - new MenuItem.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - return false; - } - }; + item -> false; private final Context mContext; private final Window mWindow; @@ -97,7 +92,7 @@ public final class FloatingToolbar { private final Rect mPreviousContentRect = new Rect(); private Menu mMenu; - private List<Object> mShowingMenuItems = new ArrayList<Object>(); + private List<MenuItem> mShowingMenuItems = new ArrayList<>(); private MenuItem.OnMenuItemClickListener mMenuItemClickListener = NO_OP_MENUITEM_CLICK_LISTENER; private int mSuggestedWidth; @@ -237,7 +232,7 @@ public final class FloatingToolbar { if (!isCurrentlyShowing(menuItems) || mWidthChanged) { mPopup.dismiss(); mPopup.layoutMenuItems(menuItems, mMenuItemClickListener, mSuggestedWidth); - mShowingMenuItems = getShowingMenuItemsReferences(menuItems); + mShowingMenuItems = menuItems; } if (!mPopup.isShowing()) { mPopup.show(mContentRect); @@ -252,7 +247,23 @@ public final class FloatingToolbar { * Returns true if this floating toolbar is currently showing the specified menu items. */ private boolean isCurrentlyShowing(List<MenuItem> menuItems) { - return mShowingMenuItems.equals(getShowingMenuItemsReferences(menuItems)); + if (mShowingMenuItems == null || menuItems.size() != mShowingMenuItems.size()) { + return false; + } + + final int size = menuItems.size(); + for (int i = 0; i < size; i++) { + final MenuItem menuItem = menuItems.get(i); + final MenuItem showingItem = mShowingMenuItems.get(i); + if (menuItem.getItemId() != showingItem.getItemId() + || !TextUtils.equals(menuItem.getTitle(), showingItem.getTitle()) + || !Objects.equals(menuItem.getIcon(), showingItem.getIcon()) + || menuItem.getGroupId() != showingItem.getGroupId()) { + return false; + } + } + + return true; } /** @@ -260,7 +271,7 @@ public final class FloatingToolbar { * This method is recursive. */ private List<MenuItem> getVisibleAndEnabledMenuItems(Menu menu) { - List<MenuItem> menuItems = new ArrayList<MenuItem>(); + List<MenuItem> menuItems = new ArrayList<>(); for (int i = 0; (menu != null) && (i < menu.size()); i++) { MenuItem menuItem = menu.getItem(i); if (menuItem.isVisible() && menuItem.isEnabled()) { @@ -305,22 +316,6 @@ public final class FloatingToolbar { } } - private List<Object> getShowingMenuItemsReferences(List<MenuItem> menuItems) { - List<Object> references = new ArrayList<Object>(); - for (MenuItem menuItem : menuItems) { - if (menuItem.getItemId() != Menu.NONE) { - references.add(menuItem.getItemId()); - } else if (!TextUtils.isEmpty(menuItem.getTitle())) { - references.add(menuItem.getTitle()); - } else if (menuItem.getIcon() != null){ - references.add(menuItem.getIcon()); - } else { - references.add(menuItem); - } - } - return references; - } - private void registerOrientationHandler() { unregisterOrientationHandler(); mWindow.getDecorView().addOnLayoutChangeListener(mOrientationChangeHandler); @@ -383,19 +378,15 @@ public final class FloatingToolbar { private final Point mCoordsOnWindow = new Point(); // popup window coordinates. /* Temporary data holders. Reset values before using. */ private final int[] mTmpCoords = new int[2]; - private final Rect mTmpRect = new Rect(); private final Region mTouchableRegion = new Region(); private final ViewTreeObserver.OnComputeInternalInsetsListener mInsetsComputer = - new ViewTreeObserver.OnComputeInternalInsetsListener() { - public void onComputeInternalInsets( - ViewTreeObserver.InternalInsetsInfo info) { - info.contentInsets.setEmpty(); - info.visibleInsets.setEmpty(); - info.touchableRegion.set(mTouchableRegion); - info.setTouchableInsets(ViewTreeObserver.InternalInsetsInfo - .TOUCHABLE_INSETS_REGION); - } + info -> { + info.contentInsets.setEmpty(); + info.visibleInsets.setEmpty(); + info.touchableRegion.set(mTouchableRegion); + info.setTouchableInsets( + ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION); }; private final int mLineHeight; @@ -1407,18 +1398,15 @@ public final class FloatingToolbar { final ImageButton overflowButton = (ImageButton) LayoutInflater.from(mContext) .inflate(R.layout.floating_popup_overflow_button, null); overflowButton.setImageDrawable(mOverflow); - overflowButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (mIsOverflowOpen) { - overflowButton.setImageDrawable(mToOverflow); - mToOverflow.start(); - closeOverflow(); - } else { - overflowButton.setImageDrawable(mToArrow); - mToArrow.start(); - openOverflow(); - } + overflowButton.setOnClickListener(v -> { + if (mIsOverflowOpen) { + overflowButton.setImageDrawable(mToOverflow); + mToOverflow.start(); + closeOverflow(); + } else { + overflowButton.setImageDrawable(mToArrow); + mToArrow.start(); + openOverflow(); } }); return overflowButton; @@ -1441,13 +1429,10 @@ public final class FloatingToolbar { }; overflowPanel.setAdapter(adapter); - overflowPanel.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView<?> parent, View view, int position, long id) { - MenuItem menuItem = (MenuItem) overflowPanel.getAdapter().getItem(position); - if (mOnMenuItemClickListener != null) { - mOnMenuItemClickListener.onMenuItemClick(menuItem); - } + overflowPanel.setOnItemClickListener((parent, view, position, id) -> { + MenuItem menuItem = (MenuItem) overflowPanel.getAdapter().getItem(position); + if (mOnMenuItemClickListener != null) { + mOnMenuItemClickListener.onMenuItemClick(menuItem); } }); @@ -1479,12 +1464,9 @@ public final class FloatingToolbar { public void onAnimationEnd(Animation animation) { // Posting this because it seems like this is called before the animation // actually ends. - mContentContainer.post(new Runnable() { - @Override - public void run() { - setPanelsStatesAtRestingPosition(); - setContentAreaAsTouchableSurface(); - } + mContentContainer.post(() -> { + setPanelsStatesAtRestingPosition(); + setContentAreaAsTouchableSurface(); }); } diff --git a/core/jni/android/graphics/Shader.cpp b/core/jni/android/graphics/Shader.cpp index 214d97c213e4..5f803da4b23f 100644 --- a/core/jni/android/graphics/Shader.cpp +++ b/core/jni/android/graphics/Shader.cpp @@ -50,11 +50,14 @@ static jint Color_HSVToColor(JNIEnv* env, jobject, jint alpha, jfloatArray hsvAr /////////////////////////////////////////////////////////////////////////////////////////////// -static void Shader_safeUnref(JNIEnv* env, jobject o, jlong shaderHandle) { - SkShader* shader = reinterpret_cast<SkShader*>(shaderHandle); +static void Shader_safeUnref(SkShader* shader) { SkSafeUnref(shader); } +static jlong Shader_getNativeFinalizer(JNIEnv*, jobject) { + return static_cast<jlong>(reinterpret_cast<uintptr_t>(&Shader_safeUnref)); +} + /////////////////////////////////////////////////////////////////////////////////////////////// static jlong BitmapShader_constructor(JNIEnv* env, jobject o, jlong matrixPtr, jobject jbitmap, @@ -284,7 +287,7 @@ static const JNINativeMethod gColorMethods[] = { }; static const JNINativeMethod gShaderMethods[] = { - { "nativeSafeUnref", "(J)V", (void*)Shader_safeUnref }, + { "nativeGetFinalizer", "()J", (void*)Shader_getNativeFinalizer }, }; static const JNINativeMethod gBitmapShaderMethods[] = { diff --git a/graphics/java/android/graphics/ComposeShader.java b/graphics/java/android/graphics/ComposeShader.java index 0b1141a0e505..70a5f53ae1e0 100644 --- a/graphics/java/android/graphics/ComposeShader.java +++ b/graphics/java/android/graphics/ComposeShader.java @@ -76,8 +76,9 @@ public class ComposeShader extends Shader { mShaderA.getNativeInstance(), mShaderB.getNativeInstance(), mPorterDuffMode); } + /** @hide */ @Override - void verifyNativeInstance() { + protected void verifyNativeInstance() { if (mShaderA.getNativeInstance() != mNativeInstanceShaderA || mShaderB.getNativeInstance() != mNativeInstanceShaderB) { // Child shader native instance has been updated, diff --git a/graphics/java/android/graphics/Shader.java b/graphics/java/android/graphics/Shader.java index 8410ab2a1e02..13016ff096aa 100644 --- a/graphics/java/android/graphics/Shader.java +++ b/graphics/java/android/graphics/Shader.java @@ -19,6 +19,8 @@ package android.graphics; import android.annotation.NonNull; import android.annotation.Nullable; +import libcore.util.NativeAllocationRegistry; + /** * Shader is the based class for objects that return horizontal spans of colors * during drawing. A subclass of Shader is installed in a Paint calling @@ -26,6 +28,12 @@ import android.annotation.Nullable; * drawn with that paint will get its color(s) from the shader. */ public class Shader { + + private static class NoImagePreloadHolder { + public static final NativeAllocationRegistry sRegistry = new NativeAllocationRegistry( + Shader.class.getClassLoader(), nativeGetFinalizer(), 50); + } + /** * @deprecated Use subclass constructors directly instead. */ @@ -37,6 +45,8 @@ public class Shader { * is called - otherwise may be out of date with java setters/properties. */ private long mNativeInstance; + // Runnable to do immediate destruction + private Runnable mCleaner; /** * Current matrix - always set to null if local matrix is identity. @@ -105,9 +115,11 @@ public class Shader { return 0; } - void discardNativeInstance() { + /** @hide */ + protected final void discardNativeInstance() { if (mNativeInstance != 0) { - nativeSafeUnref(mNativeInstance); + mCleaner.run(); + mCleaner = null; mNativeInstance = 0; } } @@ -115,20 +127,9 @@ public class Shader { /** * Callback for subclasses to call {@link #discardNativeInstance()} if the most recently * constructed native instance is no longer valid. + * @hide */ - void verifyNativeInstance() { - } - - @Override - protected void finalize() throws Throwable { - try { - if (mNativeInstance != 0) { - nativeSafeUnref(mNativeInstance); - } - mNativeInstance = -1; - } finally { - super.finalize(); - } + protected void verifyNativeInstance() { } /** @@ -150,20 +151,20 @@ public class Shader { /** * @hide */ - public long getNativeInstance() { - if (mNativeInstance == -1) { - throw new IllegalStateException("attempting to use a finalized Shader"); - } - + public final long getNativeInstance() { // verify mNativeInstance is valid verifyNativeInstance(); if (mNativeInstance == 0) { mNativeInstance = createNativeInstance(mLocalMatrix == null ? 0 : mLocalMatrix.native_instance); + mCleaner = NoImagePreloadHolder.sRegistry.registerNativeAllocation( + this, mNativeInstance); } return mNativeInstance; } - private static native void nativeSafeUnref(long nativeInstance); + private static native long nativeGetFinalizer(); + } + diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp index a0366dee3218..2fdfcd42a1e1 100644 --- a/libs/hwui/Caches.cpp +++ b/libs/hwui/Caches.cpp @@ -223,7 +223,6 @@ void Caches::dumpMemoryUsage(String8 &log) { /////////////////////////////////////////////////////////////////////////////// void Caches::clearGarbage() { - textureCache.clearGarbage(); pathCache.clearGarbage(); patchCache.clearGarbage(); } diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp index 63a6a2c8c89c..710cdd9286e8 100644 --- a/libs/hwui/TextureCache.cpp +++ b/libs/hwui/TextureCache.cpp @@ -191,25 +191,14 @@ Texture* TextureCache::get(Bitmap* bitmap) { return texture; } -void TextureCache::releaseTexture(uint32_t pixelRefStableID) { - Mutex::Autolock _l(mLock); - mGarbage.push_back(pixelRefStableID); -} - -void TextureCache::clearGarbage() { - Mutex::Autolock _l(mLock); - size_t count = mGarbage.size(); - for (size_t i = 0; i < count; i++) { - uint32_t pixelRefId = mGarbage[i]; - auto hardwareIter = mHardwareTextures.find(pixelRefId); - if (hardwareIter == mHardwareTextures.end()) { - mCache.remove(pixelRefId); - } else { - hardwareIter->second->deleteTexture(); - mHardwareTextures.erase(hardwareIter); - } +bool TextureCache::destroyTexture(uint32_t pixelRefStableID) { + auto hardwareIter = mHardwareTextures.find(pixelRefStableID); + if (hardwareIter != mHardwareTextures.end()) { + hardwareIter->second->deleteTexture(); + mHardwareTextures.erase(hardwareIter); + return true; } - mGarbage.clear(); + return mCache.remove(pixelRefStableID); } void TextureCache::clear() { diff --git a/libs/hwui/TextureCache.h b/libs/hwui/TextureCache.h index db4ff39aed83..776ff8a03fd1 100644 --- a/libs/hwui/TextureCache.h +++ b/libs/hwui/TextureCache.h @@ -94,14 +94,10 @@ public: Texture* get(Bitmap* bitmap); /** - * Removes the texture associated with the specified pixelRef. This is meant - * to be called from threads that are not the EGL context thread. + * Removes the texture associated with the specified pixelRef. Must be called from RenderThread + * Returns true if a texture was destroyed, false if no texture with that id was found */ - ANDROID_API void releaseTexture(uint32_t pixelRefStableID); - /** - * Process deferred removals. - */ - void clearGarbage(); + bool destroyTexture(uint32_t pixelRefStableID); /** * Clears the cache. This causes all textures to be deleted. @@ -139,9 +135,7 @@ private: bool mDebugEnabled; - std::vector<uint32_t> mGarbage; std::unordered_map<uint32_t, std::unique_ptr<Texture>> mHardwareTextures; - mutable Mutex mLock; }; // class TextureCache }; // namespace uirenderer diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp index d765584a7530..bb1e674d4861 100644 --- a/libs/hwui/hwui/Bitmap.cpp +++ b/libs/hwui/hwui/Bitmap.cpp @@ -416,9 +416,7 @@ Bitmap::~Bitmap() { } - if (android::uirenderer::Caches::hasInstance()) { - android::uirenderer::Caches::getInstance().textureCache.releaseTexture(getStableID()); - } + android::uirenderer::renderthread::RenderProxy::onBitmapDestroyed(getStableID()); } bool Bitmap::hasHardwareMipMap() const { @@ -486,7 +484,13 @@ void Bitmap::setAlphaType(SkAlphaType alphaType) { void Bitmap::getSkBitmap(SkBitmap* outBitmap) { outBitmap->setHasHardwareMipMap(mHasHardwareMipMap); if (isHardware()) { - outBitmap->allocPixels(info()); + if (uirenderer::Properties::isSkiaEnabled()) { + // TODO: add color correctness for Skia pipeline - pass null color space for now + outBitmap->allocPixels(SkImageInfo::Make(info().width(), info().height(), + info().colorType(), info().alphaType(), nullptr)); + } else { + outBitmap->allocPixels(info()); + } uirenderer::renderthread::RenderProxy::copyGraphicBufferInto(graphicBuffer(), outBitmap); return; } @@ -495,9 +499,13 @@ void Bitmap::getSkBitmap(SkBitmap* outBitmap) { } void Bitmap::getSkBitmapForShaders(SkBitmap* outBitmap) { - outBitmap->setInfo(info(), rowBytes()); - outBitmap->setPixelRef(this); - outBitmap->setHasHardwareMipMap(mHasHardwareMipMap); + if (isHardware() && uirenderer::Properties::isSkiaEnabled()) { + getSkBitmap(outBitmap); + } else { + outBitmap->setInfo(info(), rowBytes()); + outBitmap->setPixelRef(this); + outBitmap->setHasHardwareMipMap(mHasHardwareMipMap); + } } void Bitmap::getBounds(SkRect* bounds) const { diff --git a/libs/hwui/renderstate/RenderState.cpp b/libs/hwui/renderstate/RenderState.cpp index c8833d2a7489..b89272ebd486 100644 --- a/libs/hwui/renderstate/RenderState.cpp +++ b/libs/hwui/renderstate/RenderState.cpp @@ -122,6 +122,13 @@ void RenderState::flush(Caches::FlushMode mode) { mCaches->flush(mode); } +void RenderState::onBitmapDestroyed(uint32_t pixelRefId) { + if (mCaches->textureCache.destroyTexture(pixelRefId)) { + glFlush(); + GL_CHECKPOINT(MODERATE); + } +} + void RenderState::setViewport(GLsizei width, GLsizei height) { mViewportWidth = width; mViewportHeight = height; diff --git a/libs/hwui/renderstate/RenderState.h b/libs/hwui/renderstate/RenderState.h index f78bf7a4e088..787946f79f6b 100644 --- a/libs/hwui/renderstate/RenderState.h +++ b/libs/hwui/renderstate/RenderState.h @@ -63,6 +63,7 @@ public: void onVkContextDestroyed(); void flush(Caches::FlushMode flushMode); + void onBitmapDestroyed(uint32_t pixelRefId); void setViewport(GLsizei width, GLsizei height); void getViewport(GLsizei* outWidth, GLsizei* outHeight); diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index a1f1717e6b96..eed523810403 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -24,6 +24,7 @@ #include "renderthread/EglManager.h" #include "renderthread/RenderTask.h" #include "renderthread/RenderThread.h" +#include "renderstate/RenderState.h" #include "utils/Macros.h" #include "utils/TimeUtils.h" @@ -693,6 +694,20 @@ int RenderProxy::copyGraphicBufferInto(GraphicBuffer* buffer, SkBitmap* bitmap) } } +CREATE_BRIDGE2(onBitmapDestroyed, RenderThread* thread, uint32_t pixelRefId) { + args->thread->renderState().onBitmapDestroyed(args->pixelRefId); + return nullptr; +} + +void RenderProxy::onBitmapDestroyed(uint32_t pixelRefId) { + if (!RenderThread::hasInstance()) return; + SETUP_TASK(onBitmapDestroyed); + RenderThread& thread = RenderThread::getInstance(); + args->thread = &thread; + args->pixelRefId = pixelRefId; + thread.queue(task); +} + void RenderProxy::post(RenderTask* task) { mRenderThread.queue(task); } diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h index a60ed55c70d2..b21772cd88de 100644 --- a/libs/hwui/renderthread/RenderProxy.h +++ b/libs/hwui/renderthread/RenderProxy.h @@ -135,6 +135,8 @@ public: static sk_sp<Bitmap> allocateHardwareBitmap(SkBitmap& bitmap); static int copyGraphicBufferInto(GraphicBuffer* buffer, SkBitmap* bitmap); + + static void onBitmapDestroyed(uint32_t pixelRefId); private: RenderThread& mRenderThread; CanvasContext* mContext; diff --git a/packages/SettingsLib/res/color/batterymeter_frame_color.xml b/packages/SettingsLib/res/color/meter_background_color.xml index 34de5489a28b..34de5489a28b 100644 --- a/packages/SettingsLib/res/color/batterymeter_frame_color.xml +++ b/packages/SettingsLib/res/color/meter_background_color.xml diff --git a/packages/SettingsLib/res/color/batterymeter_charge_color.xml b/packages/SettingsLib/res/color/meter_consumed_color.xml index 15944c3a2a07..15944c3a2a07 100644 --- a/packages/SettingsLib/res/color/batterymeter_charge_color.xml +++ b/packages/SettingsLib/res/color/meter_consumed_color.xml diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index e89b21aed295..4f5281251314 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Agtergrondproses-limiet"</string> <string name="show_all_anrs" msgid="28462979638729082">"Wys alle ANRe"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Wys Program reageer nie-dialoog vir agtergrond programme"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Programme verplig ekstern toegelaat"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Maak dat enige program in eksterne berging geskryf kan word, ongeag manifeswaardes"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Verplig verstelbare groottes vir aktiwiteite"</string> diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index d8150d197125..465e253de9d9 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"የዳራ አሂድ ወሰን"</string> <string name="show_all_anrs" msgid="28462979638729082">"ሁሉንም ANRs አሳይ"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"ለዳራ መተግበሪያዎች ምላሽ የማይሰጥ መገናኛ ትግበራ አሳይ"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"በውጫዊ ላይ ሃይል ይፈቀዳል"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"የዝርዝር ሰነዶች እሴቶች ግምት ውስጥ ሳያስገባ ማንኛውም መተግበሪያ ወደ ውጫዊ ማከማቻው ለመጻፍ ብቁ ያደርጋል"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"እንቅስቃሴዎች ዳግመኛ እንዲመጣጠኑ አስገድድ"</string> diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index 034653ffb54a..a4ee8fd5568c 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"حد العمليات بالخلفية"</string> <string name="show_all_anrs" msgid="28462979638729082">"عرض جميع رسائل ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"عرض مربع الحوار \"التطبيق لا يستجيب\" مع تطبيقات الخلفية"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"فرض السماح للتطبيقات على الخارجي"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"تأهيل أي تطبيق بحيث تتم كتابته على وحدة تخزين خارجية، بغض النظر عن قيم البيان"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"فرض إمكانية تغيير على الأنشطة"</string> diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml index 603f6918d89d..690e589e229e 100644 --- a/packages/SettingsLib/res/values-az/strings.xml +++ b/packages/SettingsLib/res/values-az/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Fon prosesi limiti"</string> <string name="show_all_anrs" msgid="28462979638729082">"Bütün ANRları göstər"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Arxa tətbiqlər dialoquna cavab verməyən tətbiqi göstər"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Tətbiqlərə xaricdən məcburi icazə"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Seçilmiş hər hansı tətbiqi bəyannamə dəyərlərindən aslı olmayaraq xarici yaddaşa yazılabilən edir."</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Ölçü dəyişdirmək üçün məcburi fəaliyyətlər"</string> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index 70c6e471999c..e59dac6e1c52 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Ograničenje pozadinskih procesa"</string> <string name="show_all_anrs" msgid="28462979638729082">"Prikaži sve ANR-ove"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Prikaži dijalog Aplikacija ne reaguje za aplikacije u pozadini"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Prinudno dozvoli aplikacije u spoljnoj"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Omogućava upisivanje svih aplikacija u spoljnu memoriju, bez obzira na vrednosti manifesta"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Prinudno omogući promenu veličine aktivnosti"</string> diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml index f8eec7f237c2..b1ec867876c3 100644 --- a/packages/SettingsLib/res/values-be/strings.xml +++ b/packages/SettingsLib/res/values-be/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Ліміт фонавага працэсу"</string> <string name="show_all_anrs" msgid="28462979638729082">"Паказаць усе ANRS"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Паказаць дыялогавае акно \"Праграма не адказвае\" для фонавых прыкладанняў"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Прымусова дазволіць праграмы на вонкавым сховішчы"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Робіць любую праграму даступнай для запісу на вонкавае сховішча, незалежна ад значэнняў маніфеста"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Зрабіць вокны дзеянняў даступнымі для змены памеру"</string> diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index 53c50b91dc81..a8039eb0a8bc 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Лимит за фонови процеси"</string> <string name="show_all_anrs" msgid="28462979638729082">"Всички нереагиращи прил."</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Диалог. прозорец „НП“ за приложения на заден план"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Външно хран.: Принуд. разрешаване на приложенията"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Прави всички приложения да отговарят на условията да бъдат записвани във външното хранилище независимо от стойностите в манифеста"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Възможност за преоразмеряване на активностите"</string> diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml index 841c96eeda9b..3f0de25ba7f2 100644 --- a/packages/SettingsLib/res/values-bn/strings.xml +++ b/packages/SettingsLib/res/values-bn/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"পশ্চাদপট প্রক্রিয়ার সীমা"</string> <string name="show_all_anrs" msgid="28462979638729082">"সব ANR দেখান"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"পশ্চাদপটের অ্যাপ্লিকেশানগুলির জন্য অ্যাপ্লিকেশান কোনো প্রতিক্রিয়া দিচ্ছে না এমন কথোপকথন দেখান"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"বহিরাগততে বলপূর্বক মঞ্জুরি"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"ম্যানিফেস্ট মানগুলি নির্বিশেষে যেকোনো অ্যাপ্লিকেশানকে বাহ্যিক সঞ্চয়স্থানে লেখার উপযুক্ত বানায়"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"আকার পরিবর্তনযোগ্য করার জন্য ক্রিয়াকলাপগুলিকে জোর করুন"</string> diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml index 451a1ff51186..f91a8a8f559c 100644 --- a/packages/SettingsLib/res/values-bs/strings.xml +++ b/packages/SettingsLib/res/values-bs/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Ograničenje procesa u pozadini"</string> <string name="show_all_anrs" msgid="28462979638729082">"Prikaži sve ANR-ove"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Prik. dijalog Aplikacija ne reagira za apl. u poz."</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Nametni aplikacije na vanjskoj pohrani"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Omogućava da svaka aplikacija bude pogodna za upisivanje na vanjsku pohranu, bez obzira na prikazane vrijednosti"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Nametni aktivnostima mijenjanje veličina"</string> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index 2a4db1d51694..99c5d37bd2c5 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Límita processos en segon pla"</string> <string name="show_all_anrs" msgid="28462979638729082">"Tots els errors sense resposta"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Informa que una aplicació en segon pla no respon"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Força permís d\'aplicacions a l\'emmagatzem. extern"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Permet que qualsevol aplicació es pugui escriure en un dispositiu d’emmagatzematge extern, independentment dels valors definits"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Força l\'ajust de la mida de les activitats"</string> diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml index 673d51b7fb46..7b3fb86ff72d 100644 --- a/packages/SettingsLib/res/values-cs/strings.xml +++ b/packages/SettingsLib/res/values-cs/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Omezení procesů na pozadí"</string> <string name="show_all_anrs" msgid="28462979638729082">"Zobrazit všechny ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Zobrazovat dialog „Aplikace neodpovídá“ pro aplikace na pozadí"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Vynutit povolení aplikací na externím úložišti"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Každou aplikaci bude možné zapsat do externího úložiště, bez ohledu na hodnoty manifestu"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Vynutit možnost změny velikosti aktivit"</string> diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index aa0becf5190e..6ccf45baf308 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Grænse for baggrundsprocesser"</string> <string name="show_all_anrs" msgid="28462979638729082">"Vis alle \"Appen svarer ikke\""</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Vis \"Appen svarer ikke\" for baggrundsapps"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Gennemtving tilladelse til eksternt lager"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Gør det muligt at overføre enhver app til et eksternt lager uafhængigt af manifestværdier"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Tving aktiviteter til at kunne tilpasses"</string> diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index 0a2cf3353a32..db58ab2886f9 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Hintergrundprozesslimit"</string> <string name="show_all_anrs" msgid="28462979638729082">"Alle ANRS anzeigen"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Dialogfeld \"App antwortet nicht\" für Hintergrund-Apps anzeigen"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Externe Speichernutzung von Apps erlauben"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Ermöglicht es jeder qualifizierten App, Daten auf externen Speicher zu schreiben, unabhängig von den Manifestwerten"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Anpassen der Größe von Aktivitäten erzwingen"</string> diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index 24d3bf4c2ca2..cde206669b31 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Όριο διεργασ. παρασκηνίου"</string> <string name="show_all_anrs" msgid="28462979638729082">"Εμφάνιση όλων των ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Εμφ.του παραθ. \"Η εφαρμ.δεν αποκρ.\" για εφ.παρασκ."</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Να επιτρέπονται υποχρεωτικά εφαρμογές σε εξωτ.συσ."</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Κάνει κάθε εφαρμογή κατάλληλη για εγγραφή σε εξωτερικό αποθηκευτικό χώρο, ανεξάρτητα από τις τιμές του μανιφέστου"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Αναγκαστική δυνατότητα αλλαγής μεγέθους δραστηριοτήτων"</string> diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index 6b9daf7b7085..b25254575d7c 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Background process limit"</string> <string name="show_all_anrs" msgid="28462979638729082">"Show all ANRs"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Show App Not Responding dialogue for background apps"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Force allow apps on external"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Makes any app eligible to be written to external storage, regardless of manifest values"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Force activities to be re-sizable"</string> diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index 6b9daf7b7085..b25254575d7c 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Background process limit"</string> <string name="show_all_anrs" msgid="28462979638729082">"Show all ANRs"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Show App Not Responding dialogue for background apps"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Force allow apps on external"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Makes any app eligible to be written to external storage, regardless of manifest values"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Force activities to be re-sizable"</string> diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index 6b9daf7b7085..b25254575d7c 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Background process limit"</string> <string name="show_all_anrs" msgid="28462979638729082">"Show all ANRs"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Show App Not Responding dialogue for background apps"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Force allow apps on external"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Makes any app eligible to be written to external storage, regardless of manifest values"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Force activities to be re-sizable"</string> diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index 1464d442533c..03d8cea9b160 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Límite de procesos en segundo plano"</string> <string name="show_all_anrs" msgid="28462979638729082">"Errores sin respuesta"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Mostrar diálogo cuando las aplic. en 2do plano no responden"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Forzar permisos en almacenamiento externo"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Cualquier app puede escribirse en un almacenamiento externo, sin importar los valores del manifiesto"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forzar actividades para que cambien de tamaño"</string> diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml index 39d4a7609bda..00dbf9c86df3 100644 --- a/packages/SettingsLib/res/values-es/strings.xml +++ b/packages/SettingsLib/res/values-es/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Límitar procesos en segundo plano"</string> <string name="show_all_anrs" msgid="28462979638729082">"Errores sin respuesta"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Informar de que una aplicación en segundo plano no responde"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Forzar permiso de aplicaciones de forma externa"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Hace que cualquier aplicación se pueda escribir en un dispositivo de almacenamiento externo, independientemente de los valores definidos"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forzar el ajuste de tamaño de las actividades"</string> diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml index 36d19effba1c..4d0f5f653a18 100644 --- a/packages/SettingsLib/res/values-et/strings.xml +++ b/packages/SettingsLib/res/values-et/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Taustaprotsesside piir"</string> <string name="show_all_anrs" msgid="28462979638729082">"Näita kõiki ANR-e"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Kuva taustarakendustele dial. Rakendus ei reageeri"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Luba rakendused välises salvestusruumis"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Lubab mis tahes rakendusi kirjutada välisesse salvestusruumi manifesti väärtustest olenemata"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Muuda tegevuste suurused muudetavaks"</string> diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml index fd20d47eecb9..6ed2d75af9f5 100644 --- a/packages/SettingsLib/res/values-eu/strings.xml +++ b/packages/SettingsLib/res/values-eu/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Atzeko planoko prozesuen muga"</string> <string name="show_all_anrs" msgid="28462979638729082">"Erakutsi ANR guztiak"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"\"Erantzunik ez\" mezua atz. planoko aplikazioetarako"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Behartu aplikazioak onartzea kanpoko biltegian"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Aplikazioek kanpoko memorian idatz dezakete, manifestuaren balioak kontuan izan gabe"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Behartu jardueren tamaina doitu ahal izatea"</string> diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index 65fe22ca14af..bb10b381d508 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"محدودیت پردازش در پسزمینه"</string> <string name="show_all_anrs" msgid="28462979638729082">"نمایش تمام ANRها"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"نمایش گفتگوی \"برنامه پاسخ نمیدهد\" برای برنامههای پسزمینه"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"اجازه اجباری به برنامههای دستگاه ذخیره خارجی"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"بدون توجه به مقادیر مانیفست، هر برنامهای را برای نوشتن در حافظه خارجی واجد شرایط میکند"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"اجبار فعالیتها به قابل تغییر اندازه بودن"</string> diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index d306e2300dbd..7dd2e5837bc4 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Taustaprosessi"</string> <string name="show_all_anrs" msgid="28462979638729082">"Näytä kaikki ANR:t"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Näytä Sovellus ei vastaa -ikkuna taustasovell."</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Salli aina ulkoinen tallennus"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Mahdollistaa sovelluksen tietojen tallentamisen ulkoiseen tallennustilaan luetteloarvoista riippumatta."</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Pakota kaikki toiminnot hyväksymään koon muutos"</string> diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index f85158105793..5641d7c576b1 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Limite processus arr.-plan"</string> <string name="show_all_anrs" msgid="28462979638729082">"Afficher tous les messages «L\'application ne répond pas»"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Afficher « L\'application ne répond plus » pour applis en arrière-plan"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Forcer l\'autor. d\'applis sur stockage externe"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Rend possible l\'enregistrement de toute application sur un espace de stockage externe, indépendamment des valeurs du fichier manifeste"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forcer les activités à être redimensionnables"</string> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index c69f3243797f..b0b532f555a8 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Limite processus arr.-plan"</string> <string name="show_all_anrs" msgid="28462979638729082">"Afficher tous les messages ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Afficher \"L\'application ne répond plus\" pour applis en arrière-plan"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Forcer disponibilité stockage externe pour applis"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Rend possible l\'enregistrement de toute application sur un espace de stockage externe, indépendamment des valeurs du fichier manifeste."</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forcer possibilité de redimensionner les activités"</string> diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index 399199da74c2..81a1ca943133 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Límite proceso 2º plano"</string> <string name="show_all_anrs" msgid="28462979638729082">"Mostrar todos os ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Informa que aplicación segundo plano non responde"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Forzar permiso de aplicacións de forma externa"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Permite que calquera aplicación apta se poida escribir nun almacenamento externo, independentemente dos valores expresados"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forzar o axuste do tamaño das actividades"</string> diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml index df9eda94154c..e4e1507d79ef 100644 --- a/packages/SettingsLib/res/values-gu/strings.xml +++ b/packages/SettingsLib/res/values-gu/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"પૃષ્ઠભૂમિ પ્રક્રિયા સીમા"</string> <string name="show_all_anrs" msgid="28462979638729082">"બધા ANR બતાવો"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"પૃષ્ઠભૂમિ ઍપ્લિકેશનો માટે ઍપ્લિકેશન પ્રતિસાદ આપતી નથી સંવાદ બતાવો"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"બાહ્ય પર એપ્લિકેશનોને મંજૂરી આપવાની ફરજ પાડો"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"મેનિફેસ્ટ મૂલ્યોને ધ્યાનમાં લીધા સિવાય, કોઈપણ ઍપ્લિકેશનને બાહ્ય સ્ટોરેજ પર લખાવા માટે લાયક બનાવે છે"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"પ્રવૃત્તિઓને ફરીથી કદ યોગ્ય થવા માટે ફરજ પાડો"</string> diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml index c729027623ae..936e7755df8d 100644 --- a/packages/SettingsLib/res/values-hi/strings.xml +++ b/packages/SettingsLib/res/values-hi/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"पृष्ठभूमि प्रक्रिया सीमा"</string> <string name="show_all_anrs" msgid="28462979638729082">"सभी ANR दिखाएं"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"पृष्ठभूमि ऐप्स के लिए ऐप्स प्रतिसाद नहीं दे रहा डॉयलॉग दिखाएं"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"ऐप्स को बाहरी मेमोरी पर बाध्य करें"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"इससे कोई भी ऐप्लिकेशन, मेनिफेस्ट मानों को अनदेखा करके, बाहरी मेमोरी पर लिखने योग्य बन जाता है"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"आकार बदले जाने के लिए गतिविधियों को बाध्य करें"</string> diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml index e94b6df09c50..be4ac19cd35d 100644 --- a/packages/SettingsLib/res/values-hr/strings.xml +++ b/packages/SettingsLib/res/values-hr/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Ograničenje pozadinskog procesa"</string> <string name="show_all_anrs" msgid="28462979638729082">"Prikaži sve ANR-ove"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Prikaz dijaloga o pozad. aplik. koja ne odgovara"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Prisilno dopusti aplikacije u vanjskoj pohrani"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Aplikacije se mogu zapisivati u vanjsku pohranu neovisno o vrijednostima manifesta"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Nametni mogućnost promjene veličine za aktivnosti"</string> diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml index d06417f38375..b791178bcfc1 100644 --- a/packages/SettingsLib/res/values-hu/strings.xml +++ b/packages/SettingsLib/res/values-hu/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Háttérfolyamat-korlátozás"</string> <string name="show_all_anrs" msgid="28462979638729082">"Összes ANR mutatása"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Az Alkalmazás nem válaszol ablak megjelenítése"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Külső tárhely alkalmazásainak engedélyezése"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Lehetővé teszi bármely alkalmazás külső tárhelyre való írását a jegyzékértékektől függetlenül"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Tevékenységek átméretezésének kényszerítése"</string> diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml index 8dd85c3c80e4..da34cccd2af9 100644 --- a/packages/SettingsLib/res/values-hy/strings.xml +++ b/packages/SettingsLib/res/values-hy/strings.xml @@ -91,11 +91,11 @@ <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Հեռացված ծրագրեր"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Հեռացված հավելվածներն ու օգտատերերը"</string> - <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB միացում"</string> + <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB մոդեմ"</string> <string name="tether_settings_title_wifi" msgid="3277144155960302049">"Դյուրակիր թեժ կետ"</string> - <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Bluetooth-ը կապվում է"</string> - <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Միացում"</string> - <string name="tether_settings_title_all" msgid="8356136101061143841">"Միացում և շարժական թեժ կետ"</string> + <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Bluetooth մոդեմ"</string> + <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Մոդեմի ռեժիմ"</string> + <string name="tether_settings_title_all" msgid="8356136101061143841">"Մոդեմի ռեժիմ"</string> <string name="managed_user_title" msgid="8109605045406748842">"Բոլոր աշխատանքային հավելվածները"</string> <string name="user_guest" msgid="8475274842845401871">"Հյուր"</string> <string name="unknown" msgid="1592123443519355854">"Անհայտ"</string> @@ -149,7 +149,7 @@ <string name="development_settings_summary" msgid="1815795401632854041">"Կարգավորել ընտրանքները ծրագրի ծրագրավորման համար"</string> <string name="development_settings_not_available" msgid="4308569041701535607">"Ծրագրավորման ընտրանքներն այլևս հասանելի չեն այս օգտատիրոջ"</string> <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN-ի կարգավորումները հասանելի չեն այս օգտատիրոջը"</string> - <string name="tethering_settings_not_available" msgid="6765770438438291012">"Միակցման կարգավորումները հասանելի չեն այս օգտատիրոջը"</string> + <string name="tethering_settings_not_available" msgid="6765770438438291012">"Այս օգտատերը չի կարող փոխել մոդեմի ռեժիմի կարգավորումները"</string> <string name="apn_settings_not_available" msgid="7873729032165324000">"Մատչման կետի անվան կարգավորումները հասանելի չեն այս օգտատիրոջը"</string> <string name="enable_adb" msgid="7982306934419797485">"USB վրիպազերծում"</string> <string name="enable_adb_summary" msgid="4881186971746056635">"Կարգաբերել ռեժիմը, երբ USB-ն միացված է"</string> @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Հետնաշերտի գործընթացի սահմանաչափ"</string> <string name="show_all_anrs" msgid="28462979638729082">"Ցույց տալ բոլոր ANR-երը"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Ցուցադրել այն ծրագիրը, որը չի արձագանքում երկխոսությունը հետնաշերտի ծրագրերի համար"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Միշտ թույլատրել ծրագրեր արտաքին պահեստում"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Թույլ է տալիս ցանկացած հավելված պահել արտաքին սարքում՝ մանիֆեստի արժեքներից անկախ"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Ստիպել, որ ակտիվությունների չափերը լինեն փոփոխելի"</string> diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index 9e7355beddc6..13407fe79c48 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Batas proses latar blkg"</string> <string name="show_all_anrs" msgid="28462979638729082">"Tampilkan semua ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Tmplkn dialog Apl Tidak Merespons utk apl ltr blkg"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Paksa izinkan aplikasi di eksternal"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Membuat semua aplikasi dapat ditulis ke penyimpanan eksternal, terlepas dari nilai manifes"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Paksa aktivitas agar ukurannya dapat diubah"</string> diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml index d4fde8a1796e..6457e71306a6 100644 --- a/packages/SettingsLib/res/values-is/strings.xml +++ b/packages/SettingsLib/res/values-is/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Takmörkun á bakgrunnsvinnslum"</string> <string name="show_all_anrs" msgid="28462979638729082">"Öll forrit sem svara ekki"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Sýna „Forrit svarar ekki“ fyrir bakgrunnsforrit"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Þvinga fram leyfi forrita í ytri geymslu"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Gerir öll forrit skrifanleg í ytra geymslurými, óháð gildum í upplýsingaskrá"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Þvinga breytanlega stærð virkni"</string> diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index 0ebe77e54991..518273018044 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Limite processi background"</string> <string name="show_all_anrs" msgid="28462979638729082">"Mostra tutti errori ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Mostra finestra ANR per applicazioni in background"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Forza autorizzazione app su memoria esterna"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Consente l\'installazione di qualsiasi app su memoria esterna, indipendentemente dai valori manifest"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Imponi formato modificabile alle attività"</string> diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index 182d819d1991..249fac472996 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"מגבלה של תהליכים ברקע"</string> <string name="show_all_anrs" msgid="28462979638729082">"הצג את כל פריטי ה-ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"הצג תיבת דו-שיח של \'אפליקציה לא מגיבה\' עבור אפליקציות שפועלות ברקע"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"אילוץ הרשאת אפליקציות באחסון חיצוני"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"מאפשר כתיבה של כל אפליקציה באחסון חיצוני, ללא התחשבות בערכי המניפסט"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"אלץ יכולת קביעת גודל של הפעילויות"</string> diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index 440b04d8d120..8837e9734d3e 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"バックグラウンドプロセスの上限"</string> <string name="show_all_anrs" msgid="28462979638729082">"すべてのANRを表示"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"バックグラウンドアプリが応答しない場合に通知する"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"外部ストレージへのアプリの書き込みを許可"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"マニフェストの値に関係なく、すべてのアプリを外部ストレージに書き込めるようになります"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"アクティビティをサイズ変更可能にする"</string> diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml index 08e644950e22..81416a0ae0b2 100644 --- a/packages/SettingsLib/res/values-ka/strings.xml +++ b/packages/SettingsLib/res/values-ka/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"ფონური პროცესების ლიმიტი"</string> <string name="show_all_anrs" msgid="28462979638729082">"ყველა ANR-ის ჩვენება"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"შეტყობინების ჩვენება, როცა ფონური აპლიკაცია არ პასუხობს"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"აპების დაშვება გარე მეხსიერებაში"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"აპები ჩაიწერება გარე მეხსიერებაზე აღწერის ფაილების მნიშვნელობების მიუხედავად"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"ზომაცვლადი აქტივობების იძულება"</string> diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml index cc8b6624a90a..66b4a0e2cb51 100644 --- a/packages/SettingsLib/res/values-kk/strings.xml +++ b/packages/SettingsLib/res/values-kk/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Фондық үрдіс шектеуі"</string> <string name="show_all_anrs" msgid="28462979638729082">"Барлық ANR (қолданба жауап бермеді) хабарларын көрсетіңіз"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Фондық қолданбалардың жауап бермегенін көрсету"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Сыртқыда қолданбаларға мәжбүрлеп рұқсат ету"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Манифест мәндеріне қарамастан кез келген қолданбаны сыртқы жадқа жазуға жарамды етеді"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Әрекеттерді өлшемін өзгертуге болатын етуге мәжбүрлеу"</string> diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml index 917415cac630..1adc4320dc4a 100644 --- a/packages/SettingsLib/res/values-km/strings.xml +++ b/packages/SettingsLib/res/values-km/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"ដែនកំណត់ដំណើរការក្នុងផ្ទៃខាងក្រោយ"</string> <string name="show_all_anrs" msgid="28462979638729082">"បង្ហាញ ANRs ទាំងអស់"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"បង្ហាញប្រអប់កម្មវិធីមិនឆ្លើយតបសម្រាប់កម្មវិធីផ្ទៃខាងក្រោយ"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"បង្ខំឲ្យអនុញ្ញាតកម្មវិធីលើឧបករណ៍ផ្ទុកខាងក្រៅ"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"ធ្វើឲ្យកម្មវិធីទាំងឡាយមានសិទ្ធិសរសេរទៅកាន់ឧបករណ៍ផ្ទុកខាងក្រៅ ដោយមិនគិតពីតម្លៃជាក់លាក់"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"បង្ខំឲ្យសកម្មភាពអាចប្តូរទំហំបាន"</string> diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml index 0120658ab35f..c545da7d0098 100644 --- a/packages/SettingsLib/res/values-kn/strings.xml +++ b/packages/SettingsLib/res/values-kn/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"ಹಿನ್ನೆಲೆ ಪ್ರಕ್ರಿಯೆ ಮಿತಿ"</string> <string name="show_all_anrs" msgid="28462979638729082">"ಎಲ್ಲ ANR ಗಳನ್ನು ತೋರಿಸು"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"ಹಿನ್ನೆಲೆ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ಅಪ್ಲಿಕೇಶನ್ ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತಿಲ್ಲ ಎಂಬ ಸಂಭಾಷಣೆ ತೋರಿಸು"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"ಬಾಹ್ಯವಾಗಿ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಒತ್ತಾಯವಾಗಿ ಅನುಮತಿಸಿ"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"ಮ್ಯಾನಿಫೆಸ್ಟ್ ಮೌಲ್ಯಗಳು ಯಾವುದೇ ಆಗಿದ್ದರೂ, ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆಗೆ ಬರೆಯಲು ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಅರ್ಹಗೊಳಿಸುತ್ತದೆ"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"ಚಟುವಟಿಕೆಗಳನ್ನು ಮರುಗಾತ್ರಗೊಳಿಸುವಂತೆ ಒತ್ತಾಯ ಮಾಡಿ"</string> diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml index c5f842ec78f0..bbaeed7bf902 100644 --- a/packages/SettingsLib/res/values-ko/strings.xml +++ b/packages/SettingsLib/res/values-ko/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"백그라운드 프로세스 수 제한"</string> <string name="show_all_anrs" msgid="28462979638729082">"모든 ANR 보기"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"백그라운드 앱에 대해 앱 응답 없음 대화상자 표시"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"외부에서 앱 강제 허용"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"매니페스트 값과 관계없이 모든 앱이 외부 저장소에 작성되도록 허용"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"활동의 크기가 조정 가능하도록 설정"</string> diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index 492f71d05281..66f376970b22 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Фондогу процесстер чеги"</string> <string name="show_all_anrs" msgid="28462979638729082">"Бардык ANR\'лерди көрсөтүү"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Фондогу колдонмолорго Колдонмо Жооп Бербейт деп көрсөтүү"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Тышкы сактагычка сактоого уруксат берүү"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Манифест маанилерине карабастан бардык колдонмолорду тышкы сактагычка сактоого уруксат берет"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Аракеттердин өлчөмүн өзгөртүүнү мажбурлоо"</string> diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml index 5abd2a6cadf7..c909cbb6859e 100644 --- a/packages/SettingsLib/res/values-lo/strings.xml +++ b/packages/SettingsLib/res/values-lo/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"ການຈຳກັດໂປຣເຊສໃນພື້ນຫຼັງ"</string> <string name="show_all_anrs" msgid="28462979638729082">"ສະແດງ ANRs ທັງຫມົດ"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"ສະແດງໜ້າຈໍແອັບຯທີ່ບໍ່ຕອບສະໜອງສຳລັບແອັບຯພື້ນຫຼັງ"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"ບັງຄັບອະນຸຍາດແອັບຢູ່ພາຍນອກ"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"ເຮັດໃຫ້ທຸກແອັບມີສິດໄດ້ຮັບການຂຽນໃສ່ພື້ນທີ່ຈັດເກັບຂໍ້ມູນພາຍນອກ, ໂດຍບໍ່ຄຳນຶງເຖິງຄ່າ manifest"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"ບັງຄັງໃຫ້ກິດຈະກຳປ່ຽນຂະໜາດໄດ້"</string> diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index 830abf018c70..274ce9ad374f 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Fono procesų apribojimas"</string> <string name="show_all_anrs" msgid="28462979638729082">"Rodyti visus ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Fon. programose rodyti dialogo langą „Neatsako“"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Priverstinai leisti programas išorinėje atmintin."</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Nustatoma, kad visas programas būtų galima įrašyti į išorinę saugyklą, nepaisant aprašo verčių"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Priv. nust., kad veiksm. b. g. atl. kelių d. lang."</string> diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml index 57499545d4a5..e760d780dd6c 100644 --- a/packages/SettingsLib/res/values-lv/strings.xml +++ b/packages/SettingsLib/res/values-lv/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Fona procesu ierobežojums"</string> <string name="show_all_anrs" msgid="28462979638729082">"Rādīt visus ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Rādīt fona lietotņu dialoglodz. Lietotne nereaģē"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Lietotņu piespiedu atļaušana ārējā krātuvē"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Ļauj jebkuru lietotni ierakstīt ārējā krātuvē neatkarīgi no manifesta vērtības."</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Pielāgot darbības"</string> diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml index 88b36753e6c7..19794519c81d 100644 --- a/packages/SettingsLib/res/values-mk/strings.xml +++ b/packages/SettingsLib/res/values-mk/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Граница на процес во зад."</string> <string name="show_all_anrs" msgid="28462979638729082">"Прикажи ги сите ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Прикажи „Апл. не реагира“ за. апл. во заднина"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Принуд. дозволете апликации на надворешна меморија"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Прави секоја апликација да биде подобна за запишување на надворешна меморија, независно од вредностите на манифестот"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Принуди ги активностите да ја менуваат големината"</string> diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index 3ed642d8635d..06a9dc16d915 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"പശ്ചാത്തല പ്രോസസ്സ് പരിധി"</string> <string name="show_all_anrs" msgid="28462979638729082">"എല്ലാ ANR-കളും ദൃശ്യമാക്കുക"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"പശ്ചാത്തല അപ്ലിക്കേഷനുകൾക്ക് അപ്ലിക്കേഷൻ പ്രതികരിക്കുന്നില്ല എന്ന ഡയലോഗ് കാണിക്കുക"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"ബാഹ്യമായതിൽ നിർബന്ധിച്ച് അനുവദിക്കുക"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"മാനിഫെസ്റ്റ് മൂല്യങ്ങൾ പരിഗണിക്കാതെ, ബാഹ്യ സ്റ്റോറേജിലേക്ക് എഴുതപ്പെടുന്നതിന് ഏതൊരു ആപ്പിനെയും യോഗ്യമാക്കുന്നു"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"വലിപ്പം മാറ്റാൻ പ്രവർത്തനങ്ങളെ നിർബന്ധിക്കുക"</string> diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index 12c528124618..f400f5a63d50 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Далд процессын хязгаар"</string> <string name="show_all_anrs" msgid="28462979638729082">"Бүх ANRs харуулах"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Далд апп-уудад Апп Хариу Өгөхгүй байна гэснийг харуулах"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Аппыг гадаад санах ойд хадгалахыг зөвшөөрөх"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Манифест утгыг нь үл хамааран дурын апп-г гадаад санах ойд бичих боломжтой болгодог"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Үйл ажиллагааны хэмжээг өөрчилж болохуйц болгох"</string> diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index a45648efb71f..10632e050155 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"पार्श्वभूमी प्रक्रिया मर्यादा"</string> <string name="show_all_anrs" msgid="28462979638729082">"सर्व ANR दर्शवा"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"पार्श्वभूमी अॅप्ससाठी अॅप प्रतिसाद देत नाही संवाद दर्शवा"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"बाह्यवर अॅप्सना अनुमती देण्याची सक्ती करा"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"मॅनिफेस्ट मूल्यांकडे दुर्लक्ष करून, कोणत्याही अॅपला बाह्य संचयनावर लेखन केले जाण्यासाठी पात्र बनविते"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"क्रियाकलापाचा आकार बदलण्यायोग्य होण्याची सक्ती करा"</string> diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml index 6ca514bb9833..cc6a935a3238 100644 --- a/packages/SettingsLib/res/values-ms/strings.xml +++ b/packages/SettingsLib/res/values-ms/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Had proses latar belakang"</string> <string name="show_all_anrs" msgid="28462979638729082">"Tunjukkan semua ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Tunjukkan dialog Aplikasi Tidak Memberi Maklum Balas untuk aplikasi latar belakang"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Benarkan apl secara paksa pada storan luaran"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Menjadikan sebarang apl layak ditulis ke storan luaran, tanpa mengambil kira nilai manifes"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Paksa aktiviti supaya boleh diubah saiz"</string> diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml index c2e8a94fe33d..3e718006a103 100644 --- a/packages/SettingsLib/res/values-my/strings.xml +++ b/packages/SettingsLib/res/values-my/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"နောက်ခံလုပ်ငန်းစဉ်ကန့်သတ်ခြင်း"</string> <string name="show_all_anrs" msgid="28462979638729082">"ANRsအားလုံးအား ပြသရန်"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"နောက်ခံအပ်ပလီကေးရှင်းအတွက်တုံ့ပြန်မှုမရှိပြရန်"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"အပြင်မှာ အတင်း ခွင့်ပြုရန်"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"တိကျစွာ သတ်မှတ်ထားသည့်တန်ဖိုးများရှိသော်လည်း၊ ပြင်ပသိုလှောင်ခန်းများသို့ မည်သည့်အက်ပ်ကိုမဆို ဝင်ရောက်ခွင့်ပြုပါ"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"လုပ်ဆောင်ချက်များ ဆိုက်ညှိရနိုင်ရန် လုပ်ခိုင်းပါ"</string> diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index 409ccab20ab0..61ce9cb4df64 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Bakgrunnsprosessgrense"</string> <string name="show_all_anrs" msgid="28462979638729082">"Vis alle ANR-er"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Vis Appen svarer ikke-dialog for bakgrunnsapper"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Tving frem tillatelse for ekstern lagring av apper"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Dette gjør at alle apper kan lagres på eksterne lagringsmedier – uavhengig av manifestverdier"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Tving aktiviteter til å kunne endre størrelse"</string> diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index 2f61e8c0cb45..e87cf2ff3e8b 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"पृष्ठभूमि प्रक्रिया सीमा"</string> <string name="show_all_anrs" msgid="28462979638729082">"सबै ANRs देखाउनुहोस्"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"पृष्ठभूमि अनुप्रयोगका लागि जवाफ नदिइरहेका अनुप्रयोगहरू देखाउनुहोस्"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"बाह्यमा बल प्रयोगको अनुमति प्राप्त अनुप्रयोगहरू"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"म्यानिफेेस्टका मानहरूको ख्याल नगरी कुनै पनि अनुप्रयोगलाई बाह्य भण्डारणमा लेख्न सकिने खाले बनाउँछ"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"गतिविधिहरू रिसाइज गर्नको लागि बाध्य गर्नुहोस्"</string> diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index 77e311eefb22..b98ea2bece6e 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Achtergrondproceslimiet"</string> <string name="show_all_anrs" msgid="28462979638729082">"Alle ANR\'s weergeven"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"\'App reageert niet\' weerg. voor apps op achtergr."</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Toestaan van apps op externe opslag afdwingen"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Hiermee komt elke app in aanmerking voor schrijven naar externe opslag, ongeacht de manifestwaarden"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Formaat activiteiten geforceerd aanpasbaar maken"</string> diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index 8534e8568013..08dd09d7606a 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"ਪਿਛੋਕੜ ਪ੍ਰਕਿਰਿਆ ਸੀਮਾ"</string> <string name="show_all_anrs" msgid="28462979638729082">"ਸਾਰੇ ANR ਦਿਖਾਓ"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"ਪਿਛੋਕੜ ਐਪਸ ਲਈ ਐਪਸ ਜਵਾਬ ਨਹੀਂ ਦੇ ਰਹੇ ਡਾਇਲੌਗ ਦਿਖਾਓ"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"ਐਪਸ ਨੂੰ ਬਾਹਰਲੇ ਤੇ ਜ਼ਬਰਦਸਤੀ ਆਗਿਆ ਦਿਓ"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"ਮੈਨੀਫੈਸਟ ਮੁੱਲਾਂ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ, ਕਿਸੇ ਵੀ ਐਪ ਨੂੰ ਬਾਹਰੀ ਸਟੋਰੇਜ \'ਤੇ ਲਿਖਣ ਦੇ ਯੋਗ ਬਣਾਉਂਦੀ ਹੈ"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"ਮੁੜ-ਆਕਾਰ ਬਦਲਣ ਲਈ ਸਰਗਰਮੀਆਂ \'ਤੇ ਜ਼ੋਰ ਦਿਓ"</string> diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index 762404227b2d..e559c693e38f 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Limit procesów w tle"</string> <string name="show_all_anrs" msgid="28462979638729082">"Pokaż wszystkie ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Pokaż okno Aplikacja Nie Reaguje dla aplikacji w tle"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Wymuś zezwalanie na aplikacje w pamięci zewn."</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Pozwala na zapis aplikacji w pamięci zewnętrznej niezależnie od wartości w pliku manifestu"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Wymuś zmianę rozmiaru okien aktywności"</string> diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index 80b899004a60..cce80ed195c3 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Limite do proc. 2º plano"</string> <string name="show_all_anrs" msgid="28462979638729082">"Mostrar todos os ANRS"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Exibir \"App não responde\" para app em 2º plano"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Forçar permissão de apps em armazenamento externo"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Qualifica apps para gravação em armazenamento externo, independentemente de valores de manifestos"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forçar atividades a serem redimensionáveis"</string> diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index 0059cdd721f0..8124c4b294eb 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Limite proc. em 2º plano"</string> <string name="show_all_anrs" msgid="28462979638729082">"Mostrar todos os ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Mostrar erro \"Aplic. não Resp.\" p/ aplic. 2º plano"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Forçar perm. de aplicações no armazenamento ext."</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Torna qualquer aplicação elegível para ser gravada no armazenamento externo, independentemente dos valores do manifesto"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forçar as atividades a serem redimensionáveis"</string> diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index 80b899004a60..cce80ed195c3 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Limite do proc. 2º plano"</string> <string name="show_all_anrs" msgid="28462979638729082">"Mostrar todos os ANRS"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Exibir \"App não responde\" para app em 2º plano"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Forçar permissão de apps em armazenamento externo"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Qualifica apps para gravação em armazenamento externo, independentemente de valores de manifestos"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forçar atividades a serem redimensionáveis"</string> diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index 0ae7049ab002..3a174de1bff5 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Limită procese fundal"</string> <string name="show_all_anrs" msgid="28462979638729082">"Afișați toate elem. ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Aplicații din fundal: afișați Aplicația nu răspunde"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Forțați accesul aplicațiilor la stocarea externă"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Face orice aplicație eligibilă să fie scrisă în stocarea externă, indiferent de valorile manifestului"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Forțați redimensionarea activităților"</string> diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index cc82236ea637..cd8d95611182 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Лимит фоновых процессов"</string> <string name="show_all_anrs" msgid="28462979638729082">"Все ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Уведомлять о том, что приложение не отвечает"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Разрешить сохранение на внешние накопители"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Разрешить сохранение приложений на внешних накопителях (независимо от значений в манифесте)"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Изменение размера в многооконном режиме"</string> diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml index 16233088b8fd..592c2f9885ba 100644 --- a/packages/SettingsLib/res/values-si/strings.xml +++ b/packages/SettingsLib/res/values-si/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"පසුබිම් ක්රියාවලි සීමාව"</string> <string name="show_all_anrs" msgid="28462979638729082">"සියලුම ANR පෙන්වන්න"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"පසුබිම් යෙදුම් වලට යෙදුම ප්රතිචාර නොදක්වයි කවුළුව පෙන්වන්න"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"බාහිර මත යෙදුම් ඉඩ දීම බල කරන්න"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"මැනිෆෙස්ට් අගයන් නොසලකා, ඕනෑම යෙදුමක් බාහිර ගබඩාවට ලිවීමට සුදුසුකම් ලබා දෙයි"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"ක්රියාකාරකම් ප්රතිප්රමාණ කළ හැකි බවට බල කරන්න"</string> diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index 028d561e7c00..d5c40611f132 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Limit procesov na pozadí"</string> <string name="show_all_anrs" msgid="28462979638729082">"Zobrazovať všetky ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Zobrazovať dialóg „Aplikácia neodpovedá“ aj pre aplikácie na pozadí"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Vynútiť povolenie aplikácií na externom úložisku"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Umožňuje zapísať akúkoľvek aplikáciu do externého úložiska bez ohľadu na hodnoty v manifeste"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Vynútiť možnosť zmeny veľkosti aktivít"</string> diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index 085621a0adab..4e0085c12703 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Omejitev postopkov v ozadju"</string> <string name="show_all_anrs" msgid="28462979638729082">"Pokaži okna neodzivanj"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Prikaz pogovornega okna za neodzivanje aplikacije v ozadju"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Vsili omogočanje aplikacij v zunanji shrambi"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Poskrbi, da je ne glede na vrednosti v manifestu mogoče vsako aplikacijo zapisati v zunanjo shrambo"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Vsili povečanje velikosti za aktivnosti"</string> diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml index c9398a50a4fd..e8340bf00e6d 100644 --- a/packages/SettingsLib/res/values-sq/strings.xml +++ b/packages/SettingsLib/res/values-sq/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Kufizimi i proceseve në sfond"</string> <string name="show_all_anrs" msgid="28462979638729082">"Shfaq raportet ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Shfaq raportet ANR (Aplikacioni nuk përgjigjet) për aplikacionet në sfond"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Detyro lejimin në hapësirën e jashtme"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Bën që çdo aplikacion të jetë i përshtatshëm për t\'u shkruar në hapësirën ruajtëse të jashtme, pavarësisht nga vlerat e manifestit"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Detyro madhësinë e ndryshueshme për aktivitetet"</string> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 15ba747c7b1c..63ceb736ea17 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Ограничење позадинских процеса"</string> <string name="show_all_anrs" msgid="28462979638729082">"Прикажи све ANR-ове"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Прикажи дијалог Апликација не реагује за апликације у позадини"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Принудно дозволи апликације у спољној"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Омогућава уписивање свих апликација у спољну меморију, без обзира на вредности манифеста"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Принудно омогући промену величине активности"</string> diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml index cfae5aef3f1b..1f2ca2377bed 100644 --- a/packages/SettingsLib/res/values-sv/strings.xml +++ b/packages/SettingsLib/res/values-sv/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Begränsa bakgrundsprocess"</string> <string name="show_all_anrs" msgid="28462979638729082">"Visa alla som inte svarar"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Visa dialogrutan om att appen inte svarar för bakgrundsappar"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Tillåt appar i externt lagringsutrymme"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Allar appar kan skrivas till extern lagring, oavsett manifestvärden"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Framtvinga storleksanpassning för aktiviteter"</string> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index ef431344375f..4d75fbccf361 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -234,7 +234,7 @@ <string name="debug_monitoring_category" msgid="7640508148375798343">"Ufuatiliaji"</string> <string name="strict_mode" msgid="1938795874357830695">"Modi makinifu imewezeshwa"</string> <string name="strict_mode_summary" msgid="142834318897332338">"Mulika skrini wakati programu zinafanya uendeshaji mrefu kwenye mnyororo mkuu"</string> - <string name="pointer_location" msgid="6084434787496938001">"Mahali pa pointa"</string> + <string name="pointer_location" msgid="6084434787496938001">"Mahali pa kiashiria"</string> <string name="pointer_location_summary" msgid="840819275172753713">"Kuegeshwa kwa skrini ikionyesha data ya mguso ya sasa"</string> <string name="show_touches" msgid="2642976305235070316">"Onyesha unapogonga"</string> <string name="show_touches_summary" msgid="6101183132903926324">"Onyesha maoni ya picha unapogonga"</string> @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Kiwango cha mchakato wa mandari nyuma"</string> <string name="show_all_anrs" msgid="28462979638729082">"Onyesha ANR zote"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Onyesha kisanduku kidadisi cha Programu Haiitikii kwa programu za usuli"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Lazima uruhusu programu kwenye hifadhi ya nje"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Huruhusu programu yoyote iwekwe kwenye hifadhi ya nje, bila kujali thamani za faili ya maelezo"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Lazimisha shughuli ziweze kubadilishwa ukubwa"</string> diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml index e09db515c041..47f75860a4eb 100644 --- a/packages/SettingsLib/res/values-ta/strings.xml +++ b/packages/SettingsLib/res/values-ta/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"பின்புலச் செயல்முறை வரம்பு"</string> <string name="show_all_anrs" msgid="28462979638729082">"எல்லா ANRகளையும் காட்டு"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"பின்புலப் பயன்பாடுகளுக்குப் பயன்பாடு பதிலளிக்கவில்லை என்ற உரையாடலைக் காட்டு"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"பயன்பாடுகளை வெளிப்புறச் சேமிப்பிடத்தில் அனுமதி"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"மேனிஃபெஸ்ட் மதிப்புகளைப் பொருட்படுத்தாமல், எல்லா பயன்பாட்டையும் வெளிப்புறச் சேமிப்பிடத்தில் எழுத அனுமதிக்கும்"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"செயல்பாடுகளை அளவுமாறக்கூடியதாக அமை"</string> diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index dabf7edadd13..1a7ad4d8ef24 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"నేపథ్య ప్రాసెస్ పరిమితి"</string> <string name="show_all_anrs" msgid="28462979638729082">"అన్ని ANRలను చూపు"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"నేపథ్య అనువర్తనాల కోసం అనువర్తనం ప్రతిస్పందించడం లేదు డైలాగ్ను చూపు"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"అనువర్తనాలను బాహ్య నిల్వలో నిర్బంధంగా అనుమతించు"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"ఏ అనువర్తనాన్ని అయినా మానిఫెస్ట్ విలువలతో సంబంధం లేకుండా బాహ్య నిల్వలో వ్రాయడానికి అనుమతిస్తుంది"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"కార్యాచరణలను పరిమాణం మార్చగలిగేలా నిర్బంధించు"</string> diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index 9a265f5316bc..aa0296c6616e 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"ขีดจำกัดกระบวนการพื้นหลัง"</string> <string name="show_all_anrs" msgid="28462979638729082">"แสดง ANR ทั้งหมด"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"แสดงหน้าต่างแอปไม่ตอบสนอง สำหรับแอปพื้นหลัง"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"บังคับให้แอปสามารถใช้ที่เก็บภายนอก"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"ทำให้สามารถเขียนแอปใดๆ ก็ตามไปยังพื้นที่เก็บข้อมูลภายนอกได้ โดยไม่คำนึงถึงค่าในไฟล์ Manifest"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"บังคับให้กิจกรรมปรับขนาดได้"</string> diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index c46ac78da289..988a88bd08c7 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Limitasyon ng proseso sa background"</string> <string name="show_all_anrs" msgid="28462979638729082">"Ipakita ang lahat ng ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"App Not Responding dialog para sa background apps"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Pwersahang payagan ang mga app sa external"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Ginagawang kwalipikado ang anumang app na mailagay sa external na storage, anuman ang mga value ng manifest"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Sapilitang gawing resizable ang mga aktibidad"</string> diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index 696b20917c2d..5eff6c3afd60 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Arka plan işlem sınırı"</string> <string name="show_all_anrs" msgid="28462979638729082">"Tüm ANR\'leri göster"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Arka plan uygulamalar için Uygulama Yanıt Vermiyor mesajını göster"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Harici birimdeki uygulamalara izin vermeye zorla"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Manifest değerlerinden bağımsız olarak uygulamaları harici depolamaya yazmak için uygun hale getirir"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Etkinlikleri yeniden boyutlandırılabilmeye zorla"</string> diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index d3f137f94626..419a8c00c692 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Обмеження фон. процесів"</string> <string name="show_all_anrs" msgid="28462979638729082">"Показувати всі ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Сповіщати, коли додаток не відповідає"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Примусово записувати додатки в зовнішню пам’ять"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Можна записувати додатки в зовнішню пам’ять, незалежно від значень у маніфесті"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Примусово масштабувати активність"</string> diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml index 3fceb9868f0e..55f71324d470 100644 --- a/packages/SettingsLib/res/values-ur/strings.xml +++ b/packages/SettingsLib/res/values-ur/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"پس منظر پروسیس کی حد"</string> <string name="show_all_anrs" msgid="28462979638729082">"سبھی ANRs کو دکھائیں"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"پس منظر کی ایپس کیلئے ایپ جواب نہیں دے رہی ہے ڈائلاگ دکھائیں"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"بیرونی پر ایپس کو زبردستی اجازت دیں"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"manifest اقدار سے قطع نظر، کسی بھی ایپ کو بیرونی اسٹوریج پر لکھے جانے کا اہل بناتا ہے"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"سرگرمیوں کو ری سائز ایبل بنائیں"</string> diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index ad9dc3a85e59..4b53da5f6efc 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Fondagi jarayonlarni cheklash"</string> <string name="show_all_anrs" msgid="28462979638729082">"Hamma ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Ilova javob bermayotgani haqida xabar qilish"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Tashqi xotira qurilmasidagi ilova dasturlariga majburiy ruxsat berish"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Manifest qiymatidan qat’i nazar istalgan ilovani tashqi xotiraga saqlash imkonini beradi"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Harakatlarni moslashuvchan o‘lchamga keltirish"</string> diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index 910e66c8bcf6..a6a54d0a0609 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Giới hạn quá trình nền"</string> <string name="show_all_anrs" msgid="28462979638729082">"Hiển thị tất cả ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Hiện hộp thoại Ứng dụng ko đáp ứng cho ứng dụng nền"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Buộc cho phép các ứng dụng trên bộ nhớ ngoài"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Giúp mọi ứng dụng đủ điều kiện để được ghi vào bộ nhớ ngoài, bất kể giá trị tệp kê khai là gì"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Buộc các hoạt động có thể thay đổi kích thước"</string> diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index b224c23a7400..41c5f60d18da 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"后台进程限制"</string> <string name="show_all_anrs" msgid="28462979638729082">"显示所有“应用无响应”(ANR)"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"为后台应用显示“应用无响应”对话框"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"强制允许将应用写入外部存储设备"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"允许将任何应用写入外部存储设备(无论清单值是什么)"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"强制将活动设为可调整大小"</string> diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index 03081af1b1f1..00748b0322d6 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"背景處理程序限制"</string> <string name="show_all_anrs" msgid="28462979638729082">"顯示所有 ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"顯示背景應用程式的「應用程式無回應」對話框"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"強制允許應用程式寫入到外部儲存空間"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"在任何資訊清單值下,允許將所有符合資格的應用程式寫入到外部儲存完間"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"強制可變更活動尺寸"</string> diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index 050c5567287b..3988edd27e74 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"背景處理程序限制"</string> <string name="show_all_anrs" msgid="28462979638729082">"顯示所有無回應程式"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"為背景應用程式顯示「應用程式無回應」對話方塊"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"強制允許將應用程式寫入外部儲存空間"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"允許將任何應用程式寫入外部儲存空間 (無論資訊清單值為何)"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"將活動強制設為可調整大小"</string> diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml index d2a5743a1919..11dfdccdb31e 100644 --- a/packages/SettingsLib/res/values-zu/strings.xml +++ b/packages/SettingsLib/res/values-zu/strings.xml @@ -272,6 +272,10 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"Isilinganiso senqubo yesithombe sanemuva"</string> <string name="show_all_anrs" msgid="28462979638729082">"Bonisa wonke ama-ANR"</string> <string name="show_all_anrs_summary" msgid="641908614413544127">"Boniso idayalogi Yohlelo Lokusebenza Olungasabeli kwizinhlelo zokusebenza zasemuva"</string> + <!-- no translation found for show_notification_channel_warnings (1399948193466922683) --> + <skip /> + <!-- no translation found for show_notification_channel_warnings_summary (5536803251863694895) --> + <skip /> <string name="force_allow_on_external" msgid="3215759785081916381">"Phoqelela ukuvumela izinhlelo zokusebenza ngaphandle"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Yenza noma uluphi uhlelo lokusebenza lifaneleke ukuthi libhalwe kusitoreji sangaphandle, ngaphandle kwamavelu we-manifest"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Imisebenzi yamandla izonikezwa usayizi omusha"</string> diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index 044392cc4ad6..4921be1c9367 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -684,6 +684,12 @@ <string name="show_all_anrs_summary">Show App Not Responding dialog for background apps</string> + <!-- UI debug setting: show all ANRs? [CHAR LIMIT=25] --> + <string name="show_notification_channel_warnings">Show notification channel warnings</string> + <!-- UI debug setting: show all ANRs summary [CHAR LIMIT=50] --> + <string name="show_notification_channel_warnings_summary">Displays on-screen warning when an app posts a notification without a valid channel</string> + + <!-- UI debug setting: force allow apps on external storage [CHAR LIMIT=50] --> <string name="force_allow_on_external">Force allow apps on external</string> <!-- UI debug setting: force allow on external summary [CHAR LIMIT=150] --> diff --git a/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java b/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java index 3a2397f671e0..3d50f2362cf2 100755 --- a/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java +++ b/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java @@ -141,7 +141,7 @@ public class BatteryMeterDrawableBase extends Drawable { mWarningTextPaint.setColor(mColors[1]); } - mChargeColor = Utils.getDefaultColor(mContext, R.color.batterymeter_charge_color); + mChargeColor = Utils.getDefaultColor(mContext, R.color.meter_consumed_color); mBoltPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mBoltPaint.setColor(Utils.getDefaultColor(mContext, R.color.batterymeter_bolt_color)); diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java index 415bf9a0470b..05625c7d5a0c 100644 --- a/packages/Shell/src/com/android/shell/BugreportProgressService.java +++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java @@ -981,6 +981,8 @@ public class BugreportProgressService extends Service { // Since we may be launched behind lockscreen, make sure that ChooserActivity doesn't finish // itself in onStop. chooserIntent.putExtra(ChooserActivity.EXTRA_PRIVATE_RETAIN_IN_ON_STOP, true); + // Starting the activity from a service. + chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(chooserIntent); } diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java index 9dd39d432527..cf8747e19e85 100644 --- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java +++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java @@ -89,7 +89,7 @@ public class BatteryMeterView extends LinearLayout implements TypedArray atts = context.obtainStyledAttributes(attrs, R.styleable.BatteryMeterView, defStyle, 0); final int frameColor = atts.getColor(R.styleable.BatteryMeterView_frameColor, - context.getColor(R.color.batterymeter_frame_color)); + context.getColor(R.color.meter_background_color)); mDrawable = new BatteryMeterDrawableBase(context, frameColor); atts.recycle(); diff --git a/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java b/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java index 68c80073d240..36dbb0f3061b 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java @@ -17,12 +17,13 @@ package com.android.systemui.pip; import android.content.Context; +import android.content.res.Configuration; import java.io.PrintWriter; public interface BasePipManager { void initialize(Context context); void showPictureInPictureMenu(); - void onConfigurationChanged(); + void onConfigurationChanged(Configuration newConfig); void dump(PrintWriter pw); } diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipUI.java b/packages/SystemUI/src/com/android/systemui/pip/PipUI.java index a1f6553aa7d5..b7164cbb3271 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipUI.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipUI.java @@ -72,7 +72,7 @@ public class PipUI extends SystemUI implements CommandQueue.Callbacks { return; } - mPipManager.onConfigurationChanged(); + mPipManager.onConfigurationChanged(newConfig); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java index 5ca9fa55eb89..0373d77940d7 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java @@ -25,6 +25,7 @@ import android.app.IActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.pm.ParceledListSlice; +import android.content.res.Configuration; import android.graphics.Rect; import android.os.Handler; import android.os.RemoteException; @@ -196,7 +197,7 @@ public class PipManager implements BasePipManager { /** * Updates the PIP per configuration changed. */ - public void onConfigurationChanged() { + public void onConfigurationChanged(Configuration newConfig) { mTouchHandler.onConfigurationChanged(); } diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java index 6490b33f3740..5414aad0a63f 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java @@ -26,6 +26,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ParceledListSlice; +import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Rect; import android.media.session.MediaController; @@ -116,6 +117,7 @@ public class PipManager implements BasePipManager { private Rect mDefaultPipBounds = new Rect(); private Rect mSettingsPipBounds; private Rect mMenuModePipBounds; + private int mLastOrientation = Configuration.ORIENTATION_UNDEFINED; private boolean mInitialized; private int mPipTaskId = TASK_ID_NO_PIP; private ComponentName mPipComponentName; @@ -237,7 +239,7 @@ public class PipManager implements BasePipManager { } } - loadConfigurationsAndApply(); + loadConfigurationsAndApply(mContext.getResources().getConfiguration()); mMediaSessionManager = (MediaSessionManager) mContext.getSystemService(Context.MEDIA_SESSION_SERVICE); @@ -250,7 +252,14 @@ public class PipManager implements BasePipManager { mPipNotification = new PipNotification(context); } - private void loadConfigurationsAndApply() { + private void loadConfigurationsAndApply(Configuration newConfig) { + if (mLastOrientation != newConfig.orientation) { + // Don't resize the pinned stack on orientation change. TV does not care about this case + // and this could clobber the existing animation to the new bounds calculated by WM. + mLastOrientation = newConfig.orientation; + return; + } + Resources res = mContext.getResources(); mSettingsPipBounds = Rect.unflattenFromString(res.getString( R.string.pip_settings_bounds)); @@ -267,8 +276,8 @@ public class PipManager implements BasePipManager { /** * Updates the PIP per configuration changed. */ - public void onConfigurationChanged() { - loadConfigurationsAndApply(); + public void onConfigurationChanged(Configuration newConfig) { + loadConfigurationsAndApply(newConfig); mPipNotification.onConfigurationChanged(mContext); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java index ecc275db46b6..74cc0ecca2bc 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java @@ -141,7 +141,7 @@ public class BatterySaverTile extends QSTileImpl<BooleanState> implements private final BatteryMeterDrawableBase mDrawable = new BatteryMeterDrawableBase( mHost.getContext(), - mHost.getContext().getColor(R.color.batterymeter_frame_color)); + mHost.getContext().getColor(R.color.meter_background_color)); private View mCurrentView; @Override diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java index 0c7703663810..012accda7b84 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java @@ -725,14 +725,21 @@ public class DividerView extends FrameLayout implements OnTouchListener, mMinimizedSnapAlgorithm = null; mDockedStackMinimized = minimized; initializeSnapAlgorithm(); - if (!mIsInMinimizeInteraction && minimized) { - mIsInMinimizeInteraction = true; - mDividerPositionBeforeMinimized = DockedDividerUtils.calculateMiddlePosition( - isHorizontalDivision(), mStableInsets, mDisplayWidth, mDisplayHeight, - mDividerSize); - - int position = mMinimizedSnapAlgorithm.getMiddleTarget().position; - resizeStack(position, position, mMinimizedSnapAlgorithm.getMiddleTarget()); + if (mIsInMinimizeInteraction != minimized) { + if (minimized) { + mIsInMinimizeInteraction = true; + mDividerPositionBeforeMinimized = DockedDividerUtils.calculateMiddlePosition( + isHorizontalDivision(), mStableInsets, mDisplayWidth, mDisplayHeight, + mDividerSize); + + int position = mMinimizedSnapAlgorithm.getMiddleTarget().position; + resizeStack(position, position, mMinimizedSnapAlgorithm.getMiddleTarget()); + } else { + resizeStack(mDividerPositionBeforeMinimized, mDividerPositionBeforeMinimized, + mSnapAlgorithm.calculateNonDismissingSnapTarget( + mDividerPositionBeforeMinimized)); + mIsInMinimizeInteraction = false; + } } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java index 26e007c42df8..f050be4720b7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java @@ -407,8 +407,9 @@ public class StatusBarWindowView extends FrameLayout { mFloatingActionMode.finish(); } cleanupFloatingActionModeViews(); + mFloatingToolbar = new FloatingToolbar(mContext, mFakeWindow); final FloatingActionMode mode = - new FloatingActionMode(mContext, callback, originatingView); + new FloatingActionMode(mContext, callback, originatingView, mFloatingToolbar); mFloatingActionModeOriginatingView = originatingView; mFloatingToolbarPreDrawListener = new ViewTreeObserver.OnPreDrawListener() { @@ -423,8 +424,6 @@ public class StatusBarWindowView extends FrameLayout { private void setHandledFloatingActionMode(ActionMode mode) { mFloatingActionMode = mode; - mFloatingToolbar = new FloatingToolbar(mContext, mFakeWindow); - ((FloatingActionMode) mFloatingActionMode).setFloatingToolbar(mFloatingToolbar); mFloatingActionMode.invalidate(); // Will show the floating toolbar if necessary. mFloatingActionModeOriginatingView.getViewTreeObserver() .addOnPreDrawListener(mFloatingToolbarPreDrawListener); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java index 8609eeb7e6b4..9566c8008306 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java @@ -37,12 +37,14 @@ import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.qs.DetailAdapter; import org.junit.After; +import org.junit.Ignore; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(AndroidTestingRunner.class) @RunWithLooper +@Ignore("flaking") public class QSDetailTest extends SysuiTestCase { private MetricsLogger mMetricsLogger; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterTest.java index 778ab8ef3bee..71e4a2fc3b83 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterTest.java @@ -33,11 +33,13 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.utils.leaks.LeakCheckedTest; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(AndroidTestingRunner.class) @RunWithLooper +@Ignore("flaking") public class QSFooterTest extends LeakCheckedTest { private QSFooter mFooter; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java index d81224e8507d..71158211b237 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java @@ -39,6 +39,7 @@ import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -48,6 +49,7 @@ import android.widget.FrameLayout; @RunWith(AndroidTestingRunner.class) @RunWithLooper(setAsMainLooper = true) +@Ignore("flaking") public class QSFragmentTest extends SysuiBaseFragmentTest { private MetricsLogger mMockMetricsLogger; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java index 49796843af6e..094fea220c22 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java @@ -29,6 +29,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.qs.customize.QSCustomizer; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -36,6 +37,7 @@ import java.util.Collections; @RunWith(AndroidTestingRunner.class) @RunWithLooper +@Ignore("flaking") public class QSPanelTest extends SysuiTestCase { private MetricsLogger mMetricsLogger; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java index 5cd092bc8b53..add7e1ce8026 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java @@ -27,11 +27,13 @@ import android.view.View; import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @SmallTest @RunWith(AndroidJUnit4.class) +@Ignore("flaking") public class ExpandableNotificationRowTest { private Context mContext; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationContentViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationContentViewTest.java index 77f96b8a7b19..24c8ed7cccad 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationContentViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationContentViewTest.java @@ -25,6 +25,7 @@ import android.view.View; import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -35,6 +36,7 @@ import static org.mockito.Mockito.spy; @SmallTest @RunWith(AndroidJUnit4.class) +@Ignore("flaking") public class NotificationContentViewTest { NotificationContentView mView; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationCustomViewWrapperTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationCustomViewWrapperTest.java index f016aa1bedf8..47fd20eb4618 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationCustomViewWrapperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationCustomViewWrapperTest.java @@ -30,11 +30,13 @@ import com.android.systemui.statusbar.notification.NotificationViewWrapper; import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @SmallTest @RunWith(AndroidJUnit4.class) +@Ignore("flaking") public class NotificationCustomViewWrapperTest { private Context mContext; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationInflaterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationInflaterTest.java index 0c5bdeacbd4e..3c1c09dd6e04 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationInflaterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationInflaterTest.java @@ -38,6 +38,7 @@ import com.android.systemui.statusbar.NotificationTestHelper; import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -45,6 +46,7 @@ import java.util.concurrent.CountDownLatch; @SmallTest @RunWith(AndroidJUnit4.class) +@Ignore("flaking") public class NotificationInflaterTest { private Context mContext; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationChildrenContainerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationChildrenContainerTest.java index f051f3043224..9a42cbba8af5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationChildrenContainerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationChildrenContainerTest.java @@ -29,11 +29,13 @@ import com.android.systemui.statusbar.NotificationTestHelper; import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @SmallTest @RunWith(AndroidJUnit4.class) +@Ignore("flaking") public class NotificationChildrenContainerTest { private Context mContext; diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java index 0281f73d5b40..86e32e041a96 100644 --- a/services/autofill/java/com/android/server/autofill/Helper.java +++ b/services/autofill/java/com/android/server/autofill/Helper.java @@ -16,7 +16,10 @@ package com.android.server.autofill; +import android.annotation.Nullable; import android.os.Bundle; +import android.util.ArraySet; +import android.view.autofill.AutofillId; import java.util.Arrays; import java.util.Objects; @@ -68,4 +71,15 @@ public final class Helper { append(builder, bundle); return builder.toString(); } + + @Nullable + static AutofillId[] toArray(@Nullable ArraySet<AutofillId> set) { + if (set == null) return null; + + final AutofillId[] array = new AutofillId[set.size()]; + for (int i = 0; i < set.size(); i++) { + array[i] = set.valueAt(i); + } + return array; + } } diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index 0122301b8bad..aa80075b0ca9 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -28,6 +28,7 @@ import static android.view.autofill.AutofillManager.ACTION_VIEW_EXITED; import static com.android.server.autofill.Helper.sDebug; import static com.android.server.autofill.Helper.sPartitionMaxCount; import static com.android.server.autofill.Helper.sVerbose; +import static com.android.server.autofill.Helper.toArray; import static com.android.server.autofill.ViewState.STATE_AUTOFILLED; import static com.android.server.autofill.ViewState.STATE_RESTARTED_SESSION; @@ -57,6 +58,7 @@ import android.service.autofill.FillResponse; import android.service.autofill.SaveInfo; import android.service.autofill.SaveRequest; import android.util.ArrayMap; +import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; import android.view.autofill.AutofillId; @@ -1139,15 +1141,20 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState // Only track the views of the last response as only those are reported back to the // service, see #showSaveLocked - ArrayList<AutofillId> trackedViews = new ArrayList<>(); + final FillResponse response = mResponses.valueAt(getLastResponseIndex()); + + ArraySet<AutofillId> trackedViews = null; boolean saveOnAllViewsInvisible = false; - SaveInfo saveInfo = mResponses.valueAt(getLastResponseIndex()).getSaveInfo(); + final SaveInfo saveInfo = response.getSaveInfo(); if (saveInfo != null) { saveOnAllViewsInvisible = (saveInfo.getFlags() & SaveInfo.FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE) != 0; // We only need to track views if we want to save once they become invisible. if (saveOnAllViewsInvisible) { + if (trackedViews == null) { + trackedViews = new ArraySet<>(); + } if (saveInfo.getRequiredIds() != null) { Collections.addAll(trackedViews, saveInfo.getRequiredIds()); } @@ -1158,8 +1165,32 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } + // Must also track that are part of datasets, otherwise the FillUI won't be hidden when + // they go away (if they're not savable). + + final ArrayList<Dataset> datasets = response.getDatasets(); + ArraySet<AutofillId> fillableIds = null; + if (datasets != null) { + for (int i = 0; i < datasets.size(); i++) { + final Dataset dataset = datasets.get(i); + final ArrayList<AutofillId> fieldIds = dataset.getFieldIds(); + if (fieldIds == null) continue; + + for (int j = 0; j < fieldIds.size(); j++) { + final AutofillId id = fieldIds.get(j); + if (trackedViews == null || !trackedViews.contains(id)) { + fillableIds = ArrayUtils.add(fillableIds, id); + } + } + } + } + try { - mClient.setTrackedViews(id, trackedViews, saveOnAllViewsInvisible); + if (sVerbose) { + Slog.v(TAG, "updateTrackedIdsLocked(): " + trackedViews + " => " + fillableIds); + } + mClient.setTrackedViews(id, toArray(trackedViews), saveOnAllViewsInvisible, + toArray(fillableIds)); } catch (RemoteException e) { Slog.w(TAG, "Cannot set tracked ids", e); } diff --git a/services/core/java/com/android/server/VibratorService.java b/services/core/java/com/android/server/VibratorService.java index 678ae38514a3..9fa66243d2b7 100644 --- a/services/core/java/com/android/server/VibratorService.java +++ b/services/core/java/com/android/server/VibratorService.java @@ -221,7 +221,13 @@ public class VibratorService extends IVibratorService.Stub long[] clickEffectTimings = getLongIntArray(context.getResources(), com.android.internal.R.array.config_virtualKeyVibePattern); - VibrationEffect clickEffect = VibrationEffect.createWaveform(clickEffectTimings, -1); + VibrationEffect clickEffect; + if (clickEffectTimings.length == 1) { + clickEffect = VibrationEffect.createOneShot( + clickEffectTimings[0], VibrationEffect.DEFAULT_AMPLITUDE); + } else { + clickEffect = VibrationEffect.createWaveform(clickEffectTimings, -1); + } VibrationEffect doubleClickEffect = VibrationEffect.createWaveform( new long[] {0, 30, 100, 30} /*timings*/, -1); diff --git a/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java b/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java index 44c61f0160e7..69411936eb1a 100644 --- a/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java +++ b/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java @@ -163,20 +163,31 @@ public class TetheringConfiguration { } // Fix up upstream interface types for DUN or mobile. NOTE: independent - // of the value of |requiresDun|, cell data of one form or another is + // of the value of |dunCheck|, cell data of one form or another is // *always* an upstream, regardless of the upstream interface types // specified by configuration resources. if (dunCheck == DUN_REQUIRED) { if (!upstreamIfaceTypes.contains(TYPE_MOBILE_DUN)) { upstreamIfaceTypes.add(TYPE_MOBILE_DUN); } - } else { + } else if (dunCheck == DUN_NOT_REQUIRED) { if (!upstreamIfaceTypes.contains(TYPE_MOBILE)) { upstreamIfaceTypes.add(TYPE_MOBILE); } if (!upstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI)) { upstreamIfaceTypes.add(TYPE_MOBILE_HIPRI); } + } else { + // Fix upstream interface types for case DUN_UNSPECIFIED. + // Do not modify if a cellular interface type is already present in the + // upstream interface types. Add TYPE_MOBILE and TYPE_MOBILE_HIPRI if no + // cellular interface types are found in the upstream interface types. + if (!(upstreamIfaceTypes.contains(TYPE_MOBILE_DUN) + || upstreamIfaceTypes.contains(TYPE_MOBILE) + || upstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI))) { + upstreamIfaceTypes.add(TYPE_MOBILE); + upstreamIfaceTypes.add(TYPE_MOBILE_HIPRI); + } } return upstreamIfaceTypes; diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java index dbccc0765b73..1b984a418257 100644 --- a/services/core/java/com/android/server/dreams/DreamManagerService.java +++ b/services/core/java/com/android/server/dreams/DreamManagerService.java @@ -86,6 +86,7 @@ public final class DreamManagerService extends SystemService { private boolean mCurrentDreamCanDoze; private boolean mCurrentDreamIsDozing; private boolean mCurrentDreamIsWaking; + private Runnable mStopDreamRunnable; private int mCurrentDreamDozeScreenState = Display.STATE_UNKNOWN; private int mCurrentDreamDozeScreenBrightness = PowerManager.BRIGHTNESS_DEFAULT; @@ -349,6 +350,11 @@ public final class DreamManagerService extends SystemService { private void startDreamLocked(final ComponentName name, final boolean isTest, final boolean canDoze, final int userId) { + if (mStopDreamRunnable != null) { + mHandler.removeCallbacks(mStopDreamRunnable); + mStopDreamRunnable = null; + } + if (Objects.equal(mCurrentDreamName, name) && mCurrentDreamIsTest == isTest && mCurrentDreamCanDoze == canDoze @@ -386,13 +392,15 @@ public final class DreamManagerService extends SystemService { mCurrentDreamIsWaking = true; } - mHandler.post(new Runnable() { + mStopDreamRunnable = new Runnable() { @Override public void run() { Slog.i(TAG, "Performing gentle wake from dream."); mController.stopDream(immediate); + mStopDreamRunnable = null; } - }); + }; + mHandler.post(mStopDreamRunnable); } } diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index fc582b0d1ea1..cb1742ea64ec 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -3282,9 +3282,10 @@ public class NotificationManagerService extends SystemService { } private void doChannelWarningToast(CharSequence toastText) { + final int defaultWarningEnabled = Build.IS_DEBUGGABLE ? 1 : 0; final boolean warningEnabled = Settings.Global.getInt(getContext().getContentResolver(), - Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS, 0) != 0; - if (warningEnabled || Build.IS_DEBUGGABLE) { + Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS, defaultWarningEnabled) != 0; + if (warningEnabled) { Toast toast = Toast.makeText(getContext(), mHandler.getLooper(), toastText, Toast.LENGTH_LONG); toast.show(); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index edf6dfc432db..b6b28ede8680 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -3503,13 +3503,14 @@ public class PackageManagerService extends IPackageManager.Stub final boolean isSpecialProcess = callingUid == Process.SYSTEM_UID || callingUid == Process.SHELL_UID - || callingUid == 0; + || callingUid == Process.ROOT_UID; final boolean allowMatchInstant = isSpecialProcess || mContext.checkCallingOrSelfPermission( android.Manifest.permission.ACCESS_INSTANT_APPS) == PERMISSION_GRANTED; return allowMatchInstant; } + private PackageInfo generatePackageInfo(PackageSetting ps, int flags, int userId) { if (!sUserManager.exists(userId)) return null; if (ps == null) { @@ -3519,7 +3520,7 @@ public class PackageManagerService extends IPackageManager.Stub if (p == null) { return null; } - final int callingUid = Binder.getCallingUid(); + final int callingUid = Binder.getCallingUid(); // Filter out ephemeral app metadata: // * The system/shell/root can see metadata for any app // * An installed app can see metadata for 1) other installed apps @@ -3612,12 +3613,16 @@ public class PackageManagerService extends IPackageManager.Stub @Override public boolean isPackageAvailable(String packageName, int userId) { if (!sUserManager.exists(userId)) return false; - enforceCrossUserPermission(Binder.getCallingUid(), userId, - false /* requireFullPermission */, false /* checkShell */, "is package available"); + final int callingUid = Binder.getCallingUid(); + enforceCrossUserPermission(callingUid, userId, + false /*requireFullPermission*/, false /*checkShell*/, "is package available"); synchronized (mPackages) { PackageParser.Package p = mPackages.get(packageName); if (p != null) { final PackageSetting ps = (PackageSetting) p.mExtras; + if (filterAppAccessLPr(ps, callingUid, userId)) { + return false; + } if (ps != null) { final PackageUserState state = ps.readUserState(userId); if (state != null) { @@ -3708,18 +3713,25 @@ public class PackageManagerService extends IPackageManager.Stub * * @see #canAccessInstantApps(int) */ - private boolean filterAppAccessLPr(@NonNull PackageSetting ps, int callingUid, + private boolean filterAppAccessLPr(@Nullable PackageSetting ps, int callingUid, @Nullable ComponentName component, boolean componentVisibleToInstantApp, int userId) { // if we're in an isolated process, get the real calling UID if (Process.isIsolated(callingUid)) { callingUid = mIsolatedOwners.get(callingUid); } + final String instantAppPkgName = getInstantAppPackageName(callingUid); + final boolean callerIsInstantApp = instantAppPkgName != null; + if (ps == null) { + if (callerIsInstantApp) { + // pretend the application exists, but, needs to be filtered + return true; + } + return false; + } // if the target and caller are the same application, don't filter if (isCallerSameApp(ps.name, callingUid)) { return false; } - final String instantAppPkgName = getInstantAppPackageName(callingUid); - final boolean callerIsInstantApp = instantAppPkgName != null; if (callerIsInstantApp) { // request for a specific component; if it hasn't been explicitly exposed, filter if (component != null) { @@ -3747,7 +3759,7 @@ public class PackageManagerService extends IPackageManager.Stub /** * @see #filterAppAccessLPr(PackageSetting, int, ComponentName, boolean, int) */ - private boolean filterAppAccessLPr(@NonNull PackageSetting ps, int callingUid, int userId) { + private boolean filterAppAccessLPr(@Nullable PackageSetting ps, int callingUid, int userId) { return filterAppAccessLPr(ps, callingUid, null, false, userId); } @@ -3835,19 +3847,25 @@ public class PackageManagerService extends IPackageManager.Stub @Override public int getPackageUid(String packageName, int flags, int userId) { if (!sUserManager.exists(userId)) return -1; + final int callingUid = Binder.getCallingUid(); flags = updateFlagsForPackage(flags, userId, packageName); - enforceCrossUserPermission(Binder.getCallingUid(), userId, - false /* requireFullPermission */, false /* checkShell */, "get package uid"); + enforceCrossUserPermission(callingUid, userId, + false /*requireFullPermission*/, false /*checkShell*/, "getPackageUid"); // reader synchronized (mPackages) { final PackageParser.Package p = mPackages.get(packageName); if (p != null && p.isMatch(flags)) { + PackageSetting ps = (PackageSetting) p.mExtras; + if (filterAppAccessLPr(ps, callingUid, userId)) { + return -1; + } return UserHandle.getUid(userId, p.applicationInfo.uid); } if ((flags & MATCH_KNOWN_PACKAGES) != 0) { final PackageSetting ps = mSettings.mPackages.get(packageName); - if (ps != null && ps.isMatch(flags)) { + if (ps != null && ps.isMatch(flags) + && !filterAppAccessLPr(ps, callingUid, userId)) { return UserHandle.getUid(userId, ps.appId); } } @@ -3859,23 +3877,27 @@ public class PackageManagerService extends IPackageManager.Stub @Override public int[] getPackageGids(String packageName, int flags, int userId) { if (!sUserManager.exists(userId)) return null; + final int callingUid = Binder.getCallingUid(); flags = updateFlagsForPackage(flags, userId, packageName); - enforceCrossUserPermission(Binder.getCallingUid(), userId, - false /* requireFullPermission */, false /* checkShell */, - "getPackageGids"); + enforceCrossUserPermission(callingUid, userId, + false /*requireFullPermission*/, false /*checkShell*/, "getPackageGids"); // reader synchronized (mPackages) { final PackageParser.Package p = mPackages.get(packageName); if (p != null && p.isMatch(flags)) { PackageSetting ps = (PackageSetting) p.mExtras; + if (filterAppAccessLPr(ps, callingUid, userId)) { + return null; + } // TODO: Shouldn't this be checking for package installed state for userId and // return null? return ps.getPermissionsState().computeGids(userId); } if ((flags & MATCH_KNOWN_PACKAGES) != 0) { final PackageSetting ps = mSettings.mPackages.get(packageName); - if (ps != null && ps.isMatch(flags)) { + if (ps != null && ps.isMatch(flags) + && !filterAppAccessLPr(ps, callingUid, userId)) { return ps.getPermissionsState().computeGids(userId); } } @@ -4413,10 +4435,21 @@ public class PackageManagerService extends IPackageManager.Stub // The resolver supports EVERYTHING! return true; } + final int callingUid = Binder.getCallingUid(); + final int callingUserId = UserHandle.getUserId(callingUid); PackageParser.Activity a = mActivities.mActivities.get(component); if (a == null) { return false; } + PackageSetting ps = mSettings.mPackages.get(component.getPackageName()); + if (ps == null) { + return false; + } + final boolean visibleToInstantApp = + (a.info.flags & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0; + if (filterAppAccessLPr(ps, callingUid, component, visibleToInstantApp, callingUserId)) { + return false; + } for (int i=0; i<a.intents.size(); i++) { if (a.intents.get(i).match(intent.getAction(), resolvedType, intent.getScheme(), intent.getData(), intent.getCategories(), TAG) >= 0) { @@ -4621,6 +4654,7 @@ public class PackageManagerService extends IPackageManager.Stub @Override public String[] getSystemSharedLibraryNames() { + // allow instant applications synchronized (mPackages) { Set<String> libs = null; final int libCount = mSharedLibraries.size(); @@ -4761,11 +4795,15 @@ public class PackageManagerService extends IPackageManager.Stub if (!sUserManager.exists(userId)) { return PackageManager.PERMISSION_DENIED; } + final int callingUid = Binder.getCallingUid(); synchronized (mPackages) { final PackageParser.Package p = mPackages.get(pkgName); if (p != null && p.mExtras != null) { final PackageSetting ps = (PackageSetting) p.mExtras; + if (filterAppAccessLPr(ps, callingUid, userId)) { + return PackageManager.PERMISSION_DENIED; + } final PermissionsState permissionsState = ps.getPermissionsState(); if (permissionsState.hasPermission(permName, userId)) { return PackageManager.PERMISSION_GRANTED; @@ -4783,8 +4821,10 @@ public class PackageManagerService extends IPackageManager.Stub @Override public int checkUidPermission(String permName, int uid) { + final int callingUid = Binder.getCallingUid(); + final int callingUserId = UserHandle.getUserId(callingUid); + final boolean isCallerInstantApp = getInstantAppPackageName(callingUid) != null; final int userId = UserHandle.getUserId(uid); - if (!sUserManager.exists(userId)) { return PackageManager.PERMISSION_DENIED; } @@ -4792,8 +4832,18 @@ public class PackageManagerService extends IPackageManager.Stub synchronized (mPackages) { Object obj = mSettings.getUserIdLPr(UserHandle.getAppId(uid)); if (obj != null) { - final SettingBase ps = (SettingBase) obj; - final PermissionsState permissionsState = ps.getPermissionsState(); + if (obj instanceof SharedUserSetting) { + if (isCallerInstantApp) { + return PackageManager.PERMISSION_DENIED; + } + } else if (obj instanceof PackageSetting) { + final PackageSetting ps = (PackageSetting) obj; + if (filterAppAccessLPr(ps, callingUid, callingUserId)) { + return PackageManager.PERMISSION_DENIED; + } + } + final SettingBase settingBase = (SettingBase) obj; + final PermissionsState permissionsState = settingBase.getPermissionsState(); if (permissionsState.hasPermission(permName, userId)) { return PackageManager.PERMISSION_GRANTED; } @@ -4832,6 +4882,17 @@ public class PackageManagerService extends IPackageManager.Stub return false; } + final int callingUid = Binder.getCallingUid(); + if (getInstantAppPackageName(callingUid) != null) { + if (!isCallerSameApp(packageName, callingUid)) { + return false; + } + } else { + if (isInstantApp(packageName, userId)) { + return false; + } + } + final long identity = Binder.clearCallingIdentity(); try { final int flags = getPermissionFlags(permission, packageName, userId); @@ -5614,12 +5675,23 @@ public class PackageManagerService extends IPackageManager.Stub || p2 == null || p2.mExtras == null) { return PackageManager.SIGNATURE_UNKNOWN_PACKAGE; } + final int callingUid = Binder.getCallingUid(); + final int callingUserId = UserHandle.getUserId(callingUid); + final PackageSetting ps1 = (PackageSetting) p1.mExtras; + final PackageSetting ps2 = (PackageSetting) p2.mExtras; + if (filterAppAccessLPr(ps1, callingUid, callingUserId) + || filterAppAccessLPr(ps2, callingUid, callingUserId)) { + return PackageManager.SIGNATURE_UNKNOWN_PACKAGE; + } return compareSignatures(p1.mSignatures, p2.mSignatures); } } @Override public int checkUidSignatures(int uid1, int uid2) { + final int callingUid = Binder.getCallingUid(); + final int callingUserId = UserHandle.getUserId(callingUid); + final boolean isCallerInstantApp = getInstantAppPackageName(callingUid) != null; // Map to base uids. uid1 = UserHandle.getAppId(uid1); uid2 = UserHandle.getAppId(uid2); @@ -5630,9 +5702,16 @@ public class PackageManagerService extends IPackageManager.Stub Object obj = mSettings.getUserIdLPr(uid1); if (obj != null) { if (obj instanceof SharedUserSetting) { + if (isCallerInstantApp) { + return PackageManager.SIGNATURE_UNKNOWN_PACKAGE; + } s1 = ((SharedUserSetting)obj).signatures.mSignatures; } else if (obj instanceof PackageSetting) { - s1 = ((PackageSetting)obj).signatures.mSignatures; + final PackageSetting ps = (PackageSetting) obj; + if (filterAppAccessLPr(ps, callingUid, callingUserId)) { + return PackageManager.SIGNATURE_UNKNOWN_PACKAGE; + } + s1 = ps.signatures.mSignatures; } else { return PackageManager.SIGNATURE_UNKNOWN_PACKAGE; } @@ -5642,9 +5721,16 @@ public class PackageManagerService extends IPackageManager.Stub obj = mSettings.getUserIdLPr(uid2); if (obj != null) { if (obj instanceof SharedUserSetting) { + if (isCallerInstantApp) { + return PackageManager.SIGNATURE_UNKNOWN_PACKAGE; + } s2 = ((SharedUserSetting)obj).signatures.mSignatures; } else if (obj instanceof PackageSetting) { - s2 = ((PackageSetting)obj).signatures.mSignatures; + final PackageSetting ps = (PackageSetting) obj; + if (filterAppAccessLPr(ps, callingUid, callingUserId)) { + return PackageManager.SIGNATURE_UNKNOWN_PACKAGE; + } + s2 = ps.signatures.mSignatures; } else { return PackageManager.SIGNATURE_UNKNOWN_PACKAGE; } @@ -5810,19 +5896,53 @@ public class PackageManagerService extends IPackageManager.Stub @Override public List<String> getAllPackages() { + final int callingUid = Binder.getCallingUid(); + final int callingUserId = UserHandle.getUserId(callingUid); synchronized (mPackages) { - return new ArrayList<String>(mPackages.keySet()); + if (canAccessInstantApps(callingUid)) { + return new ArrayList<String>(mPackages.keySet()); + } + final String instantAppPkgName = getInstantAppPackageName(callingUid); + final List<String> result = new ArrayList<>(); + if (instantAppPkgName != null) { + // caller is an instant application; filter unexposed applications + for (PackageParser.Package pkg : mPackages.values()) { + if (!pkg.visibleToInstantApps) { + continue; + } + result.add(pkg.packageName); + } + } else { + // caller is a normal application; filter instant applications + for (PackageParser.Package pkg : mPackages.values()) { + final PackageSetting ps = + pkg.mExtras != null ? (PackageSetting) pkg.mExtras : null; + if (ps != null + && ps.getInstantApp(callingUserId) + && !mInstantAppRegistry.isInstantAccessGranted( + callingUserId, UserHandle.getAppId(callingUid), ps.appId)) { + continue; + } + result.add(pkg.packageName); + } + } + return result; } } @Override public String[] getPackagesForUid(int uid) { + final int callingUid = Binder.getCallingUid(); + final boolean isCallerInstantApp = getInstantAppPackageName(callingUid) != null; final int userId = UserHandle.getUserId(uid); uid = UserHandle.getAppId(uid); // reader synchronized (mPackages) { Object obj = mSettings.getUserIdLPr(uid); if (obj instanceof SharedUserSetting) { + if (isCallerInstantApp) { + return null; + } final SharedUserSetting sus = (SharedUserSetting) obj; final int N = sus.packages.size(); String[] res = new String[N]; @@ -5839,7 +5959,7 @@ public class PackageManagerService extends IPackageManager.Stub return res; } else if (obj instanceof PackageSetting) { final PackageSetting ps = (PackageSetting) obj; - if (ps.getInstalled(userId)) { + if (ps.getInstalled(userId) && !filterAppAccessLPr(ps, callingUid, userId)) { return new String[]{ps.name}; } } @@ -5849,7 +5969,10 @@ public class PackageManagerService extends IPackageManager.Stub @Override public String getNameForUid(int uid) { - // reader + final int callingUid = Binder.getCallingUid(); + if (getInstantAppPackageName(callingUid) != null) { + return null; + } synchronized (mPackages) { Object obj = mSettings.getUserIdLPr(UserHandle.getAppId(uid)); if (obj instanceof SharedUserSetting) { @@ -5857,6 +5980,9 @@ public class PackageManagerService extends IPackageManager.Stub return sus.name + ":" + sus.userId; } else if (obj instanceof PackageSetting) { final PackageSetting ps = (PackageSetting) obj; + if (filterAppAccessLPr(ps, callingUid, UserHandle.getUserId(callingUid))) { + return null; + } return ps.name; } } @@ -5868,7 +5994,7 @@ public class PackageManagerService extends IPackageManager.Stub if (getInstantAppPackageName(Binder.getCallingUid()) != null) { return -1; } - if(sharedUserName == null) { + if (sharedUserName == null) { return -1; } // reader @@ -8980,7 +9106,10 @@ public class PackageManagerService extends IPackageManager.Stub @Override public void notifyPackageUse(String packageName, int reason) { synchronized (mPackages) { - PackageParser.Package p = mPackages.get(packageName); + if (!isCallerSameApp(packageName, Binder.getCallingUid())) { + return; + } + final PackageParser.Package p = mPackages.get(packageName); if (p == null) { return; } @@ -14183,15 +14312,16 @@ public class PackageManagerService extends IPackageManager.Stub @Override public boolean isPackageSuspendedForUser(String packageName, int userId) { - enforceCrossUserPermission(Binder.getCallingUid(), userId, + final int callingUid = Binder.getCallingUid(); + enforceCrossUserPermission(callingUid, userId, true /* requireFullPermission */, false /* checkShell */, "isPackageSuspendedForUser for user " + userId); synchronized (mPackages) { - final PackageSetting pkgSetting = mSettings.mPackages.get(packageName); - if (pkgSetting == null) { + final PackageSetting ps = mSettings.mPackages.get(packageName); + if (ps == null || filterAppAccessLPr(ps, callingUid, userId)) { throw new IllegalArgumentException("Unknown target package: " + packageName); } - return pkgSetting.getSuspended(userId); + return ps.getSuspended(userId); } } @@ -14555,11 +14685,20 @@ public class PackageManagerService extends IPackageManager.Stub if (TextUtils.isEmpty(packageName)) { return ParceledListSlice.emptyList(); } + final int callingUid = Binder.getCallingUid(); + final int callingUserId = UserHandle.getUserId(callingUid); synchronized (mPackages) { PackageParser.Package pkg = mPackages.get(packageName); if (pkg == null || pkg.activities == null) { return ParceledListSlice.emptyList(); } + if (pkg.mExtras == null) { + return ParceledListSlice.emptyList(); + } + final PackageSetting ps = (PackageSetting) pkg.mExtras; + if (filterAppAccessLPr(ps, callingUid, callingUserId)) { + return ParceledListSlice.emptyList(); + } final int count = pkg.activities.size(); ArrayList<IntentFilter> result = new ArrayList<>(); for (int n=0; n<count; n++) { @@ -18155,6 +18294,11 @@ public class PackageManagerService extends IPackageManager.Stub @Override public boolean isPackageDeviceAdminOnAnyUser(String packageName) { + final int callingUid = Binder.getCallingUid(); + if (getInstantAppPackageName(callingUid) != null + && !isCallerSameApp(packageName, callingUid)) { + return false; + } return isPackageDeviceAdmin(packageName, UserHandle.USER_ALL); } @@ -20836,11 +20980,14 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); @Override public int getApplicationEnabledSetting(String packageName, int userId) { if (!sUserManager.exists(userId)) return COMPONENT_ENABLED_STATE_DISABLED; - int uid = Binder.getCallingUid(); - enforceCrossUserPermission(uid, userId, + int callingUid = Binder.getCallingUid(); + enforceCrossUserPermission(callingUid, userId, false /* requireFullPermission */, false /* checkShell */, "get enabled"); // reader synchronized (mPackages) { + if (filterAppAccessLPr(mSettings.getPackageLPr(packageName), callingUid, userId)) { + return COMPONENT_ENABLED_STATE_DISABLED; + } return mSettings.getApplicationEnabledSettingLPr(packageName, userId); } } @@ -23531,13 +23678,22 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); return null; } synchronized(mPackages) { + final int callingUid = Binder.getCallingUid(); + final int callingUserId = UserHandle.getUserId(callingUid); final PackageParser.Package pkg = mPackages.get(packageName); if (pkg == null) { Slog.w(TAG, "KeySet requested for unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); } - if (pkg.applicationInfo.uid != Binder.getCallingUid() - && Process.SYSTEM_UID != Binder.getCallingUid()) { + final PackageSetting ps = (PackageSetting) pkg.mExtras; + if (filterAppAccessLPr(ps, callingUid, callingUserId)) { + // filter and pretend the package doesn't exist + Slog.w(TAG, "KeySet requested for filtered package: " + packageName + + ", uid:" + callingUid); + throw new IllegalArgumentException("Unknown package: " + packageName); + } + if (pkg.applicationInfo.uid != callingUid + && Process.SYSTEM_UID != callingUid) { throw new SecurityException("May not access signing KeySet of other apps."); } KeySetManagerService ksms = mSettings.mKeySetManagerService; @@ -24211,11 +24367,15 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); @Override public int getInstallReason(String packageName, int userId) { - enforceCrossUserPermission(Binder.getCallingUid(), userId, + final int callingUid = Binder.getCallingUid(); + enforceCrossUserPermission(callingUid, userId, true /* requireFullPermission */, false /* checkShell */, "get install reason"); synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(packageName); + if (filterAppAccessLPr(ps, callingUid, userId)) { + return PackageManager.INSTALL_REASON_UNKNOWN; + } if (ps != null) { return ps.getInstallReason(userId); } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index ae9852eb34a5..8b8e3c471006 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -5333,11 +5333,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override public void applyPostLayoutPolicyLw(WindowState win, WindowManager.LayoutParams attrs, WindowState attached, WindowState imeTarget) { - final boolean visible = win.isVisibleLw() && win.getAttrs().alpha > 0f; - if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisible=" + visible); + final boolean affectsSystemUi = win.canAffectSystemUiFlags(); + if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": affectsSystemUi=" + affectsSystemUi); applyKeyguardPolicyLw(win, imeTarget); final int fl = PolicyControl.getWindowFlags(win, attrs); - if (mTopFullscreenOpaqueWindowState == null && visible && attrs.type == TYPE_INPUT_METHOD) { + if (mTopFullscreenOpaqueWindowState == null && affectsSystemUi + && attrs.type == TYPE_INPUT_METHOD) { mForcingShowNavBar = true; mForcingShowNavBarLayer = win.getSurfaceLayer(); } @@ -5353,7 +5354,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean appWindow = attrs.type >= FIRST_APPLICATION_WINDOW && attrs.type < FIRST_SYSTEM_WINDOW; final int stackId = win.getStackId(); - if (mTopFullscreenOpaqueWindowState == null && visible) { + if (mTopFullscreenOpaqueWindowState == null && affectsSystemUi) { if ((fl & FLAG_FORCE_NOT_FULLSCREEN) != 0) { mForceStatusBar = true; } @@ -5385,7 +5386,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } // Voice interaction overrides both top fullscreen and top docked. - if (visible && win.getAttrs().type == TYPE_VOICE_INTERACTION) { + if (affectsSystemUi && win.getAttrs().type == TYPE_VOICE_INTERACTION) { if (mTopFullscreenOpaqueWindowState == null) { mTopFullscreenOpaqueWindowState = win; if (mTopFullscreenOpaqueOrDimmingWindowState == null) { @@ -5401,7 +5402,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } // Keep track of the window if it's dimming but not necessarily fullscreen. - if (mTopFullscreenOpaqueOrDimmingWindowState == null && visible + if (mTopFullscreenOpaqueOrDimmingWindowState == null && affectsSystemUi && win.isDimming() && StackId.normallyFullscreenWindows(stackId)) { mTopFullscreenOpaqueOrDimmingWindowState = win; } @@ -5409,7 +5410,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // We need to keep track of the top "fullscreen" opaque window for the docked stack // separately, because both the "real fullscreen" opaque window and the one for the docked // stack can control View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR. - if (mTopDockedOpaqueWindowState == null && visible && appWindow && attached == null + if (mTopDockedOpaqueWindowState == null && affectsSystemUi && appWindow && attached == null && isFullscreen(attrs) && stackId == DOCKED_STACK_ID) { mTopDockedOpaqueWindowState = win; if (mTopDockedOpaqueOrDimmingWindowState == null) { @@ -5419,7 +5420,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Also keep track of any windows that are dimming but not necessarily fullscreen in the // docked stack. - if (mTopDockedOpaqueOrDimmingWindowState == null && visible && win.isDimming() + if (mTopDockedOpaqueOrDimmingWindowState == null && affectsSystemUi && win.isDimming() && stackId == DOCKED_STACK_ID) { mTopDockedOpaqueOrDimmingWindowState = win; } diff --git a/services/core/java/com/android/server/wm/AppWindowContainerController.java b/services/core/java/com/android/server/wm/AppWindowContainerController.java index c982f081d624..65efa7053bab 100644 --- a/services/core/java/com/android/server/wm/AppWindowContainerController.java +++ b/services/core/java/com/android/server/wm/AppWindowContainerController.java @@ -107,7 +107,7 @@ public class AppWindowContainerController if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Remove starting " + mContainer + ": startingWindow=" + mContainer.startingWindow + " startingView=" + mContainer.startingSurface); - if (mContainer.startingWindow != null) { + if (mContainer.startingData != null) { surface = mContainer.startingSurface; mContainer.startingData = null; mContainer.startingSurface = null; @@ -164,18 +164,16 @@ public class AppWindowContainerController if (surface != null) { boolean abort = false; synchronized(mWindowMap) { + // If the window was successfully added, then + // we need to remove it. if (container.removed || container.startingData == null) { - // If the window was successfully added, then - // we need to remove it. - if (container.startingWindow != null) { - if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, - "Aborted starting " + container - + ": removed=" + container.removed - + " startingData=" + container.startingData); - container.startingWindow = null; - container.startingData = null; - abort = true; - } + if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, + "Aborted starting " + container + + ": removed=" + container.removed + + " startingData=" + container.startingData); + container.startingWindow = null; + container.startingData = null; + abort = true; } else { container.startingSurface = surface; } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 2ffa15206cb6..acd7703836d1 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1403,6 +1403,16 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP || ((mAppToken != null) && (mAppToken.mAppAnimator.animation != null))); } + // TODO: Another visibility method that was added late in the release to minimize risk. + @Override + public boolean canAffectSystemUiFlags() { + final boolean shown = mWinAnimator.getShown(); + final boolean exiting = mAnimatingExit || mDestroying + || mAppToken != null && mAppToken.hidden; + final boolean translucent = mAttrs.alpha == 0.0f; + return shown && !exiting && !translucent; + } + /** * Like isOnScreen, but returns false if the surface hasn't yet * been drawn. diff --git a/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java index da3b9c9e9298..65a56327bb24 100644 --- a/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java @@ -19,18 +19,24 @@ package com.android.server.wm; import org.junit.Test; import android.platform.test.annotations.Presubmit; +import android.platform.test.annotations.SecurityTest; import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; +import android.view.WindowManager; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; import static android.content.res.Configuration.EMPTY; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; +import java.util.function.Consumer; + /** * Test class for {@link AppWindowContainerController}. * @@ -90,6 +96,9 @@ public class AppWindowContainerControllerTests extends WindowTestsBase { assertNull(atoken.startingSurface); assertNull(atoken.startingWindow); assertNull(atoken.startingData); + atoken.forAllWindows(windowState -> { + assertFalse(windowState.getBaseType() == TYPE_APPLICATION_STARTING); + }, true); } @Test @@ -108,6 +117,22 @@ public class AppWindowContainerControllerTests extends WindowTestsBase { } @Test + public void testAddRemoveRace() throws Exception { + + // There was once a race condition between adding and removing starting windows + for (int i = 0; i < 1000; i++) { + final WindowTestUtils.TestAppWindowContainerController controller = + createAppWindowController(); + controller.addStartingWindow(InstrumentationRegistry.getContext().getPackageName(), + android.R.style.Theme, null, "Test", 0, 0, 0, 0, null, true, true, false, true, + false); + controller.removeStartingWindow(); + waitUntilHandlersIdle(); + assertNoStartingWindow(controller.getAppWindowToken(mDisplayContent)); + } + } + + @Test public void testTransferStartingWindow() throws Exception { final WindowTestUtils.TestAppWindowContainerController controller1 = createAppWindowController(); diff --git a/tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java b/tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java index 9fcd1b52b8fe..ddceea20ad21 100644 --- a/tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java +++ b/tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java @@ -128,5 +128,8 @@ public class TetheringConfigurationTest { assertTrue(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_DUN)); // Just to prove we haven't clobbered Wi-Fi: assertTrue(cfg.preferredUpstreamIfaceTypes.contains(TYPE_WIFI)); + // Check that we have not added new cellular interface types + assertFalse(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE)); + assertFalse(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI)); } } |