diff options
284 files changed, 2840 insertions, 2094 deletions
| diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java index d7c6ddbb0c63..d7be2595e88b 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java +++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java @@ -472,7 +472,7 @@ public final class JobStatus {          if (standbyBucket == RESTRICTED_INDEX) {              addDynamicConstraints(DYNAMIC_RESTRICTED_CONSTRAINTS);          } else { -            mReadyDynamicSatisfied = true; +            mReadyDynamicSatisfied = false;          }          mLastSuccessfulRunTime = lastSuccessfulRunTime; @@ -1132,8 +1132,8 @@ public final class JobStatus {          }          satisfiedConstraints = (satisfiedConstraints&~constraint) | (state ? constraint : 0);          mSatisfiedConstraintsOfInterest = satisfiedConstraints & CONSTRAINTS_OF_INTEREST; -        mReadyDynamicSatisfied = -                mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); +        mReadyDynamicSatisfied = mDynamicConstraints != 0 +                && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints);          if (STATS_LOG_ENABLED && (STATSD_CONSTRAINTS_TO_LOG & constraint) != 0) {              FrameworkStatsLog.write_non_chained(                      FrameworkStatsLog.SCHEDULED_JOB_CONSTRAINT_CHANGED, @@ -1184,8 +1184,8 @@ public final class JobStatus {          }          mDynamicConstraints |= constraints; -        mReadyDynamicSatisfied = -                mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); +        mReadyDynamicSatisfied = mDynamicConstraints != 0 +                && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints);      }      /** @@ -1196,8 +1196,8 @@ public final class JobStatus {       */      private void removeDynamicConstraints(int constraints) {          mDynamicConstraints &= ~constraints; -        mReadyDynamicSatisfied = -                mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); +        mReadyDynamicSatisfied = mDynamicConstraints != 0 +                && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints);      }      public long getLastSuccessfulRunTime() { @@ -1241,8 +1241,8 @@ public final class JobStatus {                  break;              default:                  satisfied |= constraint; -                mReadyDynamicSatisfied = -                        mDynamicConstraints == (satisfied & mDynamicConstraints); +                mReadyDynamicSatisfied = mDynamicConstraints != 0 +                        && mDynamicConstraints == (satisfied & mDynamicConstraints);                  break;          } @@ -1262,8 +1262,8 @@ public final class JobStatus {                  mReadyWithinQuota = oldValue;                  break;              default: -                mReadyDynamicSatisfied = -                        mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); +                mReadyDynamicSatisfied = mDynamicConstraints != 0 +                        && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints);                  break;          }          return toReturn; diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index e0ae750ba5ee..17720a34c424 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -2748,11 +2748,7 @@ public class Activity extends ContextThemeWrapper       * @return True if the activity is in multi-window mode.       */      public boolean isInMultiWindowMode() { -        try { -            return ActivityTaskManager.getService().isInMultiWindowMode(mToken); -        } catch (RemoteException e) { -        } -        return false; +        return mLastDispatchedIsInMultiWindowMode == Boolean.TRUE;      }      /** @@ -2795,11 +2791,7 @@ public class Activity extends ContextThemeWrapper       * @return True if the activity is in picture-in-picture mode.       */      public boolean isInPictureInPictureMode() { -        try { -            return ActivityTaskManager.getService().isInPictureInPictureMode(mToken); -        } catch (RemoteException e) { -        } -        return false; +        return mLastDispatchedIsInPictureInPictureMode == Boolean.TRUE;      }      /** diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index 0129aabd49f8..80d2e6c60f69 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -266,6 +266,14 @@ public class ActivityOptions {              "android:activity.disallowEnterPictureInPictureWhileLaunching";      /** +     * Indicates flags should be applied to the launching activity such that it will behave +     * correctly in a bubble. +     * @hide +     */ +    private static final String KEY_APPLY_ACTIVITY_FLAGS_FOR_BUBBLES = +            "android:activity.applyActivityFlagsForBubbles"; + +    /**       * For Activity transitions, the calling Activity's TransitionListener used to       * notify the called Activity when the shared element and the exit transitions       * complete. @@ -354,6 +362,7 @@ public class ActivityOptions {      private int mSplitScreenCreateMode = SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT;      private boolean mLockTaskMode = false;      private boolean mDisallowEnterPictureInPictureWhileLaunching; +    private boolean mApplyActivityFlagsForBubbles;      private boolean mTaskAlwaysOnTop;      private boolean mTaskOverlay;      private boolean mTaskOverlayCanResume; @@ -1033,6 +1042,8 @@ public class ActivityOptions {                  SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT);          mDisallowEnterPictureInPictureWhileLaunching = opts.getBoolean(                  KEY_DISALLOW_ENTER_PICTURE_IN_PICTURE_WHILE_LAUNCHING, false); +        mApplyActivityFlagsForBubbles = opts.getBoolean( +                KEY_APPLY_ACTIVITY_FLAGS_FOR_BUBBLES, false);          if (opts.containsKey(KEY_ANIM_SPECS)) {              Parcelable[] specs = opts.getParcelableArray(KEY_ANIM_SPECS);              mAnimSpecs = new AppTransitionAnimationSpec[specs.length]; @@ -1465,6 +1476,16 @@ public class ActivityOptions {          return mDisallowEnterPictureInPictureWhileLaunching;      } +    /** @hide */ +    public void setApplyActivityFlagsForBubbles(boolean apply) { +        mApplyActivityFlagsForBubbles = apply; +    } + +    /**  @hide */ +    public boolean isApplyActivityFlagsForBubbles() { +        return mApplyActivityFlagsForBubbles; +    } +      /**       * Update the current values in this ActivityOptions from those supplied       * in <var>otherOptions</var>.  Any values @@ -1663,6 +1684,9 @@ public class ActivityOptions {              b.putBoolean(KEY_DISALLOW_ENTER_PICTURE_IN_PICTURE_WHILE_LAUNCHING,                      mDisallowEnterPictureInPictureWhileLaunching);          } +        if (mApplyActivityFlagsForBubbles) { +            b.putBoolean(KEY_APPLY_ACTIVITY_FLAGS_FOR_BUBBLES, mApplyActivityFlagsForBubbles); +        }          if (mAnimSpecs != null) {              b.putParcelableArray(KEY_ANIM_SPECS, mAnimSpecs);          } diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index e19d5ecdd7d2..e97ebd7eee06 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -17,6 +17,8 @@  package android.app;  import static android.app.ActivityManager.PROCESS_STATE_UNKNOWN; +import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; +import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;  import static android.app.servertransaction.ActivityLifecycleItem.ON_CREATE;  import static android.app.servertransaction.ActivityLifecycleItem.ON_DESTROY;  import static android.app.servertransaction.ActivityLifecycleItem.ON_PAUSE; @@ -407,6 +409,9 @@ public final class ActivityThread extends ClientTransactionHandler {      @GuardedBy("this")      private @Nullable Map<SafeCancellationTransport, CancellationSignal> mRemoteCancellations; +    private final Map<IBinder, Integer> mLastReportedWindowingMode = Collections.synchronizedMap( +            new ArrayMap<>()); +      private static final class ProviderKey {          final String authority;          final int userId; @@ -3329,6 +3334,8 @@ public final class ActivityThread extends ClientTransactionHandler {                          " did not call through to super.onCreate()");                  }                  r.activity = activity; +                mLastReportedWindowingMode.put(activity.getActivityToken(), +                        config.windowConfiguration.getWindowingMode());              }              r.setState(ON_CREATE); @@ -3752,32 +3759,6 @@ public final class ActivityThread extends ClientTransactionHandler {      }      @Override -    public void handleMultiWindowModeChanged(IBinder token, boolean isInMultiWindowMode, -            Configuration overrideConfig) { -        final ActivityClientRecord r = mActivities.get(token); -        if (r != null) { -            final Configuration newConfig = new Configuration(mConfiguration); -            if (overrideConfig != null) { -                newConfig.updateFrom(overrideConfig); -            } -            r.activity.dispatchMultiWindowModeChanged(isInMultiWindowMode, newConfig); -        } -    } - -    @Override -    public void handlePictureInPictureModeChanged(IBinder token, boolean isInPipMode, -            Configuration overrideConfig) { -        final ActivityClientRecord r = mActivities.get(token); -        if (r != null) { -            final Configuration newConfig = new Configuration(mConfiguration); -            if (overrideConfig != null) { -                newConfig.updateFrom(overrideConfig); -            } -            r.activity.dispatchPictureInPictureModeChanged(isInPipMode, newConfig); -        } -    } - -    @Override      public void handlePictureInPictureRequested(IBinder token) {          final ActivityClientRecord r = mActivities.get(token);          if (r == null) { @@ -5274,8 +5255,15 @@ public final class ActivityThread extends ClientTransactionHandler {              throw e.rethrowFromSystemServer();          } +        // Save the current windowing mode to be restored and compared to the new configuration's +        // windowing mode (needed because we update the last reported windowing mode when launching +        // an activity and we can't tell inside performLaunchActivity whether we are relaunching) +        final int oldWindowingMode = mLastReportedWindowingMode.getOrDefault( +                r.activity.getActivityToken(), WINDOWING_MODE_UNDEFINED);          handleRelaunchActivityInner(r, configChanges, tmp.pendingResults, tmp.pendingIntents,                  pendingActions, tmp.startsNotResumed, tmp.overrideConfig, "handleRelaunchActivity"); +        mLastReportedWindowingMode.put(r.activity.getActivityToken(), oldWindowingMode); +        handleWindowingModeChangeIfNeeded(r.activity, r.activity.mCurrentConfig);          if (pendingActions != null) {              // Only report a successful relaunch to WindowManager. @@ -5558,6 +5546,10 @@ public final class ActivityThread extends ClientTransactionHandler {              throw new IllegalArgumentException("Activity token not set. Is the activity attached?");          } +        // multi-window / pip mode changes, if any, should be sent before the configuration change +        // callback, see also PinnedStackTests#testConfigurationChangeOrderDuringTransition +        handleWindowingModeChangeIfNeeded(activity, newConfig); +          boolean shouldChangeConfig = false;          if (activity.mCurrentConfig == null) {              shouldChangeConfig = true; @@ -5752,6 +5744,35 @@ public final class ActivityThread extends ClientTransactionHandler {      }      /** +     * Sends windowing mode change callbacks to {@link Activity} if applicable. +     * +     * See also {@link Activity#onMultiWindowModeChanged(boolean, Configuration)} and +     * {@link Activity#onPictureInPictureModeChanged(boolean, Configuration)} +     */ +    private void handleWindowingModeChangeIfNeeded(Activity activity, +            Configuration newConfiguration) { +        final int newWindowingMode = newConfiguration.windowConfiguration.getWindowingMode(); +        final IBinder token = activity.getActivityToken(); +        final int oldWindowingMode = mLastReportedWindowingMode.getOrDefault(token, +                WINDOWING_MODE_UNDEFINED); +        if (oldWindowingMode == newWindowingMode) return; +        // PiP callback is sent before the MW one. +        if (newWindowingMode == WINDOWING_MODE_PINNED) { +            activity.dispatchPictureInPictureModeChanged(true, newConfiguration); +        } else if (oldWindowingMode == WINDOWING_MODE_PINNED) { +            activity.dispatchPictureInPictureModeChanged(false, newConfiguration); +        } +        final boolean wasInMultiWindowMode = WindowConfiguration.inMultiWindowMode( +                oldWindowingMode); +        final boolean nowInMultiWindowMode = WindowConfiguration.inMultiWindowMode( +                newWindowingMode); +        if (wasInMultiWindowMode != nowInMultiWindowMode) { +            activity.dispatchMultiWindowModeChanged(nowInMultiWindowMode, newConfiguration); +        } +        mLastReportedWindowingMode.put(token, newWindowingMode); +    } + +    /**       * Updates the application info.       *       * This only works in the system process. Must be called on the main thread. diff --git a/core/java/android/app/ClientTransactionHandler.java b/core/java/android/app/ClientTransactionHandler.java index d2235f10da99..83465b0f8d36 100644 --- a/core/java/android/app/ClientTransactionHandler.java +++ b/core/java/android/app/ClientTransactionHandler.java @@ -146,17 +146,9 @@ public abstract class ClientTransactionHandler {      /** Deliver result from another activity. */      public abstract void handleSendResult(IBinder token, List<ResultInfo> results, String reason); -    /** Deliver multi-window mode change notification. */ -    public abstract void handleMultiWindowModeChanged(IBinder token, boolean isInMultiWindowMode, -            Configuration overrideConfig); -      /** Deliver new intent. */      public abstract void handleNewIntent(IBinder token, List<ReferrerIntent> intents); -    /** Deliver picture-in-picture mode change notification. */ -    public abstract void handlePictureInPictureModeChanged(IBinder token, boolean isInPipMode, -            Configuration overrideConfig); -      /** Request that an activity enter picture-in-picture. */      public abstract void handlePictureInPictureRequested(IBinder token); diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl index b7ceb6ae1b4c..3ce768944e48 100644 --- a/core/java/android/app/IActivityTaskManager.aidl +++ b/core/java/android/app/IActivityTaskManager.aidl @@ -300,8 +300,6 @@ interface IActivityTaskManager {      void suppressResizeConfigChanges(boolean suppress);      boolean moveTopActivityToPinnedStack(int stackId, in Rect bounds); -    boolean isInMultiWindowMode(in IBinder token); -    boolean isInPictureInPictureMode(in IBinder token);      boolean enterPictureInPictureMode(in IBinder token, in PictureInPictureParams params);      void setPictureInPictureParams(in IBinder token, in PictureInPictureParams params);      void requestPictureInPictureMode(in IBinder token); diff --git a/core/java/android/app/WindowConfiguration.java b/core/java/android/app/WindowConfiguration.java index 37e07de9809a..a486b9501e0c 100644 --- a/core/java/android/app/WindowConfiguration.java +++ b/core/java/android/app/WindowConfiguration.java @@ -727,6 +727,16 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu      }      /** +     * Returns {@code true} if the windowingMode represents a window in multi-window mode. +     * I.e. sharing the screen with another activity. +     * @hide +     */ +    public static boolean inMultiWindowMode(int windowingMode) { +        return windowingMode != WINDOWING_MODE_FULLSCREEN +                && windowingMode != WINDOWING_MODE_UNDEFINED; +    } + +    /**       * Returns true if the windowingMode represents a split window.       * @hide       */ diff --git a/core/java/android/app/servertransaction/MultiWindowModeChangeItem.java b/core/java/android/app/servertransaction/MultiWindowModeChangeItem.java deleted file mode 100644 index b1507177f7e8..000000000000 --- a/core/java/android/app/servertransaction/MultiWindowModeChangeItem.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.app.servertransaction; - -import android.app.ClientTransactionHandler; -import android.content.res.Configuration; -import android.os.IBinder; -import android.os.Parcel; - -import java.util.Objects; - -/** - * Multi-window mode change message. - * @hide - */ -// TODO(lifecycler): Remove the use of this and just use the configuration change message to -// communicate multi-window mode change with WindowConfiguration. -public class MultiWindowModeChangeItem extends ClientTransactionItem { - -    private boolean mIsInMultiWindowMode; -    private Configuration mOverrideConfig; - -    @Override -    public void execute(ClientTransactionHandler client, IBinder token, -            PendingTransactionActions pendingActions) { -        client.handleMultiWindowModeChanged(token, mIsInMultiWindowMode, mOverrideConfig); -    } - - -    // ObjectPoolItem implementation - -    private MultiWindowModeChangeItem() {} - -    /** Obtain an instance initialized with provided params. */ -    public static MultiWindowModeChangeItem obtain(boolean isInMultiWindowMode, -            Configuration overrideConfig) { -        MultiWindowModeChangeItem instance = ObjectPool.obtain(MultiWindowModeChangeItem.class); -        if (instance == null) { -            instance = new MultiWindowModeChangeItem(); -        } -        instance.mIsInMultiWindowMode = isInMultiWindowMode; -        instance.mOverrideConfig = overrideConfig; - -        return instance; -    } - -    @Override -    public void recycle() { -        mIsInMultiWindowMode = false; -        mOverrideConfig = null; -        ObjectPool.recycle(this); -    } - - -    // Parcelable implementation - -    /** Write to Parcel. */ -    @Override -    public void writeToParcel(Parcel dest, int flags) { -        dest.writeBoolean(mIsInMultiWindowMode); -        dest.writeTypedObject(mOverrideConfig, flags); -    } - -    /** Read from Parcel. */ -    private MultiWindowModeChangeItem(Parcel in) { -        mIsInMultiWindowMode = in.readBoolean(); -        mOverrideConfig = in.readTypedObject(Configuration.CREATOR); -    } - -    public static final @android.annotation.NonNull Creator<MultiWindowModeChangeItem> CREATOR = -            new Creator<MultiWindowModeChangeItem>() { -        public MultiWindowModeChangeItem createFromParcel(Parcel in) { -            return new MultiWindowModeChangeItem(in); -        } - -        public MultiWindowModeChangeItem[] newArray(int size) { -            return new MultiWindowModeChangeItem[size]; -        } -    }; - -    @Override -    public boolean equals(Object o) { -        if (this == o) { -            return true; -        } -        if (o == null || getClass() != o.getClass()) { -            return false; -        } -        final MultiWindowModeChangeItem other = (MultiWindowModeChangeItem) o; -        return mIsInMultiWindowMode == other.mIsInMultiWindowMode -                && Objects.equals(mOverrideConfig, other.mOverrideConfig); -    } - -    @Override -    public int hashCode() { -        int result = 17; -        result = 31 * result + (mIsInMultiWindowMode ? 1 : 0); -        result = 31 * result + mOverrideConfig.hashCode(); -        return result; -    } - -    @Override -    public String toString() { -        return "MultiWindowModeChangeItem{isInMultiWindowMode=" + mIsInMultiWindowMode -                + ",overrideConfig=" + mOverrideConfig + "}"; -    } -} diff --git a/core/java/android/app/servertransaction/PipModeChangeItem.java b/core/java/android/app/servertransaction/PipModeChangeItem.java deleted file mode 100644 index 1955897665be..000000000000 --- a/core/java/android/app/servertransaction/PipModeChangeItem.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.app.servertransaction; - -import android.app.ClientTransactionHandler; -import android.content.res.Configuration; -import android.os.IBinder; -import android.os.Parcel; - -import java.util.Objects; - -/** - * Picture in picture mode change message. - * @hide - */ -// TODO(lifecycler): Remove the use of this and just use the configuration change message to -// communicate multi-window mode change with WindowConfiguration. -public class PipModeChangeItem extends ClientTransactionItem { - -    private boolean mIsInPipMode; -    private Configuration mOverrideConfig; - -    @Override -    public void execute(ClientTransactionHandler client, IBinder token, -            PendingTransactionActions pendingActions) { -        client.handlePictureInPictureModeChanged(token, mIsInPipMode, mOverrideConfig); -    } - - -    // ObjectPoolItem implementation - -    private PipModeChangeItem() {} - -    /** Obtain an instance initialized with provided params. */ -    public static PipModeChangeItem obtain(boolean isInPipMode, Configuration overrideConfig) { -        PipModeChangeItem instance = ObjectPool.obtain(PipModeChangeItem.class); -        if (instance == null) { -            instance = new PipModeChangeItem(); -        } -        instance.mIsInPipMode = isInPipMode; -        instance.mOverrideConfig = overrideConfig; - -        return instance; -    } - -    @Override -    public void recycle() { -        mIsInPipMode = false; -        mOverrideConfig = null; -        ObjectPool.recycle(this); -    } - - -    // Parcelable implementation - -    /** Write to Parcel. */ -    public void writeToParcel(Parcel dest, int flags) { -        dest.writeBoolean(mIsInPipMode); -        dest.writeTypedObject(mOverrideConfig, flags); -    } - -    /** Read from Parcel. */ -    private PipModeChangeItem(Parcel in) { -        mIsInPipMode = in.readBoolean(); -        mOverrideConfig = in.readTypedObject(Configuration.CREATOR); -    } - -    public static final @android.annotation.NonNull Creator<PipModeChangeItem> CREATOR = -            new Creator<PipModeChangeItem>() { -        public PipModeChangeItem createFromParcel(Parcel in) { -            return new PipModeChangeItem(in); -        } - -        public PipModeChangeItem[] newArray(int size) { -            return new PipModeChangeItem[size]; -        } -    }; - -    @Override -    public boolean equals(Object o) { -        if (this == o) { -            return true; -        } -        if (o == null || getClass() != o.getClass()) { -            return false; -        } -        final PipModeChangeItem other = (PipModeChangeItem) o; -        return mIsInPipMode == other.mIsInPipMode -                && Objects.equals(mOverrideConfig, other.mOverrideConfig); -    } - -    @Override -    public int hashCode() { -        int result = 17; -        result = 31 * result + (mIsInPipMode ? 1 : 0); -        result = 31 * result + mOverrideConfig.hashCode(); -        return result; -    } - -    @Override -    public String toString() { -        return "PipModeChangeItem{isInPipMode=" + mIsInPipMode -                + ",overrideConfig=" + mOverrideConfig + "}"; -    } -} diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java index 786db6e20d14..986e6eafac2a 100644 --- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java +++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java @@ -71,6 +71,8 @@ import android.util.Log;  import android.util.Range;  import android.util.Size; +import dalvik.annotation.optimization.FastNative; +  import java.io.IOException;  import java.nio.ByteBuffer;  import java.nio.ByteOrder; @@ -356,7 +358,7 @@ public class CameraMetadataNative implements Parcelable {       */      public CameraMetadataNative(CameraMetadataNative other) {          super(); -        mMetadataPtr = nativeAllocateCopy(other); +        mMetadataPtr = nativeAllocateCopy(other.mMetadataPtr);          if (mMetadataPtr == 0) {              throw new OutOfMemoryError("Failed to allocate native CameraMetadata");          } @@ -398,7 +400,7 @@ public class CameraMetadataNative implements Parcelable {      @Override      public void writeToParcel(Parcel dest, int flags) { -        nativeWriteToParcel(dest); +        nativeWriteToParcel(dest, mMetadataPtr);      }      /** @@ -440,7 +442,7 @@ public class CameraMetadataNative implements Parcelable {      }      public void readFromParcel(Parcel in) { -        nativeReadFromParcel(in); +        nativeReadFromParcel(in, mMetadataPtr);      }      /** @@ -528,9 +530,9 @@ public class CameraMetadataNative implements Parcelable {      public static final int NUM_TYPES = 6;      private void close() { -        // this sets mMetadataPtr to 0 -        nativeClose(); -        mMetadataPtr = 0; // set it to 0 again to prevent eclipse from making this field final +        // Delete native pointer, but does not clear it +        nativeClose(mMetadataPtr); +        mMetadataPtr = 0;      }      private <T> T getBase(CameraCharacteristics.Key<T> key) { @@ -550,7 +552,7 @@ public class CameraMetadataNative implements Parcelable {          if (key.hasTag()) {              tag = key.getTag();          } else { -            tag = nativeGetTagFromKeyLocal(key.getName()); +            tag = nativeGetTagFromKeyLocal(mMetadataPtr, key.getName());              key.cacheTag(tag);          }          byte[] values = readValues(tag); @@ -560,14 +562,14 @@ public class CameraMetadataNative implements Parcelable {              if (key.mFallbackName == null) {                  return null;              } -            tag = nativeGetTagFromKeyLocal(key.mFallbackName); +            tag = nativeGetTagFromKeyLocal(mMetadataPtr, key.mFallbackName);              values = readValues(tag);              if (values == null) {                  return null;              }          } -        int nativeType = nativeGetTypeFromTagLocal(tag); +        int nativeType = nativeGetTypeFromTagLocal(mMetadataPtr, tag);          Marshaler<T> marshaler = getMarshalerForKey(key, nativeType);          ByteBuffer buffer = ByteBuffer.wrap(values).order(ByteOrder.nativeOrder());          return marshaler.unmarshal(buffer); @@ -1514,7 +1516,7 @@ public class CameraMetadataNative implements Parcelable {          if (key.hasTag()) {              tag = key.getTag();          } else { -            tag = nativeGetTagFromKeyLocal(key.getName()); +            tag = nativeGetTagFromKeyLocal(mMetadataPtr, key.getName());              key.cacheTag(tag);          }          if (value == null) { @@ -1523,7 +1525,7 @@ public class CameraMetadataNative implements Parcelable {              return;          } // else update the entry to a new value -        int nativeType = nativeGetTypeFromTagLocal(tag); +        int nativeType = nativeGetTypeFromTagLocal(mMetadataPtr, tag);          Marshaler<T> marshaler = getMarshalerForKey(key, nativeType);          int size = marshaler.calculateMarshalSize(value); @@ -1684,32 +1686,47 @@ public class CameraMetadataNative implements Parcelable {      @UnsupportedAppUsage      private long mMetadataPtr; // native std::shared_ptr<CameraMetadata>* -    private native long nativeAllocate(); -    private native long nativeAllocateCopy(CameraMetadataNative other) +    @FastNative +    private static native long nativeAllocate(); +    @FastNative +    private static native long nativeAllocateCopy(long ptr)              throws NullPointerException; -    private native synchronized void nativeWriteToParcel(Parcel dest); -    private native synchronized void nativeReadFromParcel(Parcel source); -    private native synchronized void nativeSwap(CameraMetadataNative other) +    @FastNative +    private static synchronized native void nativeWriteToParcel(Parcel dest, long ptr); +    @FastNative +    private static synchronized native void nativeReadFromParcel(Parcel source, long ptr); +    @FastNative +    private static synchronized native void nativeSwap(long ptr, long otherPtr)              throws NullPointerException; -    private native synchronized void nativeClose(); -    private native synchronized boolean nativeIsEmpty(); -    private native synchronized int nativeGetEntryCount(); +    @FastNative +    private static synchronized native void nativeClose(long ptr); +    @FastNative +    private static synchronized native boolean nativeIsEmpty(long ptr); +    @FastNative +    private static synchronized native int nativeGetEntryCount(long ptr);      @UnsupportedAppUsage -    private native synchronized byte[] nativeReadValues(int tag); -    private native synchronized void nativeWriteValues(int tag, byte[] src); -    private native synchronized void nativeDump() throws IOException; // dump to ALOGD - -    private native synchronized ArrayList nativeGetAllVendorKeys(Class keyClass); +    @FastNative +    private static synchronized native byte[] nativeReadValues(int tag, long ptr); +    @FastNative +    private static synchronized native void nativeWriteValues(int tag, byte[] src, long ptr); +    private static synchronized native void nativeDump(long ptr) throws IOException; // dump to LOGD + +    @FastNative +    private static synchronized native ArrayList nativeGetAllVendorKeys(long ptr, Class keyClass);      @UnsupportedAppUsage -    private native synchronized int nativeGetTagFromKeyLocal(String keyName) +    @FastNative +    private static synchronized native int nativeGetTagFromKeyLocal(long ptr, String keyName)              throws IllegalArgumentException;      @UnsupportedAppUsage -    private native synchronized int nativeGetTypeFromTagLocal(int tag) +    @FastNative +    private static synchronized native int nativeGetTypeFromTagLocal(long ptr, int tag)              throws IllegalArgumentException; +    @FastNative      private static native int nativeGetTagFromKey(String keyName, long vendorId)              throws IllegalArgumentException; +    @FastNative      private static native int nativeGetTypeFromTag(int tag, long vendorId)              throws IllegalArgumentException; @@ -1723,7 +1740,7 @@ public class CameraMetadataNative implements Parcelable {       * @hide       */      public void swap(CameraMetadataNative other) { -        nativeSwap(other); +        nativeSwap(mMetadataPtr, other.mMetadataPtr);          mCameraId = other.mCameraId;          mHasMandatoryConcurrentStreams = other.mHasMandatoryConcurrentStreams;          mDisplaySize = other.mDisplaySize; @@ -1733,7 +1750,7 @@ public class CameraMetadataNative implements Parcelable {       * @hide       */      public int getEntryCount() { -        return nativeGetEntryCount(); +        return nativeGetEntryCount(mMetadataPtr);      }      /** @@ -1742,12 +1759,12 @@ public class CameraMetadataNative implements Parcelable {       * @hide       */      public boolean isEmpty() { -        return nativeIsEmpty(); +        return nativeIsEmpty(mMetadataPtr);      }      /** -     * Retrieves the pointer to the native CameraMetadata as a Java long. +     * Retrieves the pointer to the native shared_ptr<CameraMetadata> as a Java long.       *       * @hide       */ @@ -1764,7 +1781,7 @@ public class CameraMetadataNative implements Parcelable {          if (keyClass == null) {              throw new NullPointerException();          } -        return (ArrayList<K>) nativeGetAllVendorKeys(keyClass); +        return (ArrayList<K>) nativeGetAllVendorKeys(mMetadataPtr, keyClass);      }      /** @@ -1816,7 +1833,7 @@ public class CameraMetadataNative implements Parcelable {       * @hide       */      public void writeValues(int tag, byte[] src) { -        nativeWriteValues(tag, src); +        nativeWriteValues(tag, src, mMetadataPtr);      }      /** @@ -1832,7 +1849,7 @@ public class CameraMetadataNative implements Parcelable {       */      public byte[] readValues(int tag) {          // TODO: Optimization. Native code returns a ByteBuffer instead. -        return nativeReadValues(tag); +        return nativeReadValues(tag, mMetadataPtr);      }      /** @@ -1845,7 +1862,7 @@ public class CameraMetadataNative implements Parcelable {       */      public void dumpToLog() {          try { -            nativeDump(); +            nativeDump(mMetadataPtr);          } catch (IOException e) {              Log.wtf(TAG, "Dump logging failed", e);          } diff --git a/core/java/android/net/TelephonyNetworkSpecifier.java b/core/java/android/net/TelephonyNetworkSpecifier.java index aafebd7ecfc8..33c71d5b312a 100644 --- a/core/java/android/net/TelephonyNetworkSpecifier.java +++ b/core/java/android/net/TelephonyNetworkSpecifier.java @@ -98,9 +98,10 @@ public final class TelephonyNetworkSpecifier extends NetworkSpecifier implements      /** @hide */      @Override      public boolean canBeSatisfiedBy(NetworkSpecifier other) { -        // Any generic requests should be satisfied by a specific telephony network. -        // For simplicity, we treat null same as MatchAllNetworkSpecifier -        return equals(other) || other == null || other instanceof MatchAllNetworkSpecifier; +        // Although the only caller, NetworkCapabilities, already handled the case of +        // MatchAllNetworkSpecifier, we do it again here in case the API will be used by others. +        // TODO(b/154959809): consider implementing bi-directional specifier instead. +        return equals(other) || other instanceof MatchAllNetworkSpecifier;      } diff --git a/core/java/android/os/RegistrantList.java b/core/java/android/os/RegistrantList.java index 98f949bbfd84..81750021fdd5 100644 --- a/core/java/android/os/RegistrantList.java +++ b/core/java/android/os/RegistrantList.java @@ -66,6 +66,10 @@ public class RegistrantList          }      } +    public synchronized void removeAll() { +        registrants.clear(); +    } +      @UnsupportedAppUsage      public synchronized int      size() diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl index 25e81114d86f..926d8fc5a368 100644 --- a/core/java/android/view/IWindowSession.aidl +++ b/core/java/android/view/IWindowSession.aidl @@ -342,5 +342,5 @@ interface IWindowSession {       * Update the flags on an input channel associated with a particular surface.       */      void updateInputChannel(in IBinder channelToken, int displayId, in SurfaceControl surface, -            int flags); +            int flags, in Region region);  } diff --git a/core/java/android/view/SurfaceControlViewHost.java b/core/java/android/view/SurfaceControlViewHost.java index 3d6da6f71b3f..7ec008c901bc 100644 --- a/core/java/android/view/SurfaceControlViewHost.java +++ b/core/java/android/view/SurfaceControlViewHost.java @@ -234,6 +234,14 @@ public class SurfaceControlViewHost {      }      /** +     * @return the WindowlessWindowManager instance that this host is attached to. +     * @hide +     */ +    public @NonNull WindowlessWindowManager getWindowlessWM() { +        return mWm; +    } + +    /**       * @hide       */      @TestApi diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java index 397bce44b25e..95d6d651cc79 100644 --- a/core/java/android/view/WindowlessWindowManager.java +++ b/core/java/android/view/WindowlessWindowManager.java @@ -16,16 +16,19 @@  package android.view; +import android.annotation.Nullable;  import android.content.res.Configuration;  import android.graphics.PixelFormat;  import android.graphics.Point;  import android.graphics.Rect; +import android.graphics.Region;  import android.os.IBinder;  import android.os.RemoteException;  import android.util.Log;  import android.util.MergedConfiguration;  import java.util.HashMap; +import java.util.Objects;  /**  * A simplistic implementation of IWindowSession. Rather than managing Surfaces @@ -42,6 +45,7 @@ public class WindowlessWindowManager implements IWindowSession {          WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();          int mDisplayId;          IBinder mInputChannelToken; +        Region mInputRegion;          State(SurfaceControl sc, WindowManager.LayoutParams p, int displayId,                  IBinder inputChannelToken) {              mSurfaceControl = sc; @@ -95,6 +99,30 @@ public class WindowlessWindowManager implements IWindowSession {          mResizeCompletionForWindow.put(window, callback);      } +    protected void setTouchRegion(IBinder window, @Nullable Region region) { +        State state; +        synchronized (this) { +            // Do everything while locked so that we synchronize with relayout. This should be a +            // very infrequent operation. +            state = mStateForWindow.get(window); +            if (state == null) { +                return; +            } +            if (Objects.equals(region, state.mInputRegion)) { +                return; +            } +            state.mInputRegion = region != null ? new Region(region) : null; +            if (state.mInputChannelToken != null) { +                try { +                    mRealWm.updateInputChannel(state.mInputChannelToken, state.mDisplayId, +                            state.mSurfaceControl, state.mParams.flags, state.mInputRegion); +                } catch (RemoteException e) { +                    Log.e(TAG, "Failed to update surface input channel: ", e); +                } +            } +        } +    } +      /**       * IWindowSession implementation.       */ @@ -234,7 +262,7 @@ public class WindowlessWindowManager implements IWindowSession {                  && state.mInputChannelToken != null) {              try {                  mRealWm.updateInputChannel(state.mInputChannelToken, state.mDisplayId, sc, -                        attrs.flags); +                        attrs.flags, state.mInputRegion);              } catch (RemoteException e) {                  Log.e(TAG, "Failed to update surface input channel: ", e);              } @@ -409,7 +437,7 @@ public class WindowlessWindowManager implements IWindowSession {      @Override      public void updateInputChannel(IBinder channelToken, int displayId, SurfaceControl surface, -            int flags) { +            int flags, Region region) {      }      @Override diff --git a/core/java/android/view/inputmethod/InlineSuggestionsRequest.java b/core/java/android/view/inputmethod/InlineSuggestionsRequest.java index 4d4faa4ba2a3..cce109074d82 100644 --- a/core/java/android/view/inputmethod/InlineSuggestionsRequest.java +++ b/core/java/android/view/inputmethod/InlineSuggestionsRequest.java @@ -72,6 +72,9 @@ public final class InlineSuggestionsRequest implements Parcelable {      /**       * The extras state propagated from the IME to pass extra data. +     * +     * <p>Note: There should be no remote objects in the bundle, all included remote objects will +     * be removed from the bundle before transmission.</p>       */      private @NonNull Bundle mExtras; @@ -261,6 +264,9 @@ public final class InlineSuggestionsRequest implements Parcelable {      /**       * The extras state propagated from the IME to pass extra data. +     * +     * <p>Note: There should be no remote objects in the bundle, all included remote objects will +     * be removed from the bundle before transmission.</p>       */      @DataClass.Generated.Member      public @NonNull Bundle getExtras() { @@ -513,6 +519,9 @@ public final class InlineSuggestionsRequest implements Parcelable {          /**           * The extras state propagated from the IME to pass extra data. +         * +         * <p>Note: There should be no remote objects in the bundle, all included remote objects will +         * be removed from the bundle before transmission.</p>           */          @DataClass.Generated.Member          public @NonNull Builder setExtras(@NonNull Bundle value) { @@ -595,7 +604,7 @@ public final class InlineSuggestionsRequest implements Parcelable {      }      @DataClass.Generated( -            time = 1587537617922L, +            time = 1588109685838L,              codegenVersion = "1.0.15",              sourceFile = "frameworks/base/core/java/android/view/inputmethod/InlineSuggestionsRequest.java",              inputSignatures = "public static final  int SUGGESTION_COUNT_UNLIMITED\nprivate final  int mMaxSuggestionCount\nprivate final @android.annotation.NonNull java.util.List<android.widget.inline.InlinePresentationSpec> mInlinePresentationSpecs\nprivate @android.annotation.NonNull java.lang.String mHostPackageName\nprivate @android.annotation.NonNull android.os.LocaleList mSupportedLocales\nprivate @android.annotation.NonNull android.os.Bundle mExtras\nprivate @android.annotation.Nullable android.os.IBinder mHostInputToken\nprivate  int mHostDisplayId\npublic  void setHostInputToken(android.os.IBinder)\nprivate  boolean extrasEquals(android.os.Bundle)\nprivate  void parcelHostInputToken(android.os.Parcel,int)\nprivate @android.annotation.Nullable android.os.IBinder unparcelHostInputToken(android.os.Parcel)\npublic  void setHostDisplayId(int)\nprivate  void onConstructed()\npublic  void filterContentTypes()\nprivate static  int defaultMaxSuggestionCount()\nprivate static  java.lang.String defaultHostPackageName()\nprivate static  android.os.LocaleList defaultSupportedLocales()\nprivate static @android.annotation.Nullable android.os.IBinder defaultHostInputToken()\nprivate static @android.annotation.Nullable int defaultHostDisplayId()\nprivate static @android.annotation.NonNull android.os.Bundle defaultExtras()\nclass InlineSuggestionsRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setInlinePresentationSpecs(java.util.List<android.widget.inline.InlinePresentationSpec>)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostPackageName(java.lang.String)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostInputToken(android.os.IBinder)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostDisplayId(int)\nclass BaseBuilder extends java.lang.Object implements []") diff --git a/core/java/android/widget/inline/InlinePresentationSpec.java b/core/java/android/widget/inline/InlinePresentationSpec.java index 9f966d84eb34..5f924c6ae194 100644 --- a/core/java/android/widget/inline/InlinePresentationSpec.java +++ b/core/java/android/widget/inline/InlinePresentationSpec.java @@ -44,6 +44,9 @@ public final class InlinePresentationSpec implements Parcelable {      /**       * The extras encoding the UI style information. Defaults to {@code Bundle.Empty} in which case       * the default system UI style will be used. +     * +     * <p>Note: There should be no remote objects in the bundle, all included remote objects will +     * be removed from the bundle before transmission.</p>       */      @NonNull      private final Bundle mStyle; @@ -122,6 +125,9 @@ public final class InlinePresentationSpec implements Parcelable {      /**       * The extras encoding the UI style information. Defaults to {@code Bundle.Empty} in which case       * the default system UI style will be used. +     * +     * <p>Note: There should be no remote objects in the bundle, all included remote objects will +     * be removed from the bundle before transmission.</p>       */      @DataClass.Generated.Member      public @NonNull Bundle getStyle() { @@ -260,6 +266,9 @@ public final class InlinePresentationSpec implements Parcelable {          /**           * The extras encoding the UI style information. Defaults to {@code Bundle.Empty} in which case           * the default system UI style will be used. +         * +         * <p>Note: There should be no remote objects in the bundle, all included remote objects will +         * be removed from the bundle before transmission.</p>           */          @DataClass.Generated.Member          public @NonNull Builder setStyle(@NonNull Bundle value) { @@ -293,7 +302,7 @@ public final class InlinePresentationSpec implements Parcelable {      }      @DataClass.Generated( -            time = 1586935491105L, +            time = 1588109681295L,              codegenVersion = "1.0.15",              sourceFile = "frameworks/base/core/java/android/widget/inline/InlinePresentationSpec.java",              inputSignatures = "private final @android.annotation.NonNull android.util.Size mMinSize\nprivate final @android.annotation.NonNull android.util.Size mMaxSize\nprivate final @android.annotation.NonNull android.os.Bundle mStyle\nprivate static @android.annotation.NonNull android.os.Bundle defaultStyle()\nprivate  boolean styleEquals(android.os.Bundle)\npublic  void filterContentTypes()\nclass InlinePresentationSpec extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nclass BaseBuilder extends java.lang.Object implements []") diff --git a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java index 837cc466a895..2b0fd663643d 100644 --- a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java +++ b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java @@ -210,7 +210,7 @@ public final class SystemUiDeviceConfigFlags {       * Allow touch passthrough above assist area during a session.       */      public static final String ASSIST_TAP_PASSTHROUGH = "assist_tap_passthrough"; -   +      /**       * (bool) Whether to show handles when taught.       */ @@ -393,6 +393,21 @@ public final class SystemUiDeviceConfigFlags {       */      public static final String PIP_USER_RESIZE = "pip_user_resize"; +    /** +     * (float) Bottom height in DP for Back Gesture. +     */ +    public static final String BACK_GESTURE_BOTTOM_HEIGHT = "back_gesture_bottom_height"; + +    /** +     * (float) Edge width in DP where touch down is allowed for Back Gesture. +     */ +    public static final String BACK_GESTURE_EDGE_WIDTH = "back_gesture_edge_width"; + +    /** +     * (float) Slop multiplier for Back Gesture. +     */ +    public static final String BACK_GESTURE_SLOP_MULTIPLIER = "back_gesture_slop_multiplier"; +      private SystemUiDeviceConfigFlags() {      }  } diff --git a/core/java/com/android/internal/policy/GestureNavigationSettingsObserver.java b/core/java/com/android/internal/policy/GestureNavigationSettingsObserver.java index 56a6db95badc..4786d41fef4b 100644 --- a/core/java/com/android/internal/policy/GestureNavigationSettingsObserver.java +++ b/core/java/com/android/internal/policy/GestureNavigationSettingsObserver.java @@ -16,13 +16,17 @@  package com.android.internal.policy; +import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BACK_GESTURE_EDGE_WIDTH; +  import android.content.ContentResolver;  import android.content.Context;  import android.content.res.Resources;  import android.database.ContentObserver;  import android.os.Handler;  import android.os.UserHandle; +import android.provider.DeviceConfig;  import android.provider.Settings; +import android.util.TypedValue;  /**   * @hide @@ -30,14 +34,27 @@ import android.provider.Settings;  public class GestureNavigationSettingsObserver extends ContentObserver {      private Context mContext;      private Runnable mOnChangeRunnable; +    private Handler mMainHandler;      public GestureNavigationSettingsObserver(Handler handler, Context context,              Runnable onChangeRunnable) {          super(handler); +        mMainHandler = handler;          mContext = context;          mOnChangeRunnable = onChangeRunnable;      } +    private final DeviceConfig.OnPropertiesChangedListener mOnPropertiesChangedListener = +            new DeviceConfig.OnPropertiesChangedListener() { +        @Override +        public void onPropertiesChanged(DeviceConfig.Properties properties) { +            if (DeviceConfig.NAMESPACE_SYSTEMUI.equals(properties.getNamespace()) +                            && mOnChangeRunnable != null) { +                mOnChangeRunnable.run(); +            } +        } +    }; +      public void register() {          ContentResolver r = mContext.getContentResolver();          r.registerContentObserver( @@ -49,10 +66,15 @@ public class GestureNavigationSettingsObserver extends ContentObserver {          r.registerContentObserver(                  Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE),                  false, this, UserHandle.USER_ALL); +        DeviceConfig.addOnPropertiesChangedListener( +                DeviceConfig.NAMESPACE_SYSTEMUI, +                runnable -> mMainHandler.post(runnable), +                mOnPropertiesChangedListener);      }      public void unregister() {          mContext.getContentResolver().unregisterContentObserver(this); +        DeviceConfig.removeOnPropertiesChangedListener(mOnPropertiesChangedListener);      }      @Override @@ -77,8 +99,12 @@ public class GestureNavigationSettingsObserver extends ContentObserver {      }      private int getSensitivity(Resources userRes, String side) { -        final int inset = userRes.getDimensionPixelSize( +        final float defaultInset = userRes.getDimension(                  com.android.internal.R.dimen.config_backGestureInset); +        final float backGestureInset = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI, +                BACK_GESTURE_EDGE_WIDTH, defaultInset); +        final float inset = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, backGestureInset, +                userRes.getDisplayMetrics());          final float scale = Settings.Secure.getFloatForUser(                  mContext.getContentResolver(), side, 1.0f, UserHandle.USER_CURRENT);          return (int) (inset * scale); diff --git a/core/jni/android_hardware_camera2_CameraMetadata.cpp b/core/jni/android_hardware_camera2_CameraMetadata.cpp index c523e2dc6737..9ad4cd9e9ae8 100644 --- a/core/jni/android_hardware_camera2_CameraMetadata.cpp +++ b/core/jni/android_hardware_camera2_CameraMetadata.cpp @@ -162,20 +162,23 @@ struct Helpers {  extern "C" { -static jobject CameraMetadata_getAllVendorKeys(JNIEnv* env, jobject thiz, jclass keyType); -static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyName, jlong vendorId); -static jint CameraMetadata_getTagFromKeyLocal(JNIEnv *env, jobject thiz, jstring keyName); -static jint CameraMetadata_getTypeFromTag(JNIEnv *env, jobject thiz, jint tag, jlong vendorId); -static jint CameraMetadata_getTypeFromTagLocal(JNIEnv *env, jobject thiz, jint tag); -static jint CameraMetadata_setupGlobalVendorTagDescriptor(JNIEnv *env, jobject thiz); +static jobject CameraMetadata_getAllVendorKeys(JNIEnv* env, jclass thiz, jlong ptr, +        jclass keyType); +static jint CameraMetadata_getTagFromKey(JNIEnv *env, jclass thiz, jstring keyName, +        jlong vendorId); +static jint CameraMetadata_getTagFromKeyLocal(JNIEnv *env, jclass thiz, jlong ptr, +        jstring keyName); +static jint CameraMetadata_getTypeFromTag(JNIEnv *env, jclass thiz, jint tag, jlong vendorId); +static jint CameraMetadata_getTypeFromTagLocal(JNIEnv *env, jclass thiz, jlong ptr, jint tag); +static jint CameraMetadata_setupGlobalVendorTagDescriptor(JNIEnv *env, jclass thiz); + +static std::shared_ptr<CameraMetadata>* CameraMetadata_getSharedPtr(jlong metadataLongPtr) { +    return reinterpret_cast<std::shared_ptr<CameraMetadata>* >(metadataLongPtr); +}  // Less safe access to native pointer. Does NOT throw any Java exceptions if NULL. -static CameraMetadata* CameraMetadata_getPointerNoThrow(JNIEnv *env, jobject thiz) { -    if (thiz == nullptr) { -        return nullptr; -    } -    auto metadata = reinterpret_cast<std::shared_ptr<CameraMetadata> *>( -            env->GetLongField(thiz, fields.metadata_ptr)); +static CameraMetadata* CameraMetadata_getPointerNoThrow(jlong ptr) { +    auto metadata = CameraMetadata_getSharedPtr(ptr);      if (metadata == nullptr) {          return nullptr;      } @@ -183,40 +186,31 @@ static CameraMetadata* CameraMetadata_getPointerNoThrow(JNIEnv *env, jobject thi  }  // Safe access to native pointer from object. Throws if not possible to access. -static CameraMetadata* CameraMetadata_getPointerThrow(JNIEnv *env, jobject thiz, +static CameraMetadata* CameraMetadata_getPointerThrow(JNIEnv *env, jlong ptr,                                                   const char* argName = "this") { - -    if (thiz == NULL) { -        ALOGV("%s: Throwing java.lang.NullPointerException for null reference", -              __FUNCTION__); -        jniThrowNullPointerException(env, argName); -        return NULL; -    } - -    CameraMetadata* metadata = CameraMetadata_getPointerNoThrow(env, thiz); -    if (metadata == NULL) { +    CameraMetadata* metadata = CameraMetadata_getPointerNoThrow(ptr); +    if (metadata == nullptr) {          ALOGV("%s: Throwing java.lang.IllegalStateException for closed object",                __FUNCTION__);          jniThrowException(env, "java/lang/IllegalStateException",                              "Metadata object was already closed"); -        return NULL; +        return nullptr;      }      return metadata;  } -static jlong CameraMetadata_allocate(JNIEnv *env, jobject thiz) { +static jlong CameraMetadata_allocate(JNIEnv *env, jclass thiz) {      ALOGV("%s", __FUNCTION__);      return reinterpret_cast<jlong>(new std::shared_ptr<CameraMetadata>(new CameraMetadata()));  } -static jlong CameraMetadata_allocateCopy(JNIEnv *env, jobject thiz, -        jobject other) { +static jlong CameraMetadata_allocateCopy(JNIEnv *env, jclass thiz, jlong other) {      ALOGV("%s", __FUNCTION__);      CameraMetadata* otherMetadata = -            CameraMetadata_getPointerThrow(env, other, "other"); +            CameraMetadata_getPointerThrow(env, other);      // In case of exception, return      if (otherMetadata == NULL) return NULL; @@ -226,10 +220,10 @@ static jlong CameraMetadata_allocateCopy(JNIEnv *env, jobject thiz,  } -static jboolean CameraMetadata_isEmpty(JNIEnv *env, jobject thiz) { +static jboolean CameraMetadata_isEmpty(JNIEnv *env, jclass thiz, jlong ptr) {      ALOGV("%s", __FUNCTION__); -    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, thiz); +    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, ptr);      if (metadata == NULL) {          ALOGW("%s: Returning early due to exception being thrown", @@ -245,10 +239,10 @@ static jboolean CameraMetadata_isEmpty(JNIEnv *env, jobject thiz) {      return empty;  } -static jint CameraMetadata_getEntryCount(JNIEnv *env, jobject thiz) { +static jint CameraMetadata_getEntryCount(JNIEnv *env, jclass thiz, jlong ptr) {      ALOGV("%s", __FUNCTION__); -    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, thiz); +    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, ptr);      if (metadata == NULL) return 0; // actually throws java exc. @@ -256,42 +250,33 @@ static jint CameraMetadata_getEntryCount(JNIEnv *env, jobject thiz) {  }  // idempotent. calling more than once has no effect. -static void CameraMetadata_close(JNIEnv *env, jobject thiz) { +static void CameraMetadata_close(JNIEnv *env, jclass thiz, jlong ptr) {      ALOGV("%s", __FUNCTION__); -    if (thiz != nullptr) { -        auto metadata = reinterpret_cast<std::shared_ptr<CameraMetadata> *>( -                env->GetLongField(thiz, fields.metadata_ptr)); -        if (metadata != nullptr) { -            delete metadata; -            env->SetLongField(thiz, fields.metadata_ptr, 0); -        } +    auto metadata = CameraMetadata_getSharedPtr(ptr); +    if (metadata != nullptr) { +        delete metadata;      } - -    LOG_ALWAYS_FATAL_IF(CameraMetadata_getPointerNoThrow(env, thiz) != nullptr, -                        "Expected the native ptr to be 0 after #close");  } -static void CameraMetadata_swap(JNIEnv *env, jobject thiz, jobject other) { +static void CameraMetadata_swap(JNIEnv *env, jclass thiz, jlong ptr, jlong other) {      ALOGV("%s", __FUNCTION__); -    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, thiz); +    auto metadata = CameraMetadata_getSharedPtr(ptr); +    auto otherMetadata = CameraMetadata_getSharedPtr(other); -    // order is important: we can't call another JNI method -    // if there is an exception pending      if (metadata == NULL) return; - -    CameraMetadata* otherMetadata = CameraMetadata_getPointerThrow(env, other, "other"); -      if (otherMetadata == NULL) return; +    // Need to swap shared pointers, not CameraMetadata, since the latter may be in use +    // by an NDK client, and we don't want to swap their data out from under them.      metadata->swap(*otherMetadata);  } -static jbyteArray CameraMetadata_readValues(JNIEnv *env, jobject thiz, jint tag) { +static jbyteArray CameraMetadata_readValues(JNIEnv *env, jclass thiz, jint tag, jlong ptr) {      ALOGV("%s (tag = %d)", __FUNCTION__, tag); -    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, thiz); +    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, ptr);      if (metadata == NULL) return NULL;      const camera_metadata_t *metaBuffer = metadata->getAndLock(); @@ -327,10 +312,11 @@ static jbyteArray CameraMetadata_readValues(JNIEnv *env, jobject thiz, jint tag)      return byteArray;  } -static void CameraMetadata_writeValues(JNIEnv *env, jobject thiz, jint tag, jbyteArray src) { +static void CameraMetadata_writeValues(JNIEnv *env, jclass thiz, jint tag, jbyteArray src, +        jlong ptr) {      ALOGV("%s (tag = %d)", __FUNCTION__, tag); -    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, thiz); +    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, ptr);      if (metadata == NULL) return;      const camera_metadata_t *metaBuffer = metadata->getAndLock(); @@ -400,9 +386,9 @@ static void* CameraMetadata_writeMetadataThread(void* arg) {      return NULL;  } -static void CameraMetadata_dump(JNIEnv *env, jobject thiz) { +static void CameraMetadata_dump(JNIEnv *env, jclass thiz, jlong ptr) {      ALOGV("%s", __FUNCTION__); -    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, thiz); +    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, ptr);      if (metadata == NULL) {          return;      } @@ -496,9 +482,9 @@ static void CameraMetadata_dump(JNIEnv *env, jobject thiz) {      }  } -static void CameraMetadata_readFromParcel(JNIEnv *env, jobject thiz, jobject parcel) { +static void CameraMetadata_readFromParcel(JNIEnv *env, jclass thiz, jobject parcel, jlong ptr) {      ALOGV("%s", __FUNCTION__); -    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, thiz); +    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, ptr);      if (metadata == NULL) {          return;      } @@ -517,9 +503,9 @@ static void CameraMetadata_readFromParcel(JNIEnv *env, jobject thiz, jobject par      }  } -static void CameraMetadata_writeToParcel(JNIEnv *env, jobject thiz, jobject parcel) { +static void CameraMetadata_writeToParcel(JNIEnv *env, jclass thiz, jobject parcel, jlong ptr) {      ALOGV("%s", __FUNCTION__); -    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, thiz); +    CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, ptr);      if (metadata == NULL) {          return;      } @@ -558,44 +544,44 @@ static const JNINativeMethod gCameraMetadataMethods[] = {      "()J",      (void*)CameraMetadata_allocate },    { "nativeAllocateCopy", -    "(L" CAMERA_METADATA_CLASS_NAME ";)J", +    "(J)J",      (void *)CameraMetadata_allocateCopy },    { "nativeIsEmpty", -    "()Z", +    "(J)Z",      (void*)CameraMetadata_isEmpty },    { "nativeGetEntryCount", -    "()I", +    "(J)I",      (void*)CameraMetadata_getEntryCount },    { "nativeClose", -    "()V", +    "(J)V",      (void*)CameraMetadata_close },    { "nativeSwap", -    "(L" CAMERA_METADATA_CLASS_NAME ";)V", +    "(JJ)V",      (void *)CameraMetadata_swap },    { "nativeGetTagFromKeyLocal", -    "(Ljava/lang/String;)I", +    "(JLjava/lang/String;)I",      (void *)CameraMetadata_getTagFromKeyLocal },    { "nativeGetTypeFromTagLocal", -    "(I)I", +    "(JI)I",      (void *)CameraMetadata_getTypeFromTagLocal },    { "nativeReadValues", -    "(I)[B", +    "(IJ)[B",      (void *)CameraMetadata_readValues },    { "nativeWriteValues", -    "(I[B)V", +    "(I[BJ)V",      (void *)CameraMetadata_writeValues },    { "nativeDump", -    "()V", +    "(J)V",      (void *)CameraMetadata_dump },    { "nativeGetAllVendorKeys", -    "(Ljava/lang/Class;)Ljava/util/ArrayList;", +    "(JLjava/lang/Class;)Ljava/util/ArrayList;",      (void *)CameraMetadata_getAllVendorKeys},  // Parcelable interface    { "nativeReadFromParcel", -    "(Landroid/os/Parcel;)V", +    "(Landroid/os/Parcel;J)V",      (void *)CameraMetadata_readFromParcel },    { "nativeWriteToParcel", -    "(Landroid/os/Parcel;)V", +    "(Landroid/os/Parcel;J)V",      (void *)CameraMetadata_writeToParcel },  }; @@ -652,8 +638,8 @@ int register_android_hardware_camera2_CameraMetadata(JNIEnv *env)  extern "C" { -static jint CameraMetadata_getTypeFromTagLocal(JNIEnv *env, jobject thiz, jint tag) { -    CameraMetadata* metadata = CameraMetadata_getPointerNoThrow(env, thiz); +static jint CameraMetadata_getTypeFromTagLocal(JNIEnv *env, jclass thiz, jlong ptr, jint tag) { +    CameraMetadata* metadata = CameraMetadata_getPointerNoThrow(ptr);      metadata_vendor_id_t vendorId = CAMERA_METADATA_INVALID_VENDOR_ID;      if (metadata) {          const camera_metadata_t *metaBuffer = metadata->getAndLock(); @@ -671,7 +657,8 @@ static jint CameraMetadata_getTypeFromTagLocal(JNIEnv *env, jobject thiz, jint t      return tagType;  } -static jint CameraMetadata_getTagFromKeyLocal(JNIEnv *env, jobject thiz, jstring keyName) { +static jint CameraMetadata_getTagFromKeyLocal(JNIEnv *env, jclass thiz, jlong ptr, +        jstring keyName) {      ScopedUtfChars keyScoped(env, keyName);      const char *key = keyScoped.c_str();      if (key == NULL) { @@ -682,7 +669,7 @@ static jint CameraMetadata_getTagFromKeyLocal(JNIEnv *env, jobject thiz, jstring      uint32_t tag = 0;      sp<VendorTagDescriptor> vTags; -    CameraMetadata* metadata = CameraMetadata_getPointerNoThrow(env, thiz); +    CameraMetadata* metadata = CameraMetadata_getPointerNoThrow(ptr);      if (metadata) {          sp<VendorTagDescriptorCache> cache = VendorTagDescriptorCache::getGlobalVendorTagCache();          if (cache.get()) { @@ -701,7 +688,8 @@ static jint CameraMetadata_getTagFromKeyLocal(JNIEnv *env, jobject thiz, jstring      return tag;  } -static jobject CameraMetadata_getAllVendorKeys(JNIEnv* env, jobject thiz, jclass keyType) { +static jobject CameraMetadata_getAllVendorKeys(JNIEnv* env, jclass thiz, jlong ptr, +        jclass keyType) {      metadata_vendor_id_t vendorId = CAMERA_METADATA_INVALID_VENDOR_ID;      // Get all vendor tags      sp<VendorTagDescriptor> vTags = VendorTagDescriptor::getGlobalVendorTagDescriptor(); @@ -712,7 +700,7 @@ static jobject CameraMetadata_getAllVendorKeys(JNIEnv* env, jobject thiz, jclass              return nullptr;          } -        CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, thiz); +        CameraMetadata* metadata = CameraMetadata_getPointerThrow(env, ptr);          if (metadata == NULL) return NULL;          const camera_metadata_t *metaBuffer = metadata->getAndLock(); @@ -816,7 +804,7 @@ static jobject CameraMetadata_getAllVendorKeys(JNIEnv* env, jobject thiz, jclass      return arrayList;  } -static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyName, +static jint CameraMetadata_getTagFromKey(JNIEnv *env, jclass thiz, jstring keyName,          jlong vendorId) {      ScopedUtfChars keyScoped(env, keyName);      const char *key = keyScoped.c_str(); @@ -844,7 +832,7 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN      return tag;  } -static jint CameraMetadata_getTypeFromTag(JNIEnv *env, jobject thiz, jint tag, jlong vendorId) { +static jint CameraMetadata_getTypeFromTag(JNIEnv *env, jclass thiz, jint tag, jlong vendorId) {      int tagType = get_local_camera_metadata_tag_type_vendor_id(tag, vendorId);      if (tagType == -1) {          jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", @@ -855,7 +843,7 @@ static jint CameraMetadata_getTypeFromTag(JNIEnv *env, jobject thiz, jint tag, j      return tagType;  } -static jint CameraMetadata_setupGlobalVendorTagDescriptor(JNIEnv *env, jobject thiz) { +static jint CameraMetadata_setupGlobalVendorTagDescriptor(JNIEnv *env, jclass thiz) {      const String16 NAME("media.camera");      sp<hardware::ICameraService> cameraService;      status_t err = getService(NAME, /*out*/&cameraService); diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 7024755dd2d8..face71441244 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Opgedateer deur jou administrateur"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Uitgevee deur jou administrateur"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Batterybespaarder doen die volgende om die batterylewe te verleng:\n\n•Skakel Donkertema aan\n•Skakel agtergrondaktiwiteit, sommige visuele effekte en ander kenmerke, soos \"Ok Google\", af of beperk hulle\n\n"<annotation id="url">"Kom meer te wete"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Batterybespaarder doen die volgende om batterylewe te verleng:\n\n•Skakel Donkertema aan\n•Skakel agtergrondaktiwiteit, sommige visuele effekte en ander kenmerke, soos \"Ok Google\", af of beperk hulle"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Databespaarder verhoed sommige programme om data in die agtergrond te stuur of te aanvaar om datagebruik te help verminder. \'n Program wat jy tans gebruik kan by data ingaan, maar sal dit dalk minder gereeld doen. Dit kan byvoorbeeld beteken dat prente nie wys totdat jy op hulle tik nie."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Skakel Databespaarder aan?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Skakel aan"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Kragdialoog"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Sluitskerm"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Skermkiekie"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Toeganklikheidkortpad op skerm"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Toeganklikheidkortpadkieser op skerm"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g> se onderskrifbalk."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> is in die BEPERK-groep geplaas"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"het \'n prent gestuur"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Gesprek"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Groepsgesprek"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index df521e037300..634da0bb0964 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"በእርስዎ አስተዳዳሪ ተዘምኗል"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"በእርስዎ አስተዳዳሪ ተሰርዟል"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"እሺ"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"የባትሪ ዕድሜን ለማራዘም፣ የባትሪ ቆጣቢ፦\n\n•ጨለማ ገጽታን ያበራል\n•የበስተጀርባ እንቅስቃሴን፣ አንዳንድ የሚታዩ ማሳመሪያዎችን፣ እና ሌሎች እንደ «Hey Google» ያሉ ባህሪያትን ያጠፋል ወይም ይገድባል\n\n"<annotation id="url">"የበለጠ ለመረዳት"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"የባትሪ ዕድሜን ለማራዘም፣ የባትሪ ቆጣቢ፦\n\n•ጨለማ ገጽታን ያበራል\n•የበስተጀርባ እንቅስቃሴን፣ አንዳንድ የሚታዩ ማሳመሪያዎችን፣ እና ሌሎች እንደ «Hey Google» ያሉ ባህሪያትን ያጠፋል ወይም ይገድባል"</string>      <string name="data_saver_description" msgid="4995164271550590517">"የውሂብ አጠቃቀም እንዲቀንስ ለማገዝ ውሂብ ቆጣቢ አንዳንድ መተግበሪያዎች ከበስተጀርባ ሆነው ውሂብ እንዳይልኩ ወይም እንዳይቀበሉ ይከለክላቸዋል። በአሁኑ ጊዜ እየተጠቀሙበት ያለ መተግበሪያ ውሂብ ሊደርስ ይችላል፣ ነገር ግን ባነሰ ተደጋጋሚነት ሊሆን ይችላል። ይሄ ማለት ለምሳሌ ምስሎችን መታ እስኪያደርጓቸው ድረስ ላይታዩ ይችላሉ ማለት ነው።"</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"ውሂብ ቆጣቢ ይጥፋ?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"አብራ"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"የኃይል መገናኛ"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"የማያ ገጽ ቁልፍ"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"ቅጽበታዊ ገጽ እይታ"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"የማያ ገጽ ላይ ተደራሽነት አቋራጭ"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"የማያ ገጽ ላይ ተደራሽነት አቋራጭ መራጭ"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"የ<xliff:g id="APP_NAME">%1$s</xliff:g> የሥዕል ገላጭ ጽሑፍ አሞሌ።"</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ወደ የRESTRICTED ባልዲ ተከትቷል"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>፦"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"አንድ ምስል ልከዋል"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"ውይይት"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"የቡድን ውይይት"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index ec049065dc67..d70da89100ee 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -208,12 +208,9 @@      <string name="factory_reset_warning" msgid="6858705527798047809">"سيتم محو بيانات جهازك."</string>      <string name="factory_reset_message" msgid="2657049595153992213">"تعذّر استخدام تطبيق المشرف. سيتم محو بيانات جهازك الآن.\n\nإذا كانت لديك أسئلة، اتصل بمشرف مؤسستك."</string>      <string name="printing_disabled_by" msgid="3517499806528864633">"تم إيقاف الطباعة بواسطة <xliff:g id="OWNER_APP">%s</xliff:g>."</string> -    <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> -    <skip /> +    <string name="personal_apps_suspension_title" msgid="7561416677884286600">"تفعيل الملف الشخصي للعمل"</string> +    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"تم حظر تطبيقاتك الشخصية إلى أن تفعِّل ملفك الشخصي للعمل."</string> +    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"سيتم حظر تطبيقاتك الشخصية غدًا."</string>      <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"تفعيل الملف الشخصي للعمل"</string>      <string name="me" msgid="6207584824693813140">"أنا"</string>      <string name="power_dialog" product="tablet" msgid="8333207765671417261">"خيارات الجهاز اللوحي"</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index 2779029e530f..2b302b54ae51 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Admin tərəfindən yeniləndi"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Admin tərəfindən silindi"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Batareyanın ömrünü artırmaq üçün Enerjiyə Qənaət funksiyası:\n\n•Qaranlıq temanı aktiv edir\n•Arxa fondakı fəaliyyəti, bəzi vizual effektləri və “Hey Google” kimi digər funksiyaları deaktiv edir və ya məhdudlaşdırır\n\n"<annotation id="url">"Ətraflı məlumat"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Batareyanın ömrünü artırmaq üçün Enerjiyə Qənaət funksiyası:\n\n•Qaranlıq temanı aktiv edir\n•Arxa fondakı fəaliyyəti, bəzi vizual effektləri və “Hey Google” kimi digər funksiyaları deaktiv edir və ya məhdudlaşdırır"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Data istifadəsini azalatmaq üçün, Data Qanaəti bəzi tətbiqlərin arxafonda data göndərməsinin və qəbulunun qarşısını alır. Hazırda işlətdiyiniz tətbiq dataya daxil ola bilər, ancaq bunu tez-tez edə bilməz. Bu o deməkdir ki, məsələn, Siz üzərinə tıklamadıqca o şəkillər göstərilməyəcək."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Data Qənaəti aktiv edilsin?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivləşdirin"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Yandırıb-söndürmə dialoqu"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Kilid Ekranı"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Ekran şəkli"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Ekranda Əlçatımlılıq Qısayolu"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Ekranda Əlçatımlılıq Qısayolu Seçicisi"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g> başlıq paneli."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> MƏHDUDLAŞDIRILMIŞ səbətinə yerləşdirilib"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"şəkil göndərdi"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Söhbət"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Qrup Söhbəti"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index d12073a9217e..a7f5b764e432 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -1817,10 +1817,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Ažurirao je administrator"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisao je administrator"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Potvrdi"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Da bi se produžilo trajanje baterije, ušteda baterije:\n\n•uključuje tamnu temu\n•isključuje ili ograničava aktivnosti u pozadini, neke vizuelne efekte i druge funkcije, na primer, „Ok Google“\n\n"<annotation id="url">"Saznajte više"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Da bi se produžilo trajanje baterije, ušteda baterije:\n\n•uključuje tamnu temu\n•isključuje ili ograničava aktivnosti u pozadini, neke vizuelne efekte i druge funkcije, na primer, „Ok Google“"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Da bi se smanjila potrošnja podataka, Ušteda podataka sprečava neke aplikacije da šalju ili primaju podatke u pozadini. Aplikacija koju trenutno koristite može da pristupa podacima, ali će to činiti ređe. Na primer, slike se neće prikazivati dok ih ne dodirnete."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Želite da uključite Uštedu podataka?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Uključi"</string> @@ -2078,15 +2076,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dijalog napajanja"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Zaključani ekran"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Snimak ekrana"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Prečice za pristupačnost na ekranu"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Alatka za biranje prečica za pristupačnost na ekranu"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Traka sa naslovima aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> je dodat u segment OGRANIČENO"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"je poslao/la sliku"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Konverzacija"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Grupna konverzacija"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 68c851cdf9cf..994c548aab6e 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -1840,10 +1840,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Абноўлены вашым адміністратарам"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Выдалены вашым адміністратарам"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Каб павялічыць тэрмін службы акумулятара, рэжым эканоміі зараду:\n\n•·уключае цёмную тэму;\n• выключае ці абмяжоўвае дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты і іншыя функцыі, напрыклад \"Ok Google\"\n\n"<annotation id="url">"Даведацца больш"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Каб павялічыць тэрмін службы акумулятара, рэжым эканоміі зараду:\n\n• уключае цёмную тэму;\n• выключае ці абмяжоўвае дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты і іншыя функцыі, напрыклад \"Ok Google\""</string>      <string name="data_saver_description" msgid="4995164271550590517">"У рэжыме \"Эканомія трафіка\" фонавая перадача для некаторых праграмам адключана. Праграма, якую вы зараз выкарыстоўваеце, можа атрымліваць доступ да даных, але радзей, чым звычайна. Напрыклад, відарысы могуць не загружацца, пакуль вы не націсніце на іх."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Уключыць Эканомію трафіка?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Уключыць"</string> @@ -2112,15 +2110,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Дыялогавае акно сілкавання"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Экран блакіроўкі"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Здымак экрана"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Хуткі доступ да спецыяльных магчымасцей на экране"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Налада хуткага доступу да спецыяльных магчымасцей на экране"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Панэль субцітраў праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакет \"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>\" дададзены ў АБМЕЖАВАНУЮ групу"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"адпраўлены відарыс"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Размова"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Групавая размова"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 85c18f4ebe3b..7ddebd0b3d26 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -200,12 +200,9 @@      <string name="factory_reset_warning" msgid="6858705527798047809">"Данните на устройството ви ще бъдат изтрити"</string>      <string name="factory_reset_message" msgid="2657049595153992213">"Приложението за администриране не може да се използва. Сега данните на устройството ви ще бъдат изтрити.\n\nАко имате въпроси, свържете се с администратора на организацията си."</string>      <string name="printing_disabled_by" msgid="3517499806528864633">"Отпечатването е деактивиранo от <xliff:g id="OWNER_APP">%s</xliff:g>."</string> -    <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> -    <skip /> +    <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Служ. потр. профил: Включване"</string> +    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Личните ви приложения са блокирани, докато не включите служебния си потребителски профил"</string> +    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Личните ви приложения ще бъдат блокирани утре"</string>      <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Включване на служебния потребителски профил"</string>      <string name="me" msgid="6207584824693813140">"Аз"</string>      <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Опции за таблета"</string> @@ -1797,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Актуализирано от администратора ви"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Изтрито от администратора ви"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"С цел удължаване на живота на батерията режимът за запазването ѝ:\n\n•·включва тъмната тема;\n•·изключва или ограничава активността на заден план, някои визуални ефекти и други функции, като например „Ok Google“.\n\n"<annotation id="url">"Научете повече"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"С цел удължаване на живота на батерията режимът за запазването ѝ:\n\n• включва тъмната тема;\n• изключва или ограничава активността на заден план, някои визуални ефекти и други функции, като например „Ok Google“."</string>      <string name="data_saver_description" msgid="4995164271550590517">"С цел намаляване на преноса на данни функцията за икономия на данни не позволява на някои приложения да изпращат или получават данни на заден план. Понастоящем използвано от вас приложение може да използва данни, но по-рядко. Това например може да означава, че изображенията не се показват, докато не ги докоснете."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Ще вкл. ли „Икономия на данни“?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Включване"</string> @@ -2047,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Диалогов прозорец за захранването"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Заключен екран"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Екранна снимка"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Пряк път към достъпността на екрана"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Инструмент за избор на пряк път към достъпността на екрана"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Лента за надписи на <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакетът <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> е поставен в ОГРАНИЧЕНИЯ контейнер"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"изпратено изображение"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Разговор"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Групов разговор"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"Над <xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 41683e886620..3812dad3c0ac 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -1631,10 +1631,8 @@      <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"উভয় ভলিউম কী কয়েক সেকেন্ড ধরে থাকলে <xliff:g id="SERVICE">%1$s</xliff:g> চালু হয়ে যাবে। এটি একটি অ্যাক্সেসিবিলিটি ফিচার। এর ফলে, আপনার ডিভাইস কীভাবে কাজ করবে সেটিতে পরিবর্তন হতে পারে।\n\nসেটিংস > অ্যাক্সেসিবিলিটি থেকে আপনি এই শর্টকাট পরিবর্তন করতে পারবেন।"</string>      <string name="accessibility_shortcut_on" msgid="5463618449556111344">"চালু করুন"</string>      <string name="accessibility_shortcut_off" msgid="3651336255403648739">"চালু করবেন না"</string> -    <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> -    <skip /> -    <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> -    <skip /> +    <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"চালু"</string> +    <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"বন্ধ"</string>      <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> অ্যাপটিকে আপনার ডিভাইসে সম্পূর্ণ নিয়ন্ত্রণের অনুমতি দিতে চান?"</string>      <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"<xliff:g id="SERVICE">%1$s</xliff:g> চালু করলে, ডেটা এনক্রিপশন উন্নত করার উদ্দেশ্যে আপনার ডিভাইস স্ক্রিন লক ব্যবহার করবে না।"</string>      <string name="accessibility_service_warning_description" msgid="291674995220940133">"যে অ্যাপগুলি আপনাকে অ্যাক্সেসিবিলিটির প্রয়োজন মেটাতে সাহায্য করে সেই অ্যাপগুলির জন্য সম্পূর্ণ নিয়ন্ত্রণের বিষয়টি উপযুক্ত, কিন্তু তা বলে সমস্ত অ্যাপের জন্য নয়।"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 77991dbf8d00..45bb18d1324d 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -1819,10 +1819,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Ažurirao je vaš administrator"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisao je vaš administrator"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Uredu"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Radi produženja vijeka trajanja baterije, Ušteda baterije:\n\n•Uključuje Tamnu temu\n•Isključuje ili ograničava aktivnosti u pozadini, određene vizuelne efekte i druge funkcije kao što je \"Ok Google\"\n\n"<annotation id="url">"Saznajte više"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Radi produženja vijeka trajanja baterije, Ušteda baterije:\n\n•Uključuje Tamnu temu\n•Isključuje ili ograničava aktivnosti u pozadini, određene vizuelne efekte i druge funkcije kao što je \"Ok Google\""</string>      <string name="data_saver_description" msgid="4995164271550590517">"Radi smanjenja prijenosa podataka, Ušteda podataka sprečava da neke aplikacije šalju ili primaju podatke u pozadini. Aplikacija koju trenutno koristite može pristupiti podacima, ali će to činiti rjeđe. Naprimjer, to može značiti da se slike ne prikazuju dok ih ne dodirnete."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Uključiti Uštedu podataka?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Uključi"</string> @@ -2080,15 +2078,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dijaloški okvir za napajanje"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Zaključavanje ekrana"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Snimak ekrana"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Prečica za pristupačnost na ekranu"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Okvir za odabir prečice za pristupačnost na ekranu"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Traka za natpis aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> je stavljen u odjeljak OGRANIČENO"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"je poslao/la sliku"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Razgovor"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Grupni razgovor"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 64aa7f90243e..33c2595eca02 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Actualitzat per l\'administrador"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Suprimit per l\'administrador"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"D\'acord"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Per allargar la durada de la bateria, el mode Estalvi de bateria fa el següent:\n\n• Activa el tema fosc.\n• Desactiva o restringeix l\'activitat en segon pla, alguns efectes visuals i altres funcions com \"Ok Google\".\n\n"<annotation id="url">"Més informació"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Per allargar la durada de la bateria, el mode Estalvi de bateria fa el següent:\n\n• Activa el tema fosc.\n• Desactiva o restringeix l\'activitat en segon pla, alguns efectes visuals i altres funcions com \"Ok Google\"."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Per reduir l\'ús de dades, la funció Economitzador de dades evita que determinades aplicacions enviïn o rebin dades en segon pla. L\'aplicació que estiguis fent servir podrà accedir a les dades, però menys sovint. Això vol dir, per exemple, que les imatges no es mostraran fins que no les toquis."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Activar Economitzador de dades?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Activa"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Quadre de diàleg d\'engegada"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Pantalla de bloqueig"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Captura de pantalla"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Drecera d\'accessibilitat en pantalla"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Selector de dreceres d\'accessibilitat en pantalla"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Barra de títol de l\'aplicació <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> s\'ha transferit al segment RESTRINGIT"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ha enviat una imatge"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversa"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Conversa de grup"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index d1b0b5b235ee..53216782756d 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -1840,10 +1840,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Aktualizováno administrátorem"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Smazáno administrátorem"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Spořič baterie za účelem úspory energie:\n\n•zapne tmavý motiv,\n•vypne nebo omezí aktivitu na pozadí, některé vizuální efekty a další funkce jako „Ok Google“\n\n"<annotation id="url">"Další informace"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Spořič baterie za účelem úspory energie:\n\n•zapne tmavý motiv,\n•vypne nebo omezí aktivitu na pozadí, některé vizuální efekty a další funkce jako „Ok Google“"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Spořič dat z důvodu snížení využití dat některým aplikacím brání v odesílání nebo příjmu dat na pozadí. Aplikace, kterou právě používáte, data přenášet může, ale může tak činit méně často. V důsledku toho se například obrázky nemusejí zobrazit, dokud na ně neklepnete."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Chcete zapnout Spořič dat?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Zapnout"</string> @@ -2112,15 +2110,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dialogové okno k napájení"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Obrazovka uzamčení"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Snímek obrazovky"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Zkratka přístupnosti na obrazovce"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Výběr zkratky přístupnosti na obrazovce"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Popisek aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Balíček <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> byl vložen do sekce OMEZENO"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"odesílá obrázek"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Konverzace"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Skupinová konverzace"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 3bb64cdc81f4..0c308e28a1b1 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Opdateret af din administrator"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Slettet af din administrator"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Batterisparefunktionen gør følgende for at spare på batteriet:\n\n•Aktiverer Mørkt tema\n•Deaktiverer eller begrænser aktivitet i baggrunden, visse visuelle effekter og andre funktioner som f.eks. \"Hey Google\"\n\n"<annotation id="url">"Få flere oplysninger"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Batterisparefunktionen gør følgende for at spare på batteriet:\n\n•Aktiverer Mørkt tema\n•Deaktiverer eller begrænser aktivitet i baggrunden, visse visuelle effekter og andre funktioner som f.eks. \"Hey Google\""</string>      <string name="data_saver_description" msgid="4995164271550590517">"Datasparefunktionen forhindrer nogle apps i at sende eller modtage data i baggrunden for at reducere dataforbruget. En app, der er i brug, kan få adgang til data, men gør det måske ikke så ofte. Dette kan f.eks. betyde, at billeder ikke vises, før du trykker på dem."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Vil du aktivere Datasparefunktion?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivér"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dialogboks om strøm"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Låseskærm"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Screenshot"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Genvej til hjælpefunktioner på skærmen"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Valg af genvej til hjælpefunktioner på skærmen"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Titellinje for <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> er blevet placeret i samlingen BEGRÆNSET"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sendte et billede"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Samtale"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Gruppesamtale"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 2b4d6a7f88eb..cf6c4138b306 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Ενημερώθηκε από τον διαχειριστή σας"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Διαγράφηκε από τον διαχειριστή σας"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Για την επέκταση της διάρκειας ζωής της μπαταρίας σας, η Εξοικονόμηση μπαταρίας:\n\n•Ενεργοποιεί το Σκούρο θέμα\n•Απενεργοποιεί ή περιορίζει τη δραστηριότητα παρασκηνίου, ορισμένα οπτικά εφέ και άλλες λειτουργίες όπως την εντολή Hey Google\n\n"<annotation id="url">"Μάθετε περισσότερα"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Για την επέκταση της διάρκειας ζωής της μπαταρίας, η Εξοικονόμηση μπαταρίας:\n\n•Ενεργοποιεί το Σκούρο θέμα\n•Απενεργοποιεί ή περιορίζει τη δραστηριότητα παρασκηνίου, ορισμένα οπτικά εφέ και άλλες λειτουργίες όπως την εντολή Hey Google."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Προκειμένου να μειωθεί η χρήση δεδομένων, η Εξοικονόμηση δεδομένων αποτρέπει την αποστολή ή λήψη δεδομένων από ορισμένες εφαρμογές στο παρασκήνιο. Μια εφαρμογή που χρησιμοποιείτε αυτήν τη στιγμή μπορεί να χρησιμοποιήσει δεδομένα αλλά με μικρότερη συχνότητα. Για παράδειγμα, οι εικόνες μπορεί να μην εμφανίζονται μέχρι να τις πατήσετε."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Ενεργ.Εξοικονόμησης δεδομένων;"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Ενεργοποίηση"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Παράθυρο διαλόγου λειτουργίας συσκευής"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Οθόνη κλειδώματος"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Στιγμιότυπο οθόνης"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Συντόμευση οθόνης για την προσβασιμότητα"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Επιλογέας συντόμευσης οθόνης για την προσβασιμότητα"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Γραμμή υποτίτλων για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Το πακέτο <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> τοποθετήθηκε στον κάδο ΠΕΡΙΟΡΙΣΜΕΝΗΣ ΠΡΟΣΒΑΣΗΣ."</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"έστειλε μια εικόνα"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Συνομιλία"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Ομαδική συνομιλία"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index b20891d3ab74..a6cec0d58ecf 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"To extend battery life, Battery Saver:\n\n•Turns on Dark theme\n•Turns off or restricts background activity, some visual effects and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"To extend battery life, Battery Saver:\n\n•Turns on Dark theme\n•Turns off or restricts background activity, some visual effects and other features like “Hey Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app that you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Power Dialogue"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Lock Screen"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Screenshot"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"On-screen accessibility shortcut"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"On-screen accessibility shortcut chooser"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Caption bar of <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sent an image"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversation"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Group conversation"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index 91b0cab36894..188d9a787bd9 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"To extend battery life, Battery Saver:\n\n•Turns on Dark theme\n•Turns off or restricts background activity, some visual effects and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"To extend battery life, Battery Saver:\n\n•Turns on Dark theme\n•Turns off or restricts background activity, some visual effects and other features like “Hey Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app that you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Power Dialogue"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Lock Screen"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Screenshot"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"On-screen accessibility shortcut"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"On-screen accessibility shortcut chooser"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Caption bar of <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sent an image"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversation"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Group conversation"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index b20891d3ab74..a6cec0d58ecf 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"To extend battery life, Battery Saver:\n\n•Turns on Dark theme\n•Turns off or restricts background activity, some visual effects and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"To extend battery life, Battery Saver:\n\n•Turns on Dark theme\n•Turns off or restricts background activity, some visual effects and other features like “Hey Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app that you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Power Dialogue"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Lock Screen"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Screenshot"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"On-screen accessibility shortcut"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"On-screen accessibility shortcut chooser"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Caption bar of <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sent an image"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversation"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Group conversation"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index b20891d3ab74..a6cec0d58ecf 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"To extend battery life, Battery Saver:\n\n•Turns on Dark theme\n•Turns off or restricts background activity, some visual effects and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"To extend battery life, Battery Saver:\n\n•Turns on Dark theme\n•Turns off or restricts background activity, some visual effects and other features like “Hey Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app that you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Power Dialogue"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Lock Screen"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Screenshot"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"On-screen accessibility shortcut"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"On-screen accessibility shortcut chooser"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Caption bar of <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sent an image"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversation"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Group conversation"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 5afebbd48921..2daab157b0b7 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Tu administrador actualizó este paquete"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Tu administrador borró este paquete"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Aceptar"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Para extender la duración de la batería, el Ahorro de batería hace lo siguiente:\n\n•Activa el Tema oscuro.\n•Desactiva o restringe la actividad en segundo plano, algunos efectos visuales y otras funciones, como \"Hey Google\".\n\n"<annotation id="url">"Más información"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Para extender la duración de batería, el Ahorro de batería hace lo siguiente:\n\n•Activa el Tema oscuro.\n•Desactiva o restringe la actividad en segundo plano, algunos efectos visuales y otras funciones, como \"Hey Google\"."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Para reducir el uso de datos, el modo Ahorro de datos evita que algunas apps envíen y reciban datos en segundo plano. La app que estés usando podrá acceder a los datos, pero con menor frecuencia. De esta forma, por ejemplo, las imágenes no se mostrarán hasta que las presiones."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"¿Deseas activar Ahorro de datos?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Activar"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Diálogo de encendido"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Bloquear pantalla"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Captura de pantalla"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Acceso directo de accesibilidad en pantalla"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Selector del acceso directo de accesibilidad en pantalla"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Barra de subtítulos de <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Se colocó <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> en el depósito RESTRICTED"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"envió una imagen"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversación"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Conversación en grupo"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"+<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 1288a1315ae0..84c91aa91cd8 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Actualizado por el administrador"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminado por el administrador"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Aceptar"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Para que la batería dure más, Ahorro de batería:\n\n• Activa el tema oscuro\n•Desactiva o restringe actividad en segundo plano, algunos efectos visuales y otras funciones como \"Ok Google\"\n\n"<annotation id="url">"Más información"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Para que la batería dure más, Ahorro de batería:\n\n• Activa el tema oscuro\n•Desactiva o restringe actividad en segundo plano, algunos efectos visuales y otras funciones como \"Ok Google\""</string>      <string name="data_saver_description" msgid="4995164271550590517">"El modo Ahorro de datos evita que algunas aplicaciones envíen o reciban datos en segundo plano, lo que puede reducir el uso de datos. Una aplicación activa puede acceder a los datos, aunque con menos frecuencia. Esto significa que es posible que, por ejemplo, algunas imágenes no se muestren hasta que las toques."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"¿Activar Ahorro de datos?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Activar"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Abrir cuadro de diálogo"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Pantalla de bloqueo"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Captura de pantalla"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Acceso directo de accesibilidad en pantalla"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Opción de acceso directo de accesibilidad en pantalla"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Barra de subtítulos de <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> se ha incluido en el grupo de restringidos"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ha enviado una imagen"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversación"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Conversación de grupo"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"+ <xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 196d834bb250..fce1700bea15 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Administraator on seda värskendanud"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Administraator on selle kustutanud"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Aku tööea pikendamiseks teeb akusäästja järgmist.\n\n• Lülitab sisse tumeda teema.\n• Lülitab välja taustategevused, mõned visuaalsed efektid ja muud funktsioonid (nt „Ok Google”) või piirab neid.\n\n"<annotation id="url">"Lisateave"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Aku tööea pikendamiseks teeb akusäästja järgmist.\n\n• Lülitab sisse tumeda teema.\n• Lülitab välja taustategevused, mõned visuaalsed efektid ja muud funktsioonid (nt „Ok Google”) või piirab neid."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Andmekasutuse vähendamiseks keelab andmemahu säästja mõne rakenduse puhul andmete taustal saatmise ja vastuvõtmise. Rakendus, mida praegu kasutate, pääseb andmesidele juurde, kuid võib seda teha väiksema sagedusega. Seetõttu võidakse näiteks pildid kuvada alles siis, kui neid puudutate."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Lülitada andmemahu säästja sisse?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Lülita sisse"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Energiasäästja dialoog"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Lukustuskuva"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Ekraanipilt"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Ekraanil kuvatav juurdepääsetavuse otsetee"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Ekraanil kuvatav juurdepääsetavuse otsetee valija"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> pealkirjariba."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> on lisatud salve PIIRANGUTEGA"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"saatis kujutise"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Vestlus"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Grupivestlus"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index b8810c509322..eaf579eef469 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -200,12 +200,9 @@      <string name="factory_reset_warning" msgid="6858705527798047809">"Gailuko datuak ezabatu egingo dira"</string>      <string name="factory_reset_message" msgid="2657049595153992213">"Ezin da erabili administratzeko aplikazioa. Ezabatu egingo da gailuko eduki guztia.\n\nZalantzarik baduzu, jarri erakundeko administratzailearekin harremanetan."</string>      <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> aplikazioak desgaitu egin du inprimatzeko aukera."</string> -    <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> -    <skip /> +    <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Aktibatu laneko profila"</string> +    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Aplikazio pertsonalak blokeatuta egongo dira laneko profila aktibatzen duzun arte"</string> +    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Aplikazio pertsonalak bihar blokeatuko dira"</string>      <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Aktibatu laneko profila"</string>      <string name="me" msgid="6207584824693813140">"Ni"</string>      <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tabletaren aukerak"</string> @@ -1797,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Administratzaileak eguneratu du"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Administratzaileak ezabatu du"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Ados"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Bateriaren iraupena luzatzeko, erabili bateria-aurrezlea:\n\n•Gai iluna aktibatzen du.\n•Desaktibatu edo murriztu egiten ditu atzeko planoko jarduerak, zenbait efektu bisual eta beste eginbide batzuk, hala nola \"Ok Google\".\n\n"<annotation id="url">"Lortu informazio gehiago"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Bateriaren iraupena luzatzeko, erabili bateria-aurrezlea:\n\n•Gai iluna aktibatzen du.\n•Desaktibatu edo murriztu egiten ditu atzeko planoko jarduerak, zenbait efektu bisual eta beste eginbide batzuk, hala nola \"Ok Google\"."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Datuen erabilera murrizteko, atzeko planoan datuak bidaltzea eta jasotzea galarazten die datu-aurrezleak aplikazio batzuei. Une honetan erabiltzen ari zaren aplikazioak atzitu egin ahal izango ditu datuak, baina baliteke maiztasun txikiagoarekin atzitzea. Horrela, adibidez, baliteke irudiak ez erakustea haiek sakatu arte."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Datu-aurrezlea aktibatu nahi duzu?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktibatu"</string> @@ -2047,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Piztu edo itzaltzeko leihoa"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Pantaila blokeatua"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Pantaila-argazkia"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Pantailako erabilerraztasun-lasterbidea"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Pantailako erabilerraztasun-lasterbideen hautatzailea"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioko azpitituluen barra."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Murriztuen edukiontzian ezarri da <xliff:g id="PACKAGE_NAME">%1$s</xliff:g>"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"erabiltzaileak irudi bat bidali du"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Elkarrizketa"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Taldeko elkarrizketa"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 28254d91caa7..7d3c7d38c007 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -201,8 +201,8 @@      <string name="factory_reset_message" msgid="2657049595153992213">"برنامه سرپرست سیستم را نمیتوان استفاده کرد. دستگاه شما در این لحظه پاک میشود.\n\nاگر سؤالی دارید، با سرپرست سیستم سازمانتان تماس بگیرید."</string>      <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> چاپ کردن را غیرفعال کرده است."</string>      <string name="personal_apps_suspension_title" msgid="7561416677884286600">"نمایه کاریتان را روشن کنید"</string> -    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"تا زمانیکه نمایه کاریتان را روشن نکنید، برنامههای شخصیتان مسدود هستند"</string> -    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"برنامههای شخصیتان فردا مسدود میشوند"</string> +    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"تا زمانیکه نمایه کاریتان را روشن نکنید، برنامههای شخصیتان مسدودند"</string> +    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"برنامههای شخصیتان فردا مسدود خواهند شد"</string>      <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"روشن کردن نمایه کاری"</string>      <string name="me" msgid="6207584824693813140">"من"</string>      <string name="power_dialog" product="tablet" msgid="8333207765671417261">"گزینههای رایانهٔ لوحی"</string> @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"توسط سرپرست سیستم بهروزرسانی شد"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"توسط سرپرست سیستم حذف شد"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"تأیید"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"برای افزایش عمر باتری، «بهینهسازی باتری»:\n\n•«طرح زمینه تیره» را روشن میکند\n•فعالیت پسزمینه، برخی جلوههای بصری، و دیگر ویژگیها مانند «Ok Google» را خاموش یا محدود میکند\n\n"<annotation id="url">"بیشتر بدانید"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"برای افزایش عمر باتری، «بهینهسازی باتری»:\n\n•«طرح زمینه تیره» را روشن میکند\n•فعالیت پسزمینه، برخی جلوههای بصری، و دیگر ویژگیها مانند «Ok Google» را خاموش یا محدود میکند"</string>      <string name="data_saver_description" msgid="4995164271550590517">"«صرفهجویی داده»، برای کمک به کاهش مصرف داده، از ارسال و دریافت داده در پسزمینه ازطرف بعضی برنامهها جلوگیری میکند. برنامهای که درحالحاضر استفاده میکنید میتواند به دادهها دسترسی داشته باشد اما دفعات دسترسی آن محدود است.این یعنی، برای مثال، تصاویر تازمانیکه روی آنها ضربه نزنید نشان داده نمیشوند."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"«صرفهجویی داده» روشن شود؟"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"روشن کردن"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"کادر گفتگوی روشن/خاموش"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"صفحه قفل"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"نماگرفت"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"میانبر دسترسپذیری روی صفحه"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"انتخابگر میانبر دسترسپذیری روی صفحه"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"نوار شرح <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> در سطل «محدودشده» قرار گرفت"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"تصویری ارسال کرد"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"مکالمه"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"مکالمه گروهی"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"+<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index e7f3a9bb09f8..4d5b6c335f67 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Järjestelmänvalvoja päivitti tämän."</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Järjestelmänvalvoja poisti tämän."</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Parantaakseen akunkestoa Virransäästö\n\n•·laittaa tumman teeman päälle\n•·laittaa pois päältä tai rajoittaa taustatoimintoja, joitakin visuaalisia tehosteita ja muita ominaisuuksia (esim. Hei Google).\n\n"<annotation id="url">"Lue lisää"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Parantaakseen akunkestoa Virransäästö\n\n•·laittaa tumman teeman päälle\n•·laittaa pois päältä tai rajoittaa taustatoimintoja, joitakin visuaalisia tehosteita ja muita ominaisuuksia (esim. Hei Google)."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Data Saver estää joitakin sovelluksia lähettämästä tai vastaanottamasta tietoja taustalla, jotta datan käyttöä voidaan vähentää. Käytössäsi oleva sovellus voi yhä käyttää dataa, mutta se saattaa tehdä niin tavallista harvemmin. Tämä voi tarkoittaa esimerkiksi sitä, että kuva ladataan vasta, kun kosketat sitä."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Otetaanko Data Saver käyttöön?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Ota käyttöön"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Virran valintaikkuna"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Lukitusnäyttö"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Kuvakaappaus"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Näytöllä näkyvä esteettömyyspainike"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Näytöllä näkyvän esteettömyyspainikkeen valitsin"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Tekstityspalkki: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> on nyt rajoitettujen ryhmässä"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"lähetti kuvan"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Keskustelu"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Ryhmäkeskustelu"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 75fc6671fdfb..ab869f41f97a 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -219,9 +219,9 @@      <string name="reboot_to_update_title" msgid="2125818841916373708">"Mise à jour du système Android"</string>      <string name="reboot_to_update_prepare" msgid="6978842143587422365">"Préparation de la mise à jour en cours…"</string>      <string name="reboot_to_update_package" msgid="4644104795527534811">"Traitement du package de mise à jour…"</string> -    <string name="reboot_to_update_reboot" msgid="4474726009984452312">"Redémarrage en cours…"</string> +    <string name="reboot_to_update_reboot" msgid="4474726009984452312">"Redémarrage…"</string>      <string name="reboot_to_reset_title" msgid="2226229680017882787">"Rétablir la configuration d\'usine"</string> -    <string name="reboot_to_reset_message" msgid="3347690497972074356">"Redémarrage en cours…"</string> +    <string name="reboot_to_reset_message" msgid="3347690497972074356">"Redémarrage…"</string>      <string name="shutdown_progress" msgid="5017145516412657345">"Arrêt en cours..."</string>      <string name="shutdown_confirm" product="tablet" msgid="2872769463279602432">"Votre tablette va s\'éteindre."</string>      <string name="shutdown_confirm" product="tv" msgid="7975942887313518330">"Votre appareil Android TV va s\'éteindre."</string> @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Mis à jour par votre administrateur"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Supprimé par votre administrateur"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Pour prolonger l\'autonomie de la batterie, l\'économiseur de batterie :\n\n· active le thème sombre ;\n· désactive ou restreint les activités en arrière-plan, certains effets visuels et d\'autres fonctionnalités, comme \"Ok Google\".\n\n"<annotation id="url">"En savoir plus"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Pour prolonger l\'autonomie de la batterie, l\'économiseur de batterie :\n\n· active le thème sombre ;·\n désactive ou restreint les activités en arrière-plan, certains effets visuels et d\'autres fonctionnalités, comme \"Ok Google\"."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Pour réduire la consommation de données, l\'économiseur de données empêche certaines applications d\'envoyer ou de recevoir des données en arrière-plan. Ainsi, les applications que vous utilisez peuvent toujours accéder aux données, mais pas en permanence. Par exemple, il se peut que les images ne s\'affichent pas tant que vous n\'appuyez pas dessus."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Activer l\'économiseur de données ?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Activer"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Boîte de dialogue Marche/Arrêt"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Verrouiller l\'écran"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Capture d\'écran"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Raccourci d\'accessibilité à l\'écran"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Outil de sélection des raccourcis d\'accessibilité à l\'écran"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Barre de légende de l\'application <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> a été placé dans le bucket RESTRICTED"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g> :"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"a envoyé une image"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversation"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Conversation de groupe"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g> ou +"</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index a475b41b5819..e10afae8b27d 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -200,12 +200,9 @@      <string name="factory_reset_warning" msgid="6858705527798047809">"Borrarase o teu dispositivo"</string>      <string name="factory_reset_message" msgid="2657049595153992213">"Non se pode utilizar a aplicación de administración. Borrarase o teu dispositivo.\n\nSe tes preguntas, contacta co administrador da organización."</string>      <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> desactivou a impresión."</string> -    <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> -    <skip /> +    <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Activa o perfil de traballo"</string> +    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"As túas aplicacións persoais están bloqueadas ata que actives o teu perfil de traballo"</string> +    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"As túas aplicacións persoais bloquearanse mañá"</string>      <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Activar perfil de traballo"</string>      <string name="me" msgid="6207584824693813140">"Eu"</string>      <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opcións da tableta"</string> @@ -1797,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Actualizado polo teu administrador"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminado polo teu administrador"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Aceptar"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Para aumentar a duración da batería, a función Aforro de batería fai o seguinte:\n\n•Activa o tema escuro\n•Desactiva ou restrinxe a actividade en segundo plano, algúns efectos visuais e outras funcións, como \"Ok Google\"\n\n"<annotation id="url">"Máis información"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Para aumentar a duración da batería, a función Aforro de batería fai o seguinte:\n\n•Activa o tema escuro\n•Desactiva ou restrinxe a actividade en segundo plano, algúns efectos visuais e outras funcións, como \"Ok Google\""</string>      <string name="data_saver_description" msgid="4995164271550590517">"Para contribuír a reducir o uso de datos, o aforro de datos impide que algunhas aplicacións envíen ou reciban datos en segundo plano. Cando esteas utilizando unha aplicación, esta poderá acceder aos datos, pero é posible que o faga con menos frecuencia. Por exemplo, é posible que as imaxes non se mostren ata que as toques."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Queres activar o aforro de datos?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Activar"</string> @@ -2047,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Cadro de diálogo de acendido/apagado"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Pantalla de bloqueo"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Captura de pantalla"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Atallo de accesibilidade en pantalla"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Selector de atallos de accesibilidade en pantalla"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Barra de subtítulos de <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> incluíuse no grupo RESTRINXIDO"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"enviouse unha imaxe"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversa"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Conversa de grupo"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"><xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 6116c5a1f81e..4cd6a5b112fe 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"आपके व्यवस्थापक ने अपडेट किया है"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"आपके व्यवस्थापक ने हटा दिया है"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"ठीक है"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"बैटरी लाइफ़ बढ़ाने के लिए, बैटरी सेवर:\n\n•गहरे रंग वाली थीम चालू करता है\n•बैकग्राउंड की गतिविधि, कुछ विज़ुअल इफ़ेक्ट, और \"Hey Google\" जैसी दूसरी सुविधाएं इस्तेमाल करने से रोकता है या उन्हें बंद कर देता है\n\n"<annotation id="url">"ज़्यादा जानें"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"बैटरी लाइफ़ बढ़ाने के लिए, बैटरी सेवर:\n\n•गहरे रंग वाली थीम चालू करता है\n•बैकग्राउंड की गतिविधि, कुछ विज़ुअल इफ़ेक्ट, और \"Hey Google\" जैसी दूसरी सुविधाएं इस्तेमाल करने से रोकता है या उन्हें बंद कर देता है"</string>      <string name="data_saver_description" msgid="4995164271550590517">"डेटा खर्च को कम करने के लिए, डेटा सेवर कुछ ऐप्लिकेशन को बैकग्राउंड में डेटा भेजने या डेटा पाने से रोकता है. फ़िलहाल, आप जिस ऐप्लिकेशन का इस्तेमाल कर रहे हैं वह डेटा ऐक्सेस कर सकता है, लेकिन ऐसा कभी-कभी ही हो पाएगा. उदाहरण के लिए, इमेज तब तक दिखाई नहीं देंगी जब तक कि आप उन पर टैप नहीं करते."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"डेटा बचाने की सेटिंग चालू करें?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"चालू करें"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"पावर डायलॉग खोलें"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"स्क्रीन लॉक करें"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"स्क्रीनशॉट लें"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"स्क्रीन पर दिखने वाला सुलभता का शॉर्टकट"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"स्क्रीन पर दिखने वाले सुलभता के शॉर्टकट को चुनने की सुविधा"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g> का कैप्शन बार."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> को प्रतिबंधित बकेट में रखा गया है"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"एक इमेज भेजी गई"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"बातचीत"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"ग्रुप में बातचीत"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 811df8fbafdc..6d0531ec5b0b 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -1817,10 +1817,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Ažurirao administrator"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisao administrator"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"U redu"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Da bi se produljilo trajanje baterije, Štednja baterije:\n\n• Uključuje Tamnu temu.\n• Isključuje ili ograničava aktivnosti u pozadini, neke vizualne efekte i druge značajke kao što je \"Hey Google\".\n\n"<annotation id="url">"Saznajte više"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Da bi se produljilo trajanje baterije, Štednja baterije:\n\n• Uključuje Tamnu temu.\n• Isključuje ili ograničava aktivnosti u pozadini, neke vizualne efekte i druge značajke kao što je \"Hey Google\"."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Da bi se smanjio podatkovni promet, značajka Štednja podatkovnog prometa onemogućuje nekim aplikacijama slanje ili primanje podataka u pozadini. Aplikacija koju trenutačno upotrebljavate može pristupiti podacima, no možda će to činiti rjeđe. To može značiti da se, na primjer, slike neće prikazivati dok ih ne dodirnete."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Uključiti Štednju podatkovnog prometa?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Uključi"</string> @@ -2078,15 +2076,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dijalog napajanja"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Zaključajte zaslon"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Snimka zaslona"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Prečac pristupačnosti na zaslonu"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Alat za odabir prečaca pristupačnosti na zaslonu"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Traka naslova aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> premješten je u spremnik OGRANIČENO"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"šalje sliku"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Razgovor"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Grupni razgovor"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 26f7584311a9..e14c848cf6f7 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"A rendszergazda által frissítve"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"A rendszergazda által törölve"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Az Akkumulátorkímélő mód az akkumulátor üzemidejének növelése érdekében a következőket teszi:\n\n• Bekapcsolja a sötét témát.\n• Kikapcsolja vagy korlátozza a háttérben futó tevékenységeket, egyes vizuális effekteket, az „Ok Google” parancsot és egyéb funkciókat.\n\n"<annotation id="url">"További információ"</annotation>"."</string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Az Akkumulátorkímélő mód az akkumulátor üzemidejének növelése érdekében a következőket teszi:\n\n• Bekapcsolja a sötét témát.\n• Kikapcsolja vagy korlátozza a háttérben futó tevékenységeket, egyes vizuális effekteket, az „Ok Google” parancsot és egyéb funkciókat."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Az adatforgalom csökkentése érdekében az Adatforgalom-csökkentő megakadályozza, hogy egyes alkalmazások adatokat küldjenek vagy fogadjanak a háttérben. Az Ön által jelenleg használt alkalmazások hozzáférhetnek az adatokhoz, de csak ritkábban. Ez például azt jelentheti, hogy a képek csak rákoppintás után jelennek meg."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Bekapcsolja az Adatforgalom-csökkentőt?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Bekapcsolás"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Akkumulátorral kapcsolatos párbeszédpanel"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Lezárási képernyő"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Képernyőkép"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Képernyőn megjelenő kisegítő lehetőségekre vonatkozó parancs"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Képernyőn megjelenő kisegítő lehetőségekre vonatkozó parancsválasztó"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás címsora."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"A következő csomag a KORLÁTOZOTT csoportba került: <xliff:g id="PACKAGE_NAME">%1$s</xliff:g>"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"képet küldött"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Beszélgetés"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Csoportos beszélgetés"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index d7d00f200a6d..1348f48d127c 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -200,12 +200,9 @@      <string name="factory_reset_warning" msgid="6858705527798047809">"Ձեր սարքը ջնջվելու է"</string>      <string name="factory_reset_message" msgid="2657049595153992213">"Հնարավոր չէ օգտագործել ադմինիստրատորի հավելվածը։ Ձեր սարքից բոլոր տվյալները կջնջվեն։\n\nՀարցեր ունենալու դեպքում դիմեք ձեր կազմակերպության ադմինիստրատորին։"</string>      <string name="printing_disabled_by" msgid="3517499806528864633">"Տպումն անջատված է <xliff:g id="OWNER_APP">%s</xliff:g> հավելվածի կողմից։"</string> -    <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> -    <skip /> +    <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Միացրեք աշխատանքային պորֆիլը"</string> +    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Անձնական հավելվածներն արգելափակված կլինեն, մինչև չմիացնեք ձեր աշխատանքային պրոֆիլը"</string> +    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Ձեր անձնական հավելվածները վաղը կարգելափակվեն"</string>      <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Միացնել աշխատանքային պրոֆիլը"</string>      <string name="me" msgid="6207584824693813140">"Իմ"</string>      <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Պլանշետի ընտրանքները"</string> @@ -1797,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Թարմացվել է ձեր ադմինիստրատորի կողմից"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Ջնջվել է ձեր ադմինիստրատորի կողմից"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Եղավ"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Մարտկոցի աշխատաժամանակը երկարացնելու համար «Մարտկոցի տնտեսում» գործառույթը.\n\n•Միացնում է մուգ թեման։\n•Անջատում կամ սահմանափակում է աշխատանքը ֆոնային ռեժիմում, որոշ վիզուալ էֆեկտներ և այլ գործառույթներ, օրինակ՝ «OK Google» հրահանգը։\n\n"<annotation id="url">"Իմանալ ավելին"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Մարտկոցի աշխատաժամանակը երկարացնելու համար «Մարտկոցի տնտեսում» գործառույթը.\n\n•Միացնում է մուգ թեման։\n•Անջատում կամ սահմանափակում է աշխատանքը ֆոնային ռեժիմում, որոշ վիզուալ էֆեկտներ և այլ գործառույթներ, օրինակ՝ «OK Google» հրահանգը:"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Թրաֆիկի տնտեսման ռեժիմում որոշ հավելվածների համար տվյալների ֆոնային փոխանցումն անջատված է։ Հավելվածը, որն օգտագործում եք, կարող է տվյալներ փոխանցել և ստանալ, սակայն ոչ այնքան հաճախ: Օրինակ՝ պատկերները կցուցադրվեն միայն դրանց վրա սեղմելուց հետո։"</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Միացնե՞լ թրաֆիկի խնայումը:"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Միացնել"</string> @@ -2047,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Սնուցման պատուհան"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Կողպէկրան"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Սքրինշոթ"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Հատուկ գործառույթների ընտրիչ"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Հատուկ գործառույթների դյուրանցման ընտրիչ"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի ենթագրերի գոտին։"</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> փաթեթը գցվեց ՍԱՀՄԱՆԱՓԱԿՎԱԾ զամբյուղի մեջ"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>՝"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"օգտատերը պատկեր է ուղարկել"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Նամակագրություն"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Խմբային նամակագրություն"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 458df3b3ee92..553281b58080 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Diupdate oleh admin Anda"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Dihapus oleh admin Anda"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Oke"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Untuk memperpanjang masa pakai baterai, Penghemat Baterai:\n\n•Mengaktifkan Tema gelap\n•Menonaktifkan atau membatasi aktivitas di latar belakang, beberapa efek visual, dan fitur lain seperti “Ok Google”\n\n"<annotation id="url">"Pelajari lebih lanjut"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Untuk memperpanjang masa pakai baterai, Penghemat Baterai:\n\n•Mengaktifkan Tema gelap\n•Menonaktifkan atau membatasi aktivitas di latar belakang, beberapa efek visual, dan fitur lain seperti “Ok Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Untuk membantu mengurangi penggunaan data, Penghemat Data mencegah beberapa aplikasi mengirim atau menerima data di latar belakang. Aplikasi yang sedang digunakan dapat mengakses data, tetapi frekuensinya agak lebih jarang. Misalnya saja, gambar hanya akan ditampilkan setelah diketuk."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Aktifkan Penghemat Data?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktifkan"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dialog Daya"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Layar Kunci"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Screenshot"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Pintasan Aksesibilitas di layar"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Pemilih Pintasan Aksesibilitas di layar"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Kolom teks <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> telah dimasukkan ke dalam bucket DIBATASI"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"mengirim gambar"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Percakapan"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Percakapan Grup"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index fa03fbab425a..fae36eec1e32 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Kerfisstjóri uppfærði"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Kerfisstjóri eyddi"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Í lagi"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Til að auka rafhlöðuendingu gerir rafhlöðusparnaður eftirfarandi:\n\n•Kveikir á dökku þema\n•Slekkur á eða takmarkar bakgrunnsvirkni, tilteknar myndbrellur og aðra eiginleika eins og „Ok Google“\n\n"<annotation id="url">"Frekari upplýsingar"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Til að auka rafhlöðuendingu gerir rafhlöðusparnaður eftirfarandi:\n\n•Kveikir á dökku þema\n•Slekkur á eða takmarkar bakgrunnsvirkni, tilteknar myndbrellur og aðra eiginleika eins og „Ok Google“"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Gagnasparnaður getur hjálpað til við að draga úr gagnanotkun með því að hindra forrit í að senda eða sækja gögn í bakgrunni. Forrit sem er í notkun getur náð í gögn, en gerir það kannski sjaldnar. Niðurstaðan getur verið, svo dæmi sé tekið, að myndir eru ekki birtar fyrr en þú ýtir á þær."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Kveikja á gagnasparnaði?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Kveikja"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Gluggi til að slökkva/endurræsa"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Lásskjár"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Skjámynd"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Flýtileið í aðgengiseiginleika á skjá"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Val um flýtileið í aðgengiseiginleika á skjánum"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Skjátextastika <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> var sett í flokkinn TAKMARKAÐ"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sendi mynd"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Samtal"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Hópsamtal"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 1ed81f1054a9..f754320ced90 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Aggiornato dall\'amministratore"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminato dall\'amministratore"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Per estendere la durata della batteria, la funzionalità di risparmio energetico:\n\n•Attiva il Tema scuro\n•Disattiva o limita le attività in background, alcuni effetti visivi e altre funzionalità come \"Ok Google\"\n\n"<annotation id="url">"Ulteriori informazioni"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Per estendere la durata della batteria, la funzionalità di risparmio energetico:\n\n•Attiva il Tema scuro\n•Disattiva o limita le attività in background, alcuni effetti visivi e altre funzionalità come \"Ok Google\""</string>      <string name="data_saver_description" msgid="4995164271550590517">"Per contribuire a ridurre l\'utilizzo dei dati, la funzione Risparmio dati impedisce ad alcune app di inviare o ricevere dati in background. Un\'app in uso può accedere ai dati, ma potrebbe farlo con meno frequenza. Esempio: le immagini non vengono visualizzate finché non le tocchi."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Attivare Risparmio dati?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Attiva"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Finestra di dialogo Alimentazione"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Schermata di blocco"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Screenshot"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Scorciatoia Accessibilità sullo schermo"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Selettore scorciatoia Accessibilità sullo schermo"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Barra del titolo di <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> è stato inserito nel bucket RESTRICTED"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ha inviato un\'immagine"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversazione"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Conversazione di gruppo"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index a6d538aefa96..b5b527ec8905 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -204,12 +204,9 @@      <string name="factory_reset_warning" msgid="6858705527798047809">"תתבצע מחיקה של המכשיר"</string>      <string name="factory_reset_message" msgid="2657049595153992213">"לא ניתן להשתמש באפליקציה של מנהל המערכת.\n\nאם יש לך שאלות, יש ליצור קשר עם מנהל המערכת של הארגון."</string>      <string name="printing_disabled_by" msgid="3517499806528864633">"ההדפסה הושבתה על ידי <xliff:g id="OWNER_APP">%s</xliff:g>."</string> -    <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> -    <skip /> +    <string name="personal_apps_suspension_title" msgid="7561416677884286600">"הפעלה של פרופיל העבודה שלך"</string> +    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"האפליקציות שלך לשימוש אישי יהיו חסומות עד להפעלת פרופיל העבודה"</string> +    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"האפליקציות שלך לשימוש אישי ייחסמו מחר"</string>      <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"הפעלה של פרופיל העבודה"</string>      <string name="me" msgid="6207584824693813140">"אני"</string>      <string name="power_dialog" product="tablet" msgid="8333207765671417261">"אפשרויות טאבלט"</string> @@ -1678,10 +1675,8 @@      <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"ניתן ללחוץ על שני מקשי עוצמת הקול למשך מספר שניות כדי להפעיל את <xliff:g id="SERVICE">%1$s</xliff:g>, תכונת נגישות. בעקבות זאת, ייתכן שאופן הפעולה של המכשיר ישתנה.\n\nאפשר לשנות את מקשי הקיצור האלה לתכונה נוספת ב\'הגדרות\' > \'נגישות\'."</string>      <string name="accessibility_shortcut_on" msgid="5463618449556111344">"אני רוצה להפעיל"</string>      <string name="accessibility_shortcut_off" msgid="3651336255403648739">"לא להפעיל"</string> -    <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> -    <skip /> -    <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> -    <skip /> +    <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"מופעל"</string> +    <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"כבוי"</string>      <string name="accessibility_enable_service_title" msgid="3931558336268541484">"ברצונך להעניק לשירות <xliff:g id="SERVICE">%1$s</xliff:g> שליטה מלאה במכשיר?"</string>      <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"אם השירות <xliff:g id="SERVICE">%1$s</xliff:g> יופעל, המכשיר לא ישתמש בנעילת המסך כדי לשפר את הצפנת הנתונים."</string>      <string name="accessibility_service_warning_description" msgid="291674995220940133">"שליטה מלאה מתאימה לאפליקציות שעוזרות עם צורכי הנגישות שלך, אבל לא לרוב האפליקציות."</string> @@ -1845,10 +1840,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"עודכנה על ידי מנהל המערכת"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"נמחקה על ידי מנהל המערכת"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"אישור"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"כדי להאריך את חיי הסוללה, התכונה \'חיסכון בסוללה\':\n\n•מפעילה עיצוב כהה\n•מכבה או מגבילה פעילות ברקע, חלק מהאפקטים החזותיים ותכונות אחרות כמו Ok Google\n\n"<annotation id="url">"מידע נוסף"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"כדי להאריך את חיי הסוללה, התכונה \'חיסכון בסוללה\':\n\n•מפעילה עיצוב כהה\n•מכבה או מגבילה פעילות ברקע, חלק מהאפקטים החזותיים ותכונות אחרות כמו Ok Google"</string>      <string name="data_saver_description" msgid="4995164271550590517">"כדי לסייע בהפחתת השימוש בנתונים, חוסך הנתונים (Data Saver) מונע מאפליקציות מסוימות שליחה או קבלה של נתונים ברקע. אפליקציה שבה נעשה שימוש כרגע יכולה לגשת לנתונים, אבל בתדירות נמוכה יותר. המשמעות היא, למשל, שתמונות יוצגו רק לאחר שמקישים עליהן."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"להפעיל את חוסך הנתונים?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"הפעל"</string> @@ -2117,15 +2110,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"תיבת דו-שיח לגבי הסוללה"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"מסך הנעילה"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"צילום מסך"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"קיצור דרך לנגישות במסך"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"בוחר קיצורי דרך לנגישות במסך"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"סרגל כיתוב של <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> התווספה לקטגוריה \'מוגבל\'"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"נשלחה תמונה"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"שיחה"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"שיחה קבוצתית"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 4695d24dcd72..277207eda9d3 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"管理者により更新されています"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"管理者により削除されています"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"電池を長持ちさせるためにバッテリー セーバーが行う操作:\n\n•ダークテーマをオンにする\n•バックグラウンド アクティビティ、一部の視覚効果や、「OK Google」などの機能をオフにする、または制限する\n\n"<annotation id="url">"詳細"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"電池を長持ちさせるためにバッテリー セーバーが行う操作:\n\n•ダークテーマをオンにする\n•バックグラウンド アクティビティ、一部の視覚効果や、「OK Google」などの機能をオフにする、または制限する"</string>      <string name="data_saver_description" msgid="4995164271550590517">"データセーバーは、一部のアプリによるバックグラウンドでのデータ送受信を停止することでデータ使用量を抑制します。使用中のアプリからデータを送受信することはできますが、その頻度は低くなる場合があります。この影響として、たとえば画像はタップしないと表示されないようになります。"</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"データセーバーを ON にしますか?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"ON にする"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"電源ダイアログ"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"ロック画面"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"スクリーンショット"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"画面上のユーザー補助のショートカット"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"画面上のユーザー補助のショートカットの選択メニュー"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g> のキャプション バーです。"</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> は RESTRICTED バケットに移動しました。"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"画像を送信しました"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"会話"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"グループの会話"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index ee4d1169f1f3..f7aa07390ce4 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"განახლებულია თქვენი ადმინისტრატორის მიერ"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"წაიშალა თქვენი ადმინისტრატორის მიერ"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"კარგი"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"ბატარეის მუშაობის გახანგრძლივების მიზნით, ბატარეის დამზოგველი:\n\n•ჩართავს ბნელ თემას\n•გამორთავს ან ზღუდავს ფონურ აქტივობას, გარკვეულ ვიზუალურ ეფექტებს და სხვა ფუნქციებს, მაგალითად, „Hey Google“\n\n"<annotation id="url">"შეიტყვეთ მეტი"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"ბატარეის მუშაობის გახანგრძლივების მიზნით, ბატარეის დამზოგველი:\n\n•ჩართავს ბნელ თემას\n•გამორთავს ან ზღუდავს ფონურ აქტივობას, გარკვეულ ვიზუალურ ეფექტებს და სხვა ფუნქციებს, მაგალითად, „Hey Google“"</string>      <string name="data_saver_description" msgid="4995164271550590517">"მობილური ინტერნეტის მოხმარების შემცირების მიზნით, მონაცემთა დამზოგველი ზოგიერთ აპს ფონურ რეჟიმში მონაცემთა გაგზავნასა და მიღებას შეუზღუდავს. თქვენ მიერ ამჟამად გამოყენებული აპი მაინც შეძლებს მობილურ ინტერნეტზე წვდომას, თუმცა ამას ნაკლები სიხშირით განახორციელებს. ეს ნიშნავს, რომ, მაგალითად, სურათები არ გამოჩნდება მანამ, სანამ მათ საგანგებოდ არ შეეხებით."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"ჩაირთოს მონაცემთა დამზოგველი?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"ჩართვა"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"ელკვების დიალოგი"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"ჩაკეტილი ეკრანი"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"ეკრანის ანაბეჭდი"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"მარტივი წვდომის ეკრანული მალსახმობი"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"მარტივი წვდომის ეკრანული მალსახმობის ამომრჩევი"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ის სუბტიტრების ზოლი."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> მოთავსდა კალათაში „შეზღუდული“"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"გაიგზავნა სურათი"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"მიმოწერა"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"ჯგუფური მიმოწერა"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index 29cce56a7f90..ace5f4484a1f 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Әкімші жаңартқан"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Әкімші жойған"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Жарайды"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Батарея жұмысының ұзақтығын арттыру үшін Battery Saver:\n\n•қараңғы тақырыпты іске қосады;\n•фондық әрекеттерді, кейбір көрнекі әсерлерді және \"Ok Google\" сияқты басқа да функцияларды өшіреді немесе шектейді.\n\n"<annotation id="url">"Толығырақ"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Батарея жұмысының ұзақтығын арттыру үшін Battery Saver:\n\n•қараңғы тақырыпты іске қосады;\n•фондық әрекеттерді, кейбір көрнекі әсерлерді және \"Ok Google\" сияқты басқа да функцияларды өшіреді немесе шектейді."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Дерек шығынын азайту үшін Data Saver функциясы кейбір қолданбаларға деректерді фондық режимде жіберуге және алуға жол бермейді. Ашық тұрған қолданба деректерді пайдаланады, бірақ шектеулі шамада (мысалы, кескіндер оларды түрткенге дейін көрсетілмейді)."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Data Saver функциясын қосу керек пе?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Қосу"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Қуат диалогтік терезесі"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Құлып экраны"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Скриншот"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Экрандағы Accessibility таңбашасы"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Экрандағы Accessibility таңбашасын таңдау құралы"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасының жазу жолағы."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ШЕКТЕЛГЕН себетке салынды."</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"сурет жіберілді"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Чат"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Топтық чат"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index 7f482bc4b452..d3d1848c0178 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -1796,10 +1796,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"ធ្វើបច្ចុប្បន្នភាពដោយអ្នកគ្រប់គ្រងរបស់អ្នក"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"លុបដោយអ្នកគ្រប់គ្រងរបស់អ្នក"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"យល់ព្រម"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"ដើម្បីបង្កើនកម្រិតថាមពលថ្ម កម្មវិធីសន្សំថ្ម៖\n\n•បើករចនាប័ទ្មងងឹត\n•បិទ ឬដាក់កំហិតលើសកម្មភាពផ្ទៃខាងក្រោយ ឥទ្ធិពលជារូបភាពមួយចំនួន និងមុខងារផ្សេងទៀតដូចជា “Ok Google” ជាដើម\n\n"<annotation id="url">"ស្វែងយល់បន្ថែម"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"ដើម្បីបង្កើនកម្រិតថាមពលថ្ម កម្មវិធីសន្សំថ្ម៖\n\n•បើករចនាប័ទ្មងងឹត\n•បិទ ឬដាក់កំហិតលើសកម្មភាពផ្ទៃខាងក្រោយ ឥទ្ធិពលជារូបភាពមួយចំនួន និងមុខងារផ្សេងទៀតដូចជា “Ok Google” ជាដើម"</string>      <string name="data_saver_description" msgid="4995164271550590517">"ដើម្បីជួយកាត់បន្ថយការប្រើប្រាស់ទិន្នន័យ កម្មវិធីសន្សំសំចៃទិន្នន័យរារាំងកម្មវិធីមួយចំនួនមិនឲ្យបញ្ជូន ឬទទួលទិន្នន័យនៅផ្ទៃខាងក្រោយទេ។ កម្មវិធីដែលអ្នកកំពុងប្រើនាពេលបច្ចុប្បន្នអាចចូលប្រើប្រាស់ទិន្នន័យបាន ប៉ុន្តែអាចនឹងមិនញឹកញាប់ដូចមុនទេ។ ឧទាហរណ៍ រូបភាពមិនបង្ហាញទេ លុះត្រាតែអ្នកប៉ះរូបភាពទាំងនោះ។"</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"បើកកម្មវិធីសន្សំសំចៃទិន្នន័យ?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"បើក"</string> @@ -2046,15 +2044,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"ប្រអប់ថាមពល"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"អេក្រង់ចាក់សោ"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"រូបថតអេក្រង់"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"ផ្លូវកាត់ភាពងាយស្រួលនៅលើអេក្រង់"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"កម្មវិធីជ្រើសរើសផ្លូវកាត់ភាពងាយស្រួលនៅលើអេក្រង់"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"របារពណ៌នាអំពី <xliff:g id="APP_NAME">%1$s</xliff:g>។"</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ត្រូវបានដាក់ទៅក្នុងធុងដែលបានដាក់កំហិត"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>៖"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"បានផ្ញើរូបភាព"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"ការសន្ទនា"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"ការសន្ទនាជាក្រុម"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index e76ca6304e57..c22061b4b5b4 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Администраторуңуз жаңыртып койгон"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Администраторуңуз жок кылып салган"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"ЖАРАЙТ"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Батареянын мөөнөтүн узартуу үчүн, Батареяны үнөмдөгүч режими төмөнкүлөрдү аткарат:\n\n•Түнкү режимди күйгүзөт\n•Фондогу аракеттерди, айрым визуалдык эффекттерди жана \"Окей Google\" сыяктуу башка функцияларды өчүрөт же чектейт\n\n"<annotation id="url">"Кеңири маалымат"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Батареянын иштешин узартуу үчүн, Батареяны үнөмдөөчү режим:\n\n•Караңгы теманы күйгүзөт\n•Фондогу аракеттерди, айрым визуалдык эффекттерди жана \"Окей Google\" сыяктуу башка функцияларды өчүрөт же чектейт"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Трафикти үнөмдөө режиминде айрым колдонмолор дайын-даректерди фондо өткөрө алышпайт. Учурда сиз пайдаланып жаткан колдонмо дайын-даректерди жөнөтүп/ала алат, бирок адаттагыдан азыраак өткөргөндүктөн, анын айрым функциялары талаптагыдай иштебей коюшу мүмкүн. Мисалы, сүрөттөр басылмайынча жүктөлбөйт."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Трафикти үнөмдөө режимин иштетесизби?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Күйгүзүү"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Кубат диалогу"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Кулпуланган экран"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Скриншот"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Экрандагы Атайын мүмкүнчүлүктөр ыкчам баскычы"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Экрандагы Атайын мүмкүнчүлүктөр ыкчам баскычын тандаңыч"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунун маалымат тилкеси."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ЧЕКТЕЛГЕН чакага коюлган"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"сүрөт жөнөттү"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Жазышуу"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Топтук маек"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index 56483e00999e..b230b42f5c53 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -1840,10 +1840,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Atnaujino administratorius"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Ištrynė administratorius"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Gerai"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Kad akumuliatorius veiktų ilgiau, Akumuliatoriaus tausojimo priemonė:\n\n• įjungia tamsiąją temą;\n• išjungia arba apriboja veiklą fone, kai kuriuos vaizdinius efektus ir kitas funkcijas, pvz., „Ok Google“.\n\n"<annotation id="url">"Sužinokite daugiau"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Kad akumuliatorius veiktų ilgiau, Akumuliatoriaus tausojimo priemonė:\n\n• įjungia tamsiąją temą;\n• išjungia arba apriboja veiklą fone, kai kuriuos vaizdinius efektus ir kitas funkcijas, pvz., „Ok Google“."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Kad padėtų sumažinti duomenų naudojimą, Duomenų taupymo priemonė neleidžia kai kurioms programoms siųsti ar gauti duomenų fone. Šiuo metu naudojama programa gali pasiekti duomenis, bet tai bus daroma rečiau. Tai gali reikšti, kad, pvz., vaizdai nebus pateikiami, jei jų nepaliesite."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Įj. Duomenų taupymo priemonę?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Įjungti"</string> @@ -2112,15 +2110,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Maitinimo dialogo langas"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Užrakinimo ekranas"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Ekrano kopija"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Ekrano pritaikomumo šaukinys"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Ekrano pritaikomumo šaukinių parinkiklis"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Programos „<xliff:g id="APP_NAME">%1$s</xliff:g>“ antraštės juosta."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"„<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>“ įkeltas į grupę APRIBOTA"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"išsiuntė vaizdą"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Pokalbis"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Grupės pokalbis"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 70056e828ff1..43890409c37c 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -1817,10 +1817,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Atjaunināja administrators"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Dzēsa administrators"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Labi"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Lai paildzinātu akumulatora darbību, akumulatora jaudas taupīšanas režīmā tiek veiktas tālāk norādītās darbības.\n\n• Tiek ieslēgts tumšais motīvs.\n• Tiek izslēgtas vai ierobežotas darbības fonā, noteikti vizuālie efekti un citas funkcijas, piemēram, “Ok Google”.\n\n"<annotation id="url">"Uzzināt vairāk"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Lai paildzinātu akumulatora darbību, akumulatora jaudas taupīšanas režīmā tiek veiktas tālāk norādītās darbības.\n\n• Tiek ieslēgts tumšais motīvs.\n• Tiek izslēgtas vai ierobežotas darbības fonā, noteikti vizuālie efekti un citas funkcijas, piemēram, “Ok Google”."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Lai samazinātu datu lietojumu, datu lietojuma samazinātājs neļauj dažām lietotnēm fonā nosūtīt vai saņemt datus. Lietotne, kuru pašlaik izmantojat, var piekļūt datiem, bet, iespējams, piekļūs tiem retāk (piemēram, attēli tiks parādīti tikai tad, kad tiem pieskarsieties)."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Vai ieslēgt datu lietojuma samazinātāju?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Ieslēgt"</string> @@ -2078,15 +2076,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Barošanas dialoglodziņš"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Bloķēt ekrānu"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Ekrānuzņēmums"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Ekrāna pieejamības saīsne"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Ekrāna pieejamības saīsnes atlasītājs"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> subtitru josla."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Pakotne “<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>” ir ievietota ierobežotā kopā."</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"nosūtīts attēls"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Saruna"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Grupas saruna"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index 51501b45335b..f3262d66c0c6 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -200,12 +200,9 @@      <string name="factory_reset_warning" msgid="6858705527798047809">"Уредот ќе се избрише"</string>      <string name="factory_reset_message" msgid="2657049595153992213">"Апликацијата на администраторот не може да се користи. Уредот ќе се избрише сега.\n\nАко имате прашања, контактирајте со администраторот на организацијата."</string>      <string name="printing_disabled_by" msgid="3517499806528864633">"Печатењето е оневозможено од <xliff:g id="OWNER_APP">%s</xliff:g>."</string> -    <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> -    <skip /> +    <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Вклучете го работниот профил"</string> +    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Вашите лични апликации се блокирани додека да го вклучите работниот профил"</string> +    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Вашите лични апликации ќе се блокираат утре"</string>      <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Вклучи го работниот профил"</string>      <string name="me" msgid="6207584824693813140">"Јас"</string>      <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Опции на таблет"</string> @@ -1799,10 +1796,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Ажурирано од администраторот"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Избришано од администраторот"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Во ред"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"За да го продолжи траењето на батеријата, „Штедачот на батерија“:\n\n•вклучува темна тема;\n•исклучува или ограничува активност во заднина, некои визуелни ефекти и други функции како „Ok Google“.\n\n"<annotation id="url">"Дознајте повеќе"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"За да го продолжи траењето на батеријата, „Штедачот на батерија“:\n\n•вклучува темна тема;\n•исклучува или ограничува активност во заднина, некои визуелни ефекти и други функции како „Ok Google“."</string>      <string name="data_saver_description" msgid="4995164271550590517">"За да се намали користењето интернет, „Штедачот на интернет“ спречува дел од апликациите да испраќаат или да примаат податоци во заднина. Одредена апликација што ја користите ќе може да користи интернет, но можеби тоа ќе го прави поретко. Ова значи, на пример, дека сликите нема да се прикажуваат додека не ги допрете."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Да се вклучи „Штедач на интернет“?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Вклучи"</string> @@ -2049,15 +2044,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Дијалог за напојување"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Заклучен екран"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Слика од екранот"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Кратенка за пристапност на екранот"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Избирач на кратенка за пристапност на екранот"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Насловна лента на <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> е ставен во корпата ОГРАНИЧЕНИ"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"испрати слика"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Разговор"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Групен разговор"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index f7ac0696af58..c404bcde9a34 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Таны админ шинэчилсэн"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Таны админ устгасан"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Батарейн ажиллах хугацааг уртасгахын тулд Батарей хэмнэгч:\n\n•Бараан загварыг асаана\n•Арын үйл ажиллагаа, зарим визуал эффект болон “Hey Google” зэрэг бусад онцлогийг унтрааж эсвэл хязгаарлана\n\n"<annotation id="url">"Нэмэлт мэдээлэл авах"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Батарейн ажиллах хугацааг уртасгахын тулд Батарей хэмнэгч:\n\n•Бараан загварыг асаана\n•Арын үйл ажиллагаа, зарим визуал эффект болон “Hey Google” зэрэг бусад онцлогийг унтрааж эсвэл хязгаарлана"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Дата ашиглалтыг багасгахын тулд дата хэмнэгч нь ар талд ажиллаж буй зарим апп-н өгөгдлийг илгээх болон авахаас сэргийлдэг. Таны одоогийн ашиглаж буй апп нь өгөгдөлд хандах боломжтой хэдий ч тогтмол хандахгүй. Энэ нь жишээлбэл зургийг товших хүртэл харагдахгүй гэсэн үг юм."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Дата хэмнэгчийг асаах уу?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Асаах"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Тэжээлийн харилцах цонх"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Дэлгэцийг түгжих"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Дэлгэцийн зураг дарах"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Дэлгэц дээрх хандалтын товчлол"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Дэлгэц дээрх хандалтын товчлол сонгогч"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н гарчгийн талбар."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>-г ХЯЗГААРЛАСАН сагс руу орууллаа"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"зураг илгээсэн"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Харилцан яриа"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Бүлгийн харилцан яриа"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index 2364c0aaa56d..3fe29b10a407 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Dikemas kini oleh pentadbir anda"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Dipadamkan oleh pentadbir anda"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Untuk melanjutkan hayat bateri, Penjimat Bateri:\n\n•Menghidupkan Tema gelap\n•Mematikan atau mengehadkan aktiviti latar belakang, sesetengah kesan visual dan ciri lain seperti “Ok Google”\n\n"<annotation id="url">"Ketahui lebih lanjut"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Untuk melanjutkan hayat bateri, Penjimat Bateri:\n\n•Menghidupkan Tema gelap\n•Mematikan atau mengehadkan aktiviti latar belakang, sesetengah kesan visual dan ciri lain seperti “Ok Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Untuk membantu mengurangkan penggunaan data, Penjimat Data menghalang sesetengah apl daripada menghantar atau menerima data di latar. Apl yang sedang digunakan boleh mengakses data tetapi mungkin tidak secara kerap. Perkara ini mungkin bermaksud bahawa imej tidak dipaparkan sehingga anda mengetik pada imej itu, contohnya."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Hidupkan Penjimat Data?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Hidupkan"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dialog Kuasa"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Skrin Kunci"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Tangkapan skrin"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Pintasan Kebolehaksesan Pada Skrin"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Pemilih Pintasan Kebolehaksesan Pada Skrin"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Bar kapsyen <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> telah diletakkan dalam baldi TERHAD"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"menghantar imej"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Perbualan"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Perbualan Kumpulan"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index 17b7c7c5f121..c5e68970307a 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"သင်၏ စီမံခန့်ခွဲသူက အပ်ဒိတ်လုပ်ထားသည်"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"သင်၏ စီမံခန့်ခွဲသူက ဖျက်လိုက်ပါပြီ"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"ဘက်ထရီသက်တမ်း ပိုရှည်စေရန် \'ဘက်ထရီအားထိန်း\' က- \n\n•မှောင်သည့် အပြင်အဆင်ကို ဖွင့်သည်\n•နောက်ခံလုပ်ဆောင်ချက်၊ ပြသမှုဆိုင်ရာ အထူးပြုလုပ်ချက်အချို့နှင့် “Ok Google” ကဲ့သို့ အခြား ဝန်ဆောင်မှုများကို ပိတ်သည် သို့မဟုတ် ကန့်သတ်သည်\n\n"<annotation id="url">"ပိုမိုလေ့လာရန်"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"ဘက်ထရီသက်တမ်း ပိုရှည်စေရန် \'ဘက်ထရီအားထိန်း\' က- \n\n•မှောင်သည့် အပြင်အဆင်ကို ဖွင့်သည်\n•နောက်ခံလုပ်ဆောင်ချက်၊ ပြသမှုဆိုင်ရာ အထူးပြုလုပ်ချက်အချို့နှင့် “Ok Google” ကဲ့သို့ အခြား ဝန်ဆောင်မှုများကို ပိတ်သည် သို့မဟုတ် ကန့်သတ်သည်"</string>      <string name="data_saver_description" msgid="4995164271550590517">"ဒေတာအသုံးလျှော့ချနိုင်ရန်အတွက် အက်ပ်များကို နောက်ခံတွင် ဒေတာပို့ခြင်းနှင့် လက်ခံခြင်းမပြုရန် \'ဒေတာချွေတာမှု\' စနစ်က တားဆီးထားပါသည်။ ယခုအက်ပ်ဖြင့် ဒေတာအသုံးပြုနိုင်သော်လည်း အကြိမ်လျှော့၍သုံးရပါမည်။ ဥပမာ၊ သင်က မတို့မချင်း ပုံများပေါ်လာမည် မဟုတ်ပါ။"</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"ဒေတာချွေတာမှုစနစ် ဖွင့်မလား။"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"ဖွင့်ပါ"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"ပါဝါ ဒိုင်ယာလော့"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"လော့ခ်မျက်နှာပြင်"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"ဖန်သားပြင်ဓာတ်ပုံ"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"ဖန်သားပြင် အများသုံးစွဲနိုင်မှုဖြတ်လမ်းလင့်ခ်"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"ဖန်သားပြင် အများသုံးစွဲနိုင်မှုဖြတ်လမ်းလင့်ခ် ရွေးချယ်စနစ်"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g>၏ ခေါင်းစီး ဘား။"</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ကို တားမြစ်ထားသော သိမ်းဆည်းမှုအတွင်းသို့ ထည့်ပြီးပါပြီ"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>-"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ပုံပို့ထားသည်"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"စကားဝိုင်း"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"အဖွဲ့စကားဝိုင်း"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 5b7787f0f9db..6bd58cf718d1 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Oppdatert av administratoren din"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Slettet av administratoren din"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"For å forlenge batterilevetiden gjør Batterisparing dette:\n\n• Slå på mørkt tema\n•Slår av eller begrenser bakgrunnsaktivitet, enkelte visuelle effekter og andre funksjoner, for eksempel «Hey Google»\n\n"<annotation id="url">"Finn ut mer"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"For å forlenge batterilevetiden gjør Batterisparing dette:\n\n•Slår på mørkt tema\n•Slår av eller begrenser bakgrunnsaktivitet, enkelte visuelle effekter og andre funksjoner, for eksempel «Hey Google»"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Datasparing hindrer noen apper fra å sende og motta data i bakgrunnen, for å redusere dataforbruket. Aktive apper kan bruke data, men kanskje ikke så mye som ellers – for eksempel vises ikke bilder før du trykker på dem."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Vil du slå på Datasparing?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Slå på"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dialogboks for å slå av/på"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Låseskjerm"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Skjermdump"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Tilgjengelighetssnarvei på skjermen"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Velger for tilgjengelighetssnarvei på skjermen"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Tekstingsfelt i <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> er blitt plassert i TILGANGSBEGRENSET-toppmappen"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"har sendt et bilde"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Samtale"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Gruppesamtale"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index f834adefe6b9..70c538e0555d 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Geüpdatet door je beheerder"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Verwijderd door je beheerder"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Batterijbesparing doet het volgende om de batterijduur te verlengen:\n\n•Het donkere thema aanzetten\n•Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitzetten of beperken\n\n"<annotation id="url">"Meer informatie"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Batterijbesparing doet het volgende om de batterijduur te verlengen:\n\n•Het donkere thema aanzetten\n•Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitzetten of beperken"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Databesparing beperkt het datagebruik door te voorkomen dat sommige apps gegevens verzenden of ontvangen op de achtergrond. De apps die je open hebt, kunnen nog steeds data verbruiken, maar doen dit minder vaak. Afbeeldingen worden dan bijvoorbeeld niet weergegeven totdat je erop tikt."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Databesparing aanzetten?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Inschakelen"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Voedingsdialoogvenster"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Scherm vergrendelen"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Screenshot"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Snelkoppeling voor toegankelijkheid op scherm"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Kiezer voor snelkoppeling voor toegankelijkheid op scherm"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Ondertitelingsbalk van <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> is in de bucket RESTRICTED geplaatst"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"heeft een afbeelding gestuurd"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Gesprek"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Groepsgesprek"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index 24b4e2e16538..1cce69bc8fda 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -1631,10 +1631,8 @@      <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"କିଛି ସେକେଣ୍ଡ ପାଇଁ ଉଭୟ ଭଲ୍ୟୁମ୍ କୀ’କୁ ଧରି ରଖିବା ଫଳରେ ଏକ ଆକ୍ସେସିବିଲିଟୀ ଫିଚର୍ <xliff:g id="SERVICE">%1$s</xliff:g> ଚାଲୁ ହୁଏ। ଏହା ଆପଣଙ୍କ ଡିଭାଇସ୍ କିପରି କାମ କରେ ତାହା ପରିବର୍ତ୍ତନ କରିପାରେ।\n\nଆପଣ ସେଟିଂସ୍ &gt ଆକ୍ସେସିବିଲିଟୀରେ ଏହି ସର୍ଚକଟକୁ ଅନ୍ୟ ଏକ ଫିଚରରେ ପରିବର୍ତ୍ତନ କରିପାରିବେ।"</string>      <string name="accessibility_shortcut_on" msgid="5463618449556111344">"ଚାଲୁ କରନ୍ତୁ"</string>      <string name="accessibility_shortcut_off" msgid="3651336255403648739">"ଚାଲୁ କରନ୍ତୁ ନାହିଁ"</string> -    <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> -    <skip /> -    <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> -    <skip /> +    <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ଚାଲୁ ଅଛି"</string> +    <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ବନ୍ଦ ଅଛି"</string>      <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g>କୁ ଆପଣଙ୍କ ଡିଭାଇସର ସମ୍ପୂର୍ଣ୍ଣ ନିୟନ୍ତ୍ରଣର ଅନୁମତି ଦେବେ?"</string>      <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"ଯଦି ଆପଣ <xliff:g id="SERVICE">%1$s</xliff:g> ଚାଲୁ କରନ୍ତି, ତେବେ ଆପଣଙ୍କ ଡିଭାଇସ୍ ଡାଟା ଏନକ୍ରିପ୍ସନ୍ ବୃଦ୍ଧି କରିବାକୁ ଆପଣଙ୍କର ସ୍କ୍ରିନ୍ ଲକ୍ ବ୍ୟବହାର କରିବ ନାହିଁ।"</string>      <string name="accessibility_service_warning_description" msgid="291674995220940133">"ଯେଉଁ ଆପ୍ସ ଆପଣଙ୍କୁ ଆକ୍ସେସିବିଲିଟୀ ଆବଶ୍ୟକତାରେ ସହାୟତା କରେ, ସେହି ଆପ୍ସ ପାଇଁ ସମ୍ପୂର୍ଣ୍ଣ ନିୟନ୍ତ୍ରଣ ଉପଯୁକ୍ତ ଅଟେ, କିନ୍ତୁ ଅଧିକାଂଶ ଆପ୍ସ ପାଇଁ ଉପଯୁକ୍ତ ନୁହେଁ।"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index eee3dc6760f6..7d4dd03522a7 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -1840,10 +1840,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Zaktualizowany przez administratora"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Usunięty przez administratora"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Aby wydłużyć czas pracy na baterii, Oszczędzanie baterii:\n\n•włącza tryb ciemny,\n•wyłącza lub ogranicza aktywność w tle, niektóre efekty wizualne oraz inne funkcje, np. „OK Google”.\n\n"<annotation id="url">"Więcej informacji"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Aby wydłużyć czas pracy na baterii, Oszczędzanie baterii:\n\n•włącza tryb ciemny,\n•wyłącza lub ogranicza aktywność w tle, niektóre efekty wizualne oraz inne funkcje, np. „OK Google”."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Oszczędzanie danych uniemożliwia niektórym aplikacjom wysyłanie i odbieranie danych w tle, zmniejszając w ten sposób ich użycie. Aplikacja, z której w tej chwili korzystasz, może uzyskiwać dostęp do danych, ale rzadziej. Może to powodować, że obrazy będą się wyświetlać dopiero po kliknięciu."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Włączyć Oszczędzanie danych?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Włącz"</string> @@ -2112,15 +2110,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Okno opcji zasilania"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Ekran blokady"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Zrzut ekranu"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Ekranowy skrót ułatwień dostępu"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Wybieranie ekranowego skrótu ułatwień dostępu"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Pasek napisów w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Umieszczono pakiet <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> w zasobniku danych RESTRICTED"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"wysłano obraz"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Rozmowa"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Rozmowa grupowa"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 8c37b5e30d4f..fcd4e347dc44 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Atualizado pelo seu administrador"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Excluído pelo seu administrador"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Para prolongar a duração da carga, a \"Economia de bateria\":\n\n•ativa o tema escuro;\n•desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos, como o \"Ok Google\".\n\n"<annotation id="url">"Saiba mais"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Para prolongar a duração da carga, a \"Economia de bateria\":\n\n•ativa o tema escuro;\n•desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos, como o \"Ok Google\"."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode fazer com que imagens não sejam exibidas até que você toque nelas."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Ativar Economia de dados?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Ativar"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Caixa de diálogo de liga/desliga"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Bloquear tela"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Capturar tela"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Atalho de acessibilidade na tela"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Seletor de atalho de acessibilidade na tela"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Barra de legendas do app <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> foi colocado no intervalo \"RESTRITO\""</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"enviou uma imagem"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversa"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Conversa em grupo"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"+ <xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index a1c8f6be285d..832453c8e717 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Atualizado pelo seu gestor"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminado pelo seu gestor"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Para prolongar a autonomia da bateria, a Poupança de bateria:\n\n•Ativa o tema escuro.\n•Desativa ou restringe a atividade em segundo plano, alguns efeitos visuais e outras funcionalidades como \"Ok Google\".\n\n"<annotation id="url">"Saber mais"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Para prolongar a autonomia da bateria, a Poupança de bateria:\n\n•Ativa o tema escuro.\n•Desativa ou restringe a atividade em segundo plano, alguns efeitos visuais e outras funcionalidades como \"Ok Google\"."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Para ajudar a reduzir a utilização de dados, a Poupança de dados impede que algumas aplicações enviem ou recebam dados em segundo plano. Uma determinada aplicação que esteja a utilizar atualmente pode aceder aos dados, mas é possível que o faça com menos frequência. Isto pode significar, por exemplo, que as imagens não são apresentadas até que toque nas mesmas."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Pretende ativar a Poupança de dados?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Ativar"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Caixa de diálogo de energia"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Ecrã de bloqueio"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Captura de ecrã"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Atalho de acessibilidade no ecrã"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Selecionador de atalhos de acessibilidade no ecrã"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Barra de legendas da aplicação <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> foi colocado no contentor RESTRITO."</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"enviou uma imagem"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversa"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Conversa de grupo"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"> <xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 8c37b5e30d4f..fcd4e347dc44 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Atualizado pelo seu administrador"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Excluído pelo seu administrador"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Para prolongar a duração da carga, a \"Economia de bateria\":\n\n•ativa o tema escuro;\n•desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos, como o \"Ok Google\".\n\n"<annotation id="url">"Saiba mais"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Para prolongar a duração da carga, a \"Economia de bateria\":\n\n•ativa o tema escuro;\n•desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos, como o \"Ok Google\"."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode fazer com que imagens não sejam exibidas até que você toque nelas."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Ativar Economia de dados?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Ativar"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Caixa de diálogo de liga/desliga"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Bloquear tela"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Capturar tela"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Atalho de acessibilidade na tela"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Seletor de atalho de acessibilidade na tela"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Barra de legendas do app <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> foi colocado no intervalo \"RESTRITO\""</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"enviou uma imagem"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversa"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Conversa em grupo"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"+ <xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 0f95eccfa572..7dc8f3363c0d 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -1817,10 +1817,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Actualizat de administratorul dvs."</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Șters de administratorul dvs."</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Pentru a prelungi autonomia bateriei, Economisirea bateriei:\n\n•·activează tema întunecată;\n•·activează sau restricționează activitatea în fundal, unele efecte vizuale și alte funcții, cum ar fi „Ok Google”.\n\n"<annotation id="url">"Aflați mai multe"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Pentru a prelungi autonomia bateriei, Economisirea bateriei:\n\n• activează tema întunecată;\n• activează sau restricționează activitatea în fundal, unele efecte vizuale și alte funcții, cum ar fi „Ok Google”."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Pentru a contribui la reducerea utilizării de date, Economizorul de date împiedică unele aplicații să trimită sau să primească date în fundal. O aplicație pe care o folosiți poate accesa datele, însă mai rar. Aceasta poate însemna, de exemplu, că imaginile se afișează numai după ce le atingeți."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Activați Economizorul de date?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Activați"</string> @@ -2078,15 +2076,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Power Dialog"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Ecran de blocare"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Captură de ecran"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Comandă rapidă de accesibilitate de pe ecran"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Selector de comenzi rapide de accesibilitate de pe ecran"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Bară cu legenda pentru <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> a fost adăugat la grupul RESTRICȚIONATE"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"a trimis o imagine"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversație"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Conversație de grup"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index c2e35eb4c033..ad0797eeb540 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -1840,10 +1840,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Обновлено администратором"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Удалено администратором"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Чтобы продлить время работы от батареи, в режиме энергосбережения:\n\n• включается тёмная тема;\n• отключаются или ограничиваются фоновые процессы, некоторые визуальные эффекты и другие функции (например, распознавание команды \"Окей, Google\").\n\n"<annotation id="url">"Подробнее…"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Чтобы продлить время работы от батареи, в режиме энергосбережения:\n\n• включается тёмная тема;\n• отключаются или ограничиваются фоновые процессы, некоторые визуальные эффекты и другие функции (например, распознавание команды \"Окей, Google\")."</string>      <string name="data_saver_description" msgid="4995164271550590517">"В режиме экономии трафика фоновая передача данных для некоторых приложений отключена. Приложение, которым вы пользуетесь, может получать и отправлять данные, но реже, чем обычно. Например, изображения могут не загружаться, пока вы не нажмете на них."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Включить экономию трафика?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Включить"</string> @@ -2112,15 +2110,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Диалоговое окно питания"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Заблокированный экран"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Скриншот"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Быстрое включение"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Меню быстрого включения"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Строка субтитров в приложении \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Приложение \"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>\" помещено в категорию с ограниченным доступом."</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"Отправлено изображение"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Чат"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Групповой чат"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index 03ef434c4ed3..2e0c919aecda 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -1796,10 +1796,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"ඔබගේ පරිපාලක මඟින් යාවත්කාලීන කර ඇත"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"ඔබගේ පරිපාලක මඟින් මකා දමා ඇත"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"හරි"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"බැටරියේ ජීව කාලය දික් කිරීමට, බැටරි සුරැකුම:\n\n•අඳුරු තේමාව ක්රියාත්මක කරයි\n•පසුබිමේ ක්රියාකාරකම, සමහර දෘෂ්ය ප්රයෝග සහ “Hey Google” වැනි වෙනත් විශේෂාංග ක්රියාවිරහිත කරයි නැතහොත් අවහිර කරයි\n\n"<annotation id="url">"තව දැන ගන්න"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"බැටරියේ ජීව කාලය දික් කිරීමට, බැටරි සුරැකුම:\n\n•අඳුරු තේමාව ක්රියාත්මක කරයි\n•පසුබිමේ ක්රියාකාරකම, සමහර දෘෂ්ය ප්රයෝග සහ “Hey Google” වැනි වෙනත් විශේෂාංග ක්රියාවිරහිත කරයි නැතහොත් අවහිර කරයි"</string>      <string name="data_saver_description" msgid="4995164271550590517">"දත්ත භාවිතය අඩු කිරීමට උදවු වීමට, දත්ත සුරැකුම සමහර යෙදුම් පසුබිමින් දත්ත යැවීම සහ ලබා ගැනීම වළක්වයි. ඔබ දැනට භාවිත කරන යෙදුමකට දත්ත වෙත පිවිසීමට හැකිය, නමුත් එසේ කරන්නේ කලාතුරකින් විය හැකිය. මෙයින් අදහස් වන්නේ, උදාහරණයක් ලෙස, එම රූප ඔබ ඒවාට තට්ටු කරන තෙක් සංදර්ශනය නොවන බවය."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"දත්ත සුරැකුම ක්රියාත්මක කරන්නද?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"ක්රියාත්මක කරන්න"</string> @@ -2046,15 +2044,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"බල සංවාදය"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"අගුලු තිරය"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"තිර රුව"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"තිරය මත ප්රවේශ්යතා කෙටිමග"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"තිරය මත ප්රවේශ්යතා කෙටිමං තෝරනය"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g> හි සිරස්තල තීරුව."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> අවහිර කළ බාල්දියට දමා ඇත"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"රූපයක් එව්වා"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"සංවාදය"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"සමූහ සංවාදය"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index bee9e726f8fa..887a66e36527 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -204,12 +204,9 @@      <string name="factory_reset_warning" msgid="6858705527798047809">"Vaše zariadenie bude vymazané"</string>      <string name="factory_reset_message" msgid="2657049595153992213">"Daná aplikácia na správu sa nedá použiť. Vaše zariadenie bude vymazané.\n\nV prípade otázok kontaktujte správcu organizácie."</string>      <string name="printing_disabled_by" msgid="3517499806528864633">"Tlač zakázala aplikácia <xliff:g id="OWNER_APP">%s</xliff:g>."</string> -    <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> -    <skip /> +    <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Zapnite svoj pracovný profil"</string> +    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Vaše osobné aplikácie sú zablokované, dokým nezapnete svoj pracovný profil"</string> +    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Vaše osobné aplikácie budú zajtra zablokované"</string>      <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Zapnúť pracovný profil"</string>      <string name="me" msgid="6207584824693813140">"Ja"</string>      <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Možnosti tabletu"</string> @@ -1843,10 +1840,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Aktualizoval správca"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Odstránil správca"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Šetrič batérie predlžuje výdrž batérie:\n\n• zapnutím tmavého motívu;\n•vypnutím alebo obmedzením aktivity na pozadí, niektorých vizuálnych efektov a ďalších funkcií, ako napríklad kľúčového slova „Hey Google“.\n\n"<annotation id="url">"Ďalšie informácie"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Šetrič batérie predlžuje výdrž batérie:\n\n• zapnutím tmavého motívu;\n• vypnutím alebo obmedzením aktivity na pozadí, niektorých vizuálnych efektov a ďalších funkcií, ako napríklad kľúčového slova „Hey Google“."</string>      <string name="data_saver_description" msgid="4995164271550590517">"S cieľom znížiť spotrebu dát bráni šetrič dát niektorým aplikáciám odosielať alebo prijímať dáta na pozadí. Aplikácia, ktorú práve používate, môže využívať dáta, ale možno to bude robiť menej často. Znamená to napríklad, že sa nezobrazia obrázky, kým na ne neklepnete."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Chcete zapnúť šetrič dát?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Zapnúť"</string> @@ -2115,15 +2110,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dialógové okno napájania"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Uzamknúť obrazovku"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Snímka obrazovky"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Skratka dostupnosti na obrazovke"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Výber skratky dostupnosti na obrazovke"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Popis aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Balík <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> bol vložený do kontajnera OBMEDZENÉ"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"odoslal(a) obrázok"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Konverzácia"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Skupinová konverzácia"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index b22cb17fe1f5..fc9ada233272 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -204,12 +204,9 @@      <string name="factory_reset_warning" msgid="6858705527798047809">"Podatki v napravi bodo izbrisani"</string>      <string name="factory_reset_message" msgid="2657049595153992213">"Skrbniške aplikacije ni mogoče uporabljati. Podatki v napravi bodo izbrisani.\n\nČe imate vprašanja, se obrnite na skrbnika organizacije."</string>      <string name="printing_disabled_by" msgid="3517499806528864633">"Tiskanje je onemogočil pravilnik <xliff:g id="OWNER_APP">%s</xliff:g>."</string> -    <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> -    <skip /> +    <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Vklopite delovni profil"</string> +    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Osebne aplikacije so blokirane, dokler ne vklopite delovnega profila"</string> +    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Osebne aplikacije bodo blokirane jutri"</string>      <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Vklopi delovni profil"</string>      <string name="me" msgid="6207584824693813140">"Jaz"</string>      <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Možnosti tabličnega računalnika"</string> @@ -1843,10 +1840,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Posodobil skrbnik"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisal skrbnik"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"V redu"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Funkcija varčevanja z energijo baterije podaljša čas delovanja baterije tako:\n\n•Vklopi temno temo,\n•izklopi ali omeji izvajanje dejavnosti v ozadju, nekaterih vizualnih učinkov in drugih funkcij, kot je »Hey Google«.\n\n"<annotation id="url">"Več o tem"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Funkcija varčevanja z energijo baterije podaljša čas delovanja baterije tako:\n\n•Vklopi temno temo,\n•izklopi ali omeji izvajanje dejavnosti v ozadju, nekaterih vizualnih učinkov in drugih funkcij, kot je »Hey Google«."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Zaradi zmanjševanja prenesene količine podatkov funkcija varčevanja s podatki nekaterim aplikacijam preprečuje, da bi v ozadju pošiljale ali prejemale podatke. Aplikacija, ki jo trenutno uporabljate, lahko prenaša podatke, vendar to morda počne manj pogosto. To na primer pomeni, da se slike ne prikažejo, dokler se jih ne dotaknete."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Vklop varčevanja s podatki?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Vklop"</string> @@ -2115,15 +2110,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Pogovorno okno o porabi energije"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Zaklenjen zaslon"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Posnetek zaslona"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Zaslonska bližnjica funkcij za ljudi s posebnimi potrebami"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Izbirnik zaslonske bližnjice funkcij za ljudi s posebnimi potrebami"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Vrstica s podnapisi aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> je bil dodan v segment OMEJENO"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"je poslal(-a) sliko"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Pogovor"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Skupinski pogovor"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index 10cb62da4215..07cf388b6bc9 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Përditësuar nga administratori"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Fshirë nga administratori"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Në rregull"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Për të rritur kohëzgjatjen e baterisë, \"Kursyesi i baterisë\":\n\n• Aktivizon \"Temën e errët\"\n• Çaktivizon ose kufizon aktivitetin në sfond, disa efekte vizuale dhe veçori të tjera si “Ok Google”\n\n"<annotation id="url">"Mëso më shumë"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Për të rritur kohëzgjatjen e baterisë, \"Kursyesi i baterisë\":\n\n• Aktivizon \"Temën e errët\"\n• Çaktivizon ose kufizon aktivitetin në sfond, disa efekte vizuale dhe veçori të tjera si “Ok Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Për të ndihmuar në reduktimin e përdorimit të të dhënave, \"Kursyesi i të dhënave\" pengon që disa aplikacione të dërgojnë apo të marrin të dhëna në sfond. Një aplikacion që po përdor aktualisht mund të ketë qasje te të dhënat, por këtë mund ta bëjë më rrallë. Kjo mund të nënkuptojë, për shembull, se imazhet nuk shfaqen kur troket mbi to."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Të aktivizohet \"Kursyesi i të dhënave\"?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivizo"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dialogu i energjisë"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Ekrani i kyçjes"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Pamja e ekranit"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Shkurtorja e qasshmërisë në ekran"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Zgjedhësi i shkurtores së qasshmërisë në ekran"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Shiriti i nëntitullit të <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> është vendosur në grupin E KUFIZUAR"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"dërgoi një imazh"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Biseda"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Bisedë në grup"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 67e1ff4fb148..19d87255ee04 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -1817,10 +1817,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Ажурирао је администратор"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Избрисао је администратор"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Потврди"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Да би се продужило трајање батерије, уштеда батерије:\n\n•укључује тамну тему\n•искључује или ограничава активности у позадини, неке визуелне ефекте и друге функције, на пример, „Ок Google“\n\n"<annotation id="url">"Сазнајте више"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Да би се продужило трајање батерије, уштеда батерије:\n\n•укључује тамну тему\n•искључује или ограничава активности у позадини, неке визуелне ефекте и друге функције, на пример, „Ок Google“"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Да би се смањила потрошња података, Уштеда података спречава неке апликације да шаљу или примају податке у позадини. Апликација коју тренутно користите може да приступа подацима, али ће то чинити ређе. На пример, слике се неће приказивати док их не додирнете."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Желите да укључите Уштеду података?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Укључи"</string> @@ -2078,15 +2076,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Дијалог напајања"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Закључани екран"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Снимак екрана"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Пречице за приступачност на екрану"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Алатка за бирање пречица за приступачност на екрану"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Трака са насловима апликације <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакет <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> је додат у сегмент ОГРАНИЧЕНО"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"је послао/ла слику"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Конверзација"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Групна конверзација"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 840493cf3012..af9ddfec3c20 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Administratören uppdaterade paketet"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Administratören raderade paketet"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Batterisparläget förlänger batteritiden genom att:\n\n• aktivera mörkt tema\n•·inaktivera eller begränsa aktivitet i bakgrunden, vissa visuella effekter och andra funktioner, som ”Hey Google”\n\n"<annotation id="url">"Läs mer"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Batterisparläget förlänger batteritiden genom att:\n\n• aktivera mörkt tema\n•·inaktivera eller begränsa aktivitet i bakgrunden, vissa visuella effekter och andra funktioner, som ”Hey Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Med databesparing kan du minska dataanvändningen genom att hindra en del appar från att skicka eller ta emot data i bakgrunden. Appar som du använder kan komma åt data, men det sker kanske inte lika ofta. Detta innebär t.ex. att bilder inte visas förrän du trycker på dem."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Vill du aktivera Databesparing?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivera"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dialogruta för ström"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Låsskärm"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Skärmdump"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Tillgänglighetsgenväg på skärmen"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Valfunktion för tillgänglighetsgenväg på skärmen"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Textningsfält för <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> har placerats i hinken RESTRICTED"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"har skickat en bild"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Konversation"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Gruppkonversation"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 360f41bdfc00..a31be6f4abbb 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -200,12 +200,9 @@      <string name="factory_reset_warning" msgid="6858705527798047809">"Data iliyomo kwenye kifaa chako itafutwa"</string>      <string name="factory_reset_message" msgid="2657049595153992213">"Huwezi kutumia programu ya msimamizi. Sasa data iliyo kwenye kifaa chako itafutwa.\n\nIkiwa una maswali yoyote, wasiliana na msimamizi wa shirika lako."</string>      <string name="printing_disabled_by" msgid="3517499806528864633">"Kipengele cha kuchapisha kimezimwa na <xliff:g id="OWNER_APP">%s</xliff:g>."</string> -    <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> -    <skip /> +    <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Washa wasifu wako wa kazini"</string> +    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Programu zako za binafsi zimezuiwa hadi uwashe wasifu wako wa kazini"</string> +    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Programu zako za binafsi zitazuiwa kesho"</string>      <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Washa wasifu wa kazini"</string>      <string name="me" msgid="6207584824693813140">"Mimi"</string>      <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Chaguo za kompyuta ndogo"</string> @@ -1797,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Imesasishwa na msimamizi wako"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Imefutwa na msimamizi wako"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Sawa"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Ili kuongeza muda wa matumizi ya betri, Kiokoa Betri:\n\n•Huwasha Mandhari meusi\n•Huzima au kuzuia shughuli za chinichini, baadhi ya madoido yanayoonekana na vipengele vingine kama vile \"Ok Google\"\n\n"<annotation id="url">"Pata maelezo zaidi"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Ili kuongeza muda wa matumizi ya betri, Kiokoa Betri:\n\n•Huwasha Mandhari meusi\n•Huzima au kuzuia shughuli za chinichini, baadhi ya madoido yanayoonekana na vipengele vingine kama vile \"Ok Google\""</string>      <string name="data_saver_description" msgid="4995164271550590517">"Ili kusaidia kupunguza matumizi ya data, Kiokoa Data huzuia baadhi ya programu kupokea na kutuma data chinichini. Programu ambayo unatumia sasa inaweza kufikia data, lakini si kila wakati. Kwa mfano, haitaonyesha picha hadi utakapozifungua."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Ungependa Kuwasha Kiokoa Data?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Washa"</string> @@ -2047,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Kidirisha cha Nishati"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Skrini Iliyofungwa"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Picha ya skrini"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Njia ya Mkato ya Ufikivu kwenye Skrini"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Kichagua Njia ya Mkato ya Ufikivu kwenye Skrini"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Upau wa manukuu wa <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> kimewekwa katika kikundi KILICHODHIBITIWA"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"imetuma picha"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Mazungumzo"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Mazungumzo ya Kikundi"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index c2c9d1615207..591c8596d411 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -200,12 +200,9 @@      <string name="factory_reset_warning" msgid="6858705527798047809">"சாதனத் தரவு அழிக்கப்படும்"</string>      <string name="factory_reset_message" msgid="2657049595153992213">"நிர்வாகி ஆப்ஸை உபயோகிக்க முடியாது. இப்போது, உங்கள் சாதனம் ஆரம்ப நிலைக்கு மீட்டமைக்கப்படும்.\n\nஏதேனும் கேள்விகள் இருப்பின், உங்கள் நிறுவனத்தின் நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>      <string name="printing_disabled_by" msgid="3517499806528864633">"பிரிண்ட் செய்வதை <xliff:g id="OWNER_APP">%s</xliff:g> தடுத்துள்ளது."</string> -    <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> -    <skip /> -    <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> -    <skip /> +    <string name="personal_apps_suspension_title" msgid="7561416677884286600">"பணிக் கணக்கை ஆன் செய்யுங்கள்"</string> +    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"பணிக் கணக்கை ஆன் செய்யும் வரை உங்கள் தனிப்பட்ட ஆப்ஸ் தடுக்கப்பட்டிருக்கும்"</string> +    <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"நாளை உங்கள் தனிப்பட்ட ஆப்ஸ் தடுக்கப்படும்"</string>      <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"பணிக் கணக்கை ஆன் செய்"</string>      <string name="me" msgid="6207584824693813140">"நான்"</string>      <string name="power_dialog" product="tablet" msgid="8333207765671417261">"டேப்லெட் விருப்பங்கள்"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 6b8b9121fc62..b298dbd2487c 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"อัปเดตโดยผู้ดูแลระบบ"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"ลบโดยผู้ดูแลระบบ"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"ตกลง"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"โหมดประหยัดแบตเตอรี่จะดำเนินการดังต่อไปนี้เพื่อยืดอายุการใช้งานแบตเตอรี่\n\n•เปิดธีมมืด\n•ปิดหรือจำกัดกิจกรรมในเบื้องหลัง เอฟเฟกต์ภาพบางอย่าง และฟีเจอร์อื่นๆ อย่างเช่น “Ok Google”\n\n"<annotation id="url">"ดูข้อมูลเพิ่มเติม"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"โหมดประหยัดแบตเตอรี่จะดำเนินการดังต่อไปนี้เพื่อยืดอายุการใช้งานแบตเตอรี่\n\n•·เปิดธีมมืด\n•ปิดหรือจำกัดกิจกรรมในเบื้องหลัง เอฟเฟกต์ภาพบางอย่าง และฟีเจอร์อื่นๆ อย่างเช่น “Ok Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"เพื่อช่วยลดปริมาณการใช้อินเทอร์เน็ต โปรแกรมประหยัดอินเทอร์เน็ตจะช่วยป้องกันไม่ให้บางแอปส่งหรือรับข้อมูลโดยการใช้อินเทอร์เน็ตอยู่เบื้องหลัง แอปที่คุณกำลังใช้งานสามารถเข้าถึงอินเทอร์เน็ตได้ แต่อาจไม่บ่อยเท่าเดิม ตัวอย่างเช่น ภาพต่างๆ จะไม่แสดงจนกว่าคุณจะแตะที่ภาพเหล่านั้น"</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"เปิดการประหยัดอินเทอร์เน็ตไหม"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"เปิด"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"กล่องโต้ตอบพลังงาน"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"หน้าจอล็อก"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"ภาพหน้าจอ"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"ทางลัดการช่วยเหลือพิเศษบนหน้าจอ"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"ตัวเลือกทางลัดการช่วยเหลือพิเศษบนหน้าจอ"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"แถบคำบรรยาย <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"ใส่ <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ในที่เก็บข้อมูลที่ถูกจำกัดแล้ว"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ส่งรูปภาพ"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"การสนทนา"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"บทสนทนากลุ่ม"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index f078b82de89b..ee41ca9386d4 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Na-update ng iyong admin"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Na-delete ng iyong admin"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Para patagalin ang baterya, ginagawa ng Pangtipid sa Baterya na:\n\n•I-on ang Madilim na tema\n•I-off o paghigpitan ang aktibidad sa background, ilang visual effect, at iba pang feature gaya ng “Hey Google”\n\n"<annotation id="url">"Matuto pa"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Para patagalin ang baterya, ginagawa ng Pangtipid sa Baterya na:\n\n•I-on ang Madilim na tema\n•I-off o paghigpitan ang aktibidad sa background, ilang visual effect, at iba pang feature gaya ng “Hey Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Upang makatulong na mabawasan ang paggamit ng data, pinipigilan ng Data Saver ang ilang app na magpadala o makatanggap ng data sa background. Maaaring mag-access ng data ang isang app na ginagamit mo sa kasalukuyan, ngunit mas bihira na nito magagawa iyon. Halimbawa, maaaring hindi lumabas ang mga larawan hangga\'t hindi mo nata-tap ang mga ito."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"I-on ang Data Saver?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"I-on"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dialog ng Power"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Lock Screen"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Screenshot"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Shortcut ng Accessibility sa Screen"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Tagapili ng Shortcut ng Accessibility sa Screen"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Caption bar ng <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Inilagay ang <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> sa PINAGHIHIGPITANG bucket"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"nagpadala ng larawan"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Pag-uusap"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Panggrupong Pag-uusap"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index a0ff1a81d8d4..bae1bd7ac983 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Yöneticiniz tarafından güncellendi"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Yöneticiniz tarafından silindi"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"Tamam"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Pil ömrünü uzatmak için Pil Tasarrufu:\n\n•Koyu temayı açar\n•Arka plan etkinliğini, bazı görsel efektleri ve \"Ok Google\" gibi diğer özellikleri kapatır veya kısıtlar\n\n"<annotation id="url">"Daha fazla bilgi"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Pil ömrünü uzatmak için Pil Tasarrufu:\n\n•Koyu temayı açar\n•Arka plan etkinliğini, bazı görsel efektleri ve \"Ok Google\" gibi diğer özellikleri kapatır veya kısıtlar"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Veri kullanımını azaltmaya yardımcı olması için Veri Tasarrufu, bazı uygulamaların arka planda veri göndermesini veya almasını engeller. Şu anda kullandığınız bir uygulama veri bağlantısına erişebilir, ancak bunu daha seyrek yapabilir. Bu durumda örneğin, siz resimlere dokunmadan resimler görüntülenmez."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Veri Tasarrufu açılsın mı?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Aç"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Güç İletişim Kutusu"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Kilit Ekranı"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Ekran görüntüsü"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Ekran Erişilebilirlik Kısayolu"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Ekran Erişilebilirlik Kısayol Seçici"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasının başlık çubuğu."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> KISITLANMIŞ gruba yerleştirildi"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"bir resim gönderildi"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Görüşme"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Grup Görüşmesi"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index da529bc989bb..ad50bfa10610 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -1840,10 +1840,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Оновлено адміністратором"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Видалено адміністратором"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Щоб подовжити час роботи акумулятора, режим енергозбереження:\n\n•вмикає темну тему;\n•припиняє або обмежує фонову активність, вимикає деякі візуальні ефекти та інші енергозатратні функції, зокрема команду \"Ok Google\".\n\n"<annotation id="url">"Докладніше"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Щоб подовжити час роботи акумулятора, режим енергозбереження:\n\n•вмикає темну тему;\n•припиняє або обмежує фонову активність, вимикає деякі візуальні ефекти та інші енергозатратні функції, зокрема команду \"Ok Google\"."</string>      <string name="data_saver_description" msgid="4995164271550590517">"Щоб зменшити використання трафіку, функція \"Заощадження трафіку\" не дозволяє деяким додаткам надсилати чи отримувати дані у фоновому режимі. Поточний додаток зможе отримувати доступ до таких даних, але рідше. Наприклад, зображення не відображатиметься, доки ви не торкнетеся його."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Увімкнути заощадження трафіку?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Увімкнути"</string> @@ -2112,15 +2110,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Відкрити вікно"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Заблокувати екран"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Знімок екрана"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Екранний засіб спеціальних можливостей"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Інструмент вибору екранного засобу спеціальних можливостей"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Смуга із субтитрами для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакет \"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>\" додано в сегмент з обмеженнями"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"надіслано зображення"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Чат"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Груповий чат"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index d069a68084b7..0df6c1b9c365 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Administrator tomonidan yangilangan"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Administrator tomonidan o‘chirilgan"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Batareya quvvatini uzaytirish uchun Quvvat tejash funksiyasi:\n\n•Tungi mavzuni yoqadi\n•Fondagi harakatlar, vizual effektlar va “Hey Google” kabi boshqa funksiyalarni faolsizlantiradi\n\n"<annotation id="url">"Batafsil"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Batareya quvvatini uzaytirish uchun Quvvat tejash funksiyasi:\n\n•Tungi mavzuni yoqadi\n•Fondagi harakatlar, vizual effektlar va “Hey Google” kabi boshqa funksiyalarni faolsizlantiradi"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Trafik tejash rejimida ayrim ilovalar uchun orqa fonda internetdan foydalanish imkoniyati cheklanadi. Siz ishlatayotgan ilova zaruratga qarab internet-trafik sarflashi mumkin, biroq cheklangan miqdorda. Masalan, rasmlar ustiga bosmaguningizcha ular yuklanmaydi."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Trafik tejash yoqilsinmi?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Yoqish"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Quvvat muloqot oynasi"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Ekran qulfi"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Skrinshot"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Ekranda tezkor ishga tushirish"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Ekranda tezkor ishga tushirishni tanlagich"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g> taglavhalar paneli."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> cheklangan turkumga joylandi"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"rasm yuborildi"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Suhbat"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Guruh suhbati"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 479574b6a5df..54f9b78c9922 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Do quản trị viên của bạn cập nhật"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Do quản trị viên của bạn xóa"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Để tăng thời lượng pin, Trình tiết kiệm pin sẽ:\n\n•Bật Giao diện tối\n•Tắt hoặc hạn chế hoạt động chạy trong nền, một số hiệu ứng hình ảnh và các tính năng khác như lệnh “Ok Google”\n\n"<annotation id="url">"Tìm hiểu thêm"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Để tăng thời lượng pin, Trình tiết kiệm pin sẽ:\n\n•Bật Giao diện tối\n•Tắt hoặc hạn chế hoạt động chạy trong nền, một số hiệu ứng hình ảnh và các tính năng khác như lệnh “Ok Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Để giúp giảm mức sử dụng dữ liệu, Trình tiết kiệm dữ liệu sẽ chặn một số ứng dụng gửi hoặc nhận dữ liệu trong nền. Ứng dụng mà bạn hiện sử dụng có thể dùng dữ liệu nhưng tần suất sẽ giảm. Ví dụ: hình ảnh sẽ không hiển thị cho đến khi bạn nhấn vào hình ảnh đó."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Bật Trình tiết kiệm dữ liệu?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Bật"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Hộp thoại thao tác với nguồn"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Khóa màn hình"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Chụp ảnh màn hình"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Phím tắt ảo hỗ trợ tiếp cận"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Nút chọn phím tắt ảo hỗ trợ tiếp cận"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Thanh phụ đề của <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Đã đưa <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> vào bộ chứa BỊ HẠN CHẾ"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"đã gửi hình ảnh"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Cuộc trò chuyện"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Cuộc trò chuyện nhóm"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 7f54194d6ae6..a89ac8a66765 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"已由您的管理员更新"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"已由您的管理员删除"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"确定"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"为了延长电池续航时间,省电模式会执行以下操作:\n\n• 开启深色主题\n• 关闭或限制后台活动、部分视觉效果和其他功能,例如“Ok Google”\n\n"<annotation id="url">"了解详情"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"为了延长电池续航时间,省电模式会执行以下操作:\n\n• 开启深色主题\n• 关闭或限制后台活动、部分视觉效果和其他功能,例如“Ok Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"为了减少流量消耗,流量节省程序会阻止某些应用在后台收发数据。您当前使用的应用可以收发数据,但频率可能会降低。举例而言,这可能意味着图片只有在您点按之后才会显示。"</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"要开启流量节省程序吗?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"开启"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"电源对话框"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"锁定屏幕"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"屏幕截图"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"屏幕上的无障碍功能快捷方式"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"屏幕上的无障碍功能快捷方式选择器"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g>的标题栏。"</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 已被放入受限存储分区"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"发送了一张图片"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"对话"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"群组对话"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index d71d2c5bed6b..7e5caf95684a 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"已由您的管理員更新"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"已由您的管理員刪除"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"好"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"為延長電池壽命,「省電模式」會:\n\n•開啟深色主題背景\n•關閉或限制背景活動、某些視覺效果和其他功能 (例如「Hey Google」)\n\n"<annotation id="url">"瞭解詳情"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"為延長電池壽命,「省電模式」會:\n\n•開啟深色主題背景\n•關閉或限制背景活動、某些視覺效果和其他功能 (例如「Hey Google」)"</string>      <string name="data_saver_description" msgid="4995164271550590517">"「數據節省模式」可防止部分應用程式在背景收發資料,以節省數據用量。您正在使用的應用程式可存取資料,但次數可能會減少。例如,圖片可能需要輕按才會顯示。"</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"要開啟「數據節省模式」嗎?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"開啟"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"電源對話框"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"將畫面上鎖"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"螢幕截圖"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"螢幕無障礙功能捷徑"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"螢幕無障礙功能捷徑選擇器"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」的說明列。"</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 已納入受限制的儲存區"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"已傳送圖片"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"對話"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"群組對話"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 3c0312b76ca7..076c37478e8b 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"已由你的管理員更新"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"已由你的管理員刪除"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"確定"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"為了延長電池續航力,節約耗電量功能會執行以下動作:\n\n•開啟深色主題\n•關閉或限制背景活動、部分視覺效果和其他功能,例如「Hey Google」啟動字詞\n\n"<annotation id="url">"瞭解詳情"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"為了延長電池續航力,節約耗電量功能會執行以下動作:\n\n•開啟深色主題\n•關閉或限制背景活動、部分視覺效果和其他功能,例如「Hey Google」啟動字詞"</string>      <string name="data_saver_description" msgid="4995164271550590517">"「數據節省模式」可防止部分應用程式在背景收發資料,以節省數據用量。你目前使用的應用程式可以存取資料,但存取頻率可能不如平時高。舉例來說,圖片可能不會自動顯示,在你輕觸後才會顯示。"</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"要開啟數據節省模式嗎?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"開啟"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"開啟電源對話方塊"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"螢幕鎖定"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"擷取螢幕畫面"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"螢幕上的無障礙捷徑"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"螢幕上的無障礙捷徑選擇器"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」的說明文字列。"</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"已將「<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>」移入受限制的值區"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"傳送了一張圖片"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"對話"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"群組對話"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 4acf3fe2d33c..13be23e01cf8 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -1794,10 +1794,8 @@      <string name="package_updated_device_owner" msgid="7560272363805506941">"Kubuyekezwe umlawuli wakho"</string>      <string name="package_deleted_device_owner" msgid="2292335928930293023">"Kususwe umlawuli wakho"</string>      <string name="confirm_battery_saver" msgid="5247976246208245754">"KULUNGILE"</string> -    <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> -    <skip /> -    <!-- no translation found for battery_saver_description (8587408568232177204) --> -    <skip /> +    <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"Ukuze unwebe impilo yebhethri, Isilondolozi Sebhethri:\n\n•Sivula itimu emnyama\n•Sivala noma sibeka umkhawulo emsebenzini wangemuva, kweminye imithelela yokubuka, nakwezinye izici ezifana nokuthi “Ok Google”\n\n"<annotation id="url">"Funda kabanzi"</annotation></string> +    <string name="battery_saver_description" msgid="8587408568232177204">"Ukuze unwebe impilo yebhethri, Isilondolozi sebhethri:\n\n•Sivula itimu emnyama\n•Sivala noma sibeka umkhawulo emsebenzini wangemuva, kweminye imithelela yokubuka, nakwezinye izici ezifana nokuthi “Ok Google”"</string>      <string name="data_saver_description" msgid="4995164271550590517">"Ukusiza ukwehlisa ukusetshenziswa kwedatha, iseva yedatha igwema ezinye izinhlelo zokusebenza ukuthi zithumele noma zamukele idatha ngasemuva. Uhlelo lokusebenza olisebenzisa okwamanje lingafinyelela idatha, kodwa lingenza kanjalo kancane. Lokhu kungachaza, isibonelo, ukuthi izithombe azibonisi uze uzithephe."</string>      <string name="data_saver_enable_title" msgid="7080620065745260137">"Vula iseva yedatha?"</string>      <string name="data_saver_enable_button" msgid="4399405762586419726">"Vula"</string> @@ -2044,15 +2042,12 @@      <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Ibhokisi lamandla"</string>      <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Khiya isikrini"</string>      <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Isithombe-skrini"</string> -    <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> -    <skip /> -    <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> -    <skip /> +    <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"Isinqamuleli sokufinyeleleka kusikrini"</string> +    <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"Isikhethi sesinqamuleli sokufinyeleleka kusikrini"</string>      <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Ibha yamazwibela we-<xliff:g id="APP_NAME">%1$s</xliff:g>."</string>      <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"I-<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ifakwe kubhakede LOKUKHAWULELWE"</string>      <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> -    <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> -    <skip /> +    <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"uthumele isithombe"</string>      <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Ingxoxo"</string>      <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Ingxoxo Yeqembu"</string>      <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index 2a2da6a45857..c962256e477c 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -1830,9 +1830,30 @@          <!-- @hide no longer used, kept to preserve padding -->          <attr name="allowAutoRevokePermissionsExemption" format="boolean" /> +        <!-- Declare the app's tolerance to having its permissions automatically revoked when unused for an extended +             period of time -->          <attr name="autoRevokePermissions"> +            <!-- App supports re-requesting its permissions if revoked. +                 Revoking app's permissions doesn't cause user experience issues, aside from a repeated permission request. + +                 Permissions may be automatically revoked from an app if unused. The app must check and possibly request the +                 necessary permission on each permission-gated call-->              <enum name="allowed" value="0" /> +            <!-- App may experience degraded functionality when its previously-granted permissions are revoked. +                 Revoking app's permissions may cause user experience issues, that are not critical to the user. + +                 Apps with this declaration can choose to request an exemption from auto revoke from user by starting +                 an activity with {@code Intent.ACTION_AUTO_REVOKE_PERMISSIONS}. -->              <enum name="discouraged" value="1" /> +            <!-- User may experience severe consequences if this app's permissions are revoked unexpectedly. + +                 E.g. app may fail to do a user-critical background job that may likely impact user's +                 safety/security/device accessibility. + +                 This declaration may cause an additional review when publishing your app. + +                 Apps with this declaration are exempt from auto revoke by default, though the user has the final say +                 in both revoking the permissions as well as the app's auto revoke exemption status. -->              <enum name="disallowed" value="2" />          </attr>      </declare-styleable> diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java index 4b29d59de332..107fe3f3ced5 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java @@ -198,21 +198,6 @@ public class ObjectPoolTests {      }      @Test -    public void testRecycleMultiWindowModeChangeItem() { -        MultiWindowModeChangeItem emptyItem = MultiWindowModeChangeItem.obtain(false, null); -        MultiWindowModeChangeItem item = MultiWindowModeChangeItem.obtain(true, config()); -        assertNotSame(item, emptyItem); -        assertFalse(item.equals(emptyItem)); - -        item.recycle(); -        assertEquals(item, emptyItem); - -        MultiWindowModeChangeItem item2 = MultiWindowModeChangeItem.obtain(true, config()); -        assertSame(item, item2); -        assertFalse(item2.equals(emptyItem)); -    } - -    @Test      public void testRecycleNewIntentItem() {          NewIntentItem emptyItem = NewIntentItem.obtain(null, false);          NewIntentItem item = NewIntentItem.obtain(referrerIntentList(), false); @@ -243,21 +228,6 @@ public class ObjectPoolTests {      }      @Test -    public void testRecyclePipModeChangeItem() { -        PipModeChangeItem emptyItem = PipModeChangeItem.obtain(false, null); -        PipModeChangeItem item = PipModeChangeItem.obtain(true, config()); -        assertNotSame(item, emptyItem); -        assertFalse(item.equals(emptyItem)); - -        item.recycle(); -        assertEquals(item, emptyItem); - -        PipModeChangeItem item2 = PipModeChangeItem.obtain(true, config()); -        assertSame(item, item2); -        assertFalse(item2.equals(emptyItem)); -    } - -    @Test      public void testRecycleResumeActivityItem() {          ResumeActivityItem emptyItem = ResumeActivityItem.obtain(false);          ResumeActivityItem item = ResumeActivityItem.obtain(3, true); diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java index 3766cf72d99e..47f9323a95f9 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java @@ -153,34 +153,6 @@ public class TransactionParcelTests {      }      @Test -    public void testPipModeChange() { -        // Write to parcel -        PipModeChangeItem item = PipModeChangeItem.obtain(true /* isInPipMode */, config()); -        writeAndPrepareForReading(item); - -        // Read from parcel and assert -        PipModeChangeItem result = PipModeChangeItem.CREATOR.createFromParcel(mParcel); - -        assertEquals(item.hashCode(), result.hashCode()); -        assertTrue(item.equals(result)); -    } - -    @Test -    public void testMultiWindowModeChange() { -        // Write to parcel -        MultiWindowModeChangeItem item = MultiWindowModeChangeItem.obtain( -                true /* isInMultiWindowMode */, config()); -        writeAndPrepareForReading(item); - -        // Read from parcel and assert -        MultiWindowModeChangeItem result = -                MultiWindowModeChangeItem.CREATOR.createFromParcel(mParcel); - -        assertEquals(item.hashCode(), result.hashCode()); -        assertTrue(item.equals(result)); -    } - -    @Test      public void testDestroy() {          DestroyActivityItem item = DestroyActivityItem.obtain(true /* finished */,                  135 /* configChanges */); diff --git a/core/tests/utiltests/src/com/android/internal/util/InlinePresentationStyleUtilsTest.java b/core/tests/utiltests/src/com/android/internal/util/InlinePresentationStyleUtilsTest.java index 8e4f38ef15d3..35c56818a108 100644 --- a/core/tests/utiltests/src/com/android/internal/util/InlinePresentationStyleUtilsTest.java +++ b/core/tests/utiltests/src/com/android/internal/util/InlinePresentationStyleUtilsTest.java @@ -16,9 +16,13 @@  package com.android.internal.util; +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.assertTrue; +import android.os.Binder;  import android.os.Bundle;  import androidx.test.filters.SmallTest; @@ -110,4 +114,54 @@ public class InlinePresentationStyleUtilsTest {          bundle2.putInt("KEY", 22);          assertFalse(InlinePresentationStyleUtils.bundleEquals(bundle1, bundle2));      } + +    @Test +    public void testFilterContentTypes_nullOrEmpty() { +        InlinePresentationStyleUtils.filterContentTypes(null); +        InlinePresentationStyleUtils.filterContentTypes(new Bundle()); +    } + +    @Test +    public void testFilterContentTypes_basic() { +        Bundle bundle = new Bundle(); +        bundle.putInt("int", 11); +        bundle.putString("str", "test"); +        bundle.putString("null", null); + +        InlinePresentationStyleUtils.filterContentTypes(bundle); + +        assertEquals(11, bundle.getInt("int")); +        assertEquals("test", bundle.getString("str")); +        assertTrue(bundle.keySet().contains("null")); +    } + +    @Test +    public void testFilterContentTypes_binder_removedBinder() { +        Bundle bundle = new Bundle(); +        bundle.putInt("int", 11); +        bundle.putString("str", "test"); +        bundle.putString("null", null); +        bundle.putBinder("binder", new Binder()); + +        InlinePresentationStyleUtils.filterContentTypes(bundle); + +        assertEquals(11, bundle.getInt("int")); +        assertEquals("test", bundle.getString("str")); +        assertTrue(bundle.keySet().contains("null")); +        assertNull(bundle.getBinder("binder")); +    } + +    @Test +    public void testFilterContentTypes_binderInChild_removedBinder() { +        Bundle child = new Bundle(); +        child.putBinder("binder", new Binder()); +        Bundle bundle = new Bundle(); +        bundle.putBundle("child", child); + +        InlinePresentationStyleUtils.filterContentTypes(bundle); + +        Bundle child2 = bundle.getBundle("child"); +        assertNotNull(child2); +        assertNull(child2.getBinder("binder")); +    }  } diff --git a/packages/CarSystemUI/res/layout/super_notification_shade.xml b/packages/CarSystemUI/res/layout/super_notification_shade.xml index e36d8caa67f3..db71c91ca695 100644 --- a/packages/CarSystemUI/res/layout/super_notification_shade.xml +++ b/packages/CarSystemUI/res/layout/super_notification_shade.xml @@ -44,14 +44,6 @@      </com.android.systemui.statusbar.BackDropView>      <com.android.systemui.statusbar.ScrimView -        android:id="@+id/scrim_for_bubble" -        android:layout_width="match_parent" -        android:layout_height="match_parent" -        android:importantForAccessibility="no" -        sysui:ignoreRightInset="true" -    /> - -    <com.android.systemui.statusbar.ScrimView          android:id="@+id/scrim_behind"          android:layout_width="match_parent"          android:layout_height="match_parent" diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index 7587cc1338f4..7ca0e809143a 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -719,7 +719,7 @@      <!-- Setting Checkbox summary whether to disable Wifi scan throttling [CHAR LIMIT=NONE] -->      <string name="wifi_scan_throttling_summary">Reduces battery drain & improves network performance</string>      <!-- Setting Checkbox title whether to enable WiFi enhanced mac randomization. [CHAR LIMIT=NONE] --> -    <string name="wifi_enhanced_mac_randomization_summary">This toggle affects MAC randomization behavior for client mode only.\nWhen this mode is activated, any networks that have MAC randomization enabled may have their MAC addresses re\u2011randomized during association, depending on when the client last disconnected from the network. Re\u2011randomization does not occur if the device reconnects in 4 hours or less.</string> +    <string name="wifi_enhanced_mac_randomization_summary">When this mode is enabled, this device\u2019s MAC address may change each time it connects to a network that has MAC randomization enabled.</string>      <!-- Label indicating network has been manually marked as metered -->      <string name="wifi_metered_label">Metered</string>      <!-- Label indicating network has been manually marked as unmetered --> diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/ServiceListing.java b/packages/SettingsLib/src/com/android/settingslib/applications/ServiceListing.java index 454d1dce0b2f..bd9e760acfda 100644 --- a/packages/SettingsLib/src/com/android/settingslib/applications/ServiceListing.java +++ b/packages/SettingsLib/src/com/android/settingslib/applications/ServiceListing.java @@ -47,6 +47,7 @@ public class ServiceListing {      private final String mIntentAction;      private final String mPermission;      private final String mNoun; +    private final boolean mAddDeviceLockedFlags;      private final HashSet<ComponentName> mEnabledServices = new HashSet<>();      private final List<ServiceInfo> mServices = new ArrayList<>();      private final List<Callback> mCallbacks = new ArrayList<>(); @@ -54,7 +55,8 @@ public class ServiceListing {      private boolean mListening;      private ServiceListing(Context context, String tag, -            String setting, String intentAction, String permission, String noun) { +            String setting, String intentAction, String permission, String noun, +            boolean addDeviceLockedFlags) {          mContentResolver = context.getContentResolver();          mContext = context;          mTag = tag; @@ -62,6 +64,7 @@ public class ServiceListing {          mIntentAction = intentAction;          mPermission = permission;          mNoun = noun; +        mAddDeviceLockedFlags = addDeviceLockedFlags;      }      public void addCallback(Callback callback) { @@ -125,11 +128,15 @@ public class ServiceListing {          mServices.clear();          final int user = ActivityManager.getCurrentUser(); +        int flags = PackageManager.GET_SERVICES | PackageManager.GET_META_DATA; +        if (mAddDeviceLockedFlags) { +            flags |= PackageManager.MATCH_DIRECT_BOOT_AWARE +                    | PackageManager.MATCH_DIRECT_BOOT_UNAWARE; +        } +          final PackageManager pmWrapper = mContext.getPackageManager();          List<ResolveInfo> installedServices = pmWrapper.queryIntentServicesAsUser( -                new Intent(mIntentAction), -                PackageManager.GET_SERVICES | PackageManager.GET_META_DATA, -                user); +                new Intent(mIntentAction), flags, user);          for (ResolveInfo resolveInfo : installedServices) {              ServiceInfo info = resolveInfo.serviceInfo; @@ -186,6 +193,7 @@ public class ServiceListing {          private String mIntentAction;          private String mPermission;          private String mNoun; +        private boolean mAddDeviceLockedFlags = false;          public Builder(Context context) {              mContext = context; @@ -216,8 +224,19 @@ public class ServiceListing {              return this;          } +        /** +         * Set to true to add support for both MATCH_DIRECT_BOOT_AWARE and +         * MATCH_DIRECT_BOOT_UNAWARE flags when querying PackageManager. Required to get results +         * prior to the user unlocking the device for the first time. +         */ +        public Builder setAddDeviceLockedFlags(boolean addDeviceLockedFlags) { +            mAddDeviceLockedFlags = addDeviceLockedFlags; +            return this; +        } +          public ServiceListing build() { -            return new ServiceListing(mContext, mTag, mSetting, mIntentAction, mPermission, mNoun); +            return new ServiceListing(mContext, mTag, mSetting, mIntentAction, mPermission, mNoun, +                    mAddDeviceLockedFlags);          }      }  } diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp index f63365bcd369..b55d246de65c 100644 --- a/packages/SystemUI/Android.bp +++ b/packages/SystemUI/Android.bp @@ -63,6 +63,8 @@ android_library {          "androidx.lifecycle_lifecycle-extensions",          "androidx.dynamicanimation_dynamicanimation",          "androidx-constraintlayout_constraintlayout", +        "kotlinx-coroutines-android", +        "kotlinx-coroutines-core",          "iconloader_base",          "SystemUI-tags",          "SystemUI-proto", diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/DetailAdapter.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/DetailAdapter.java index f6f8f53c07f2..d43aaf07c6be 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/DetailAdapter.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/DetailAdapter.java @@ -19,6 +19,7 @@ import android.content.Intent;  import android.view.View;  import android.view.ViewGroup; +import com.android.internal.logging.UiEventLogger;  import com.android.systemui.plugins.annotations.ProvidesInterface;  @ProvidesInterface(version = DetailAdapter.VERSION) @@ -44,4 +45,18 @@ public interface DetailAdapter {      default boolean hasHeader() {          return true;      } + +    default UiEventLogger.UiEventEnum openDetailEvent() { +        return INVALID; +    } + +    default UiEventLogger.UiEventEnum closeDetailEvent() { +        return INVALID; +    } + +    default UiEventLogger.UiEventEnum moreSettingsEvent() { +        return INVALID; +    } + +    UiEventLogger.UiEventEnum INVALID = () -> 0;  } diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java index e586c38a286a..aeedc16ffbd4 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java @@ -20,6 +20,7 @@ import android.graphics.drawable.Drawable;  import android.metrics.LogMaker;  import android.service.quicksettings.Tile; +import com.android.internal.logging.InstanceId;  import com.android.systemui.plugins.annotations.DependsOn;  import com.android.systemui.plugins.annotations.ProvidesInterface;  import com.android.systemui.plugins.qs.QSTile.Callback; @@ -81,6 +82,18 @@ public interface QSTile {          return logMaker;      } +    /** +     * Return a string to be used to identify the tile in UiEvents. +     */ +    default String getMetricsSpec() { +        return getClass().getSimpleName(); +    } + +    /** +     * Return an {@link InstanceId} to be used to identify the tile in UiEvents. +     */ +    InstanceId getInstanceId(); +      @ProvidesInterface(version = Callback.VERSION)      public interface Callback {          public static final int VERSION = 1; diff --git a/packages/SystemUI/res/drawable/control_spinner_background.xml b/packages/SystemUI/res/drawable/control_spinner_background.xml index 999a77c71bb2..7a8728d2983c 100644 --- a/packages/SystemUI/res/drawable/control_spinner_background.xml +++ b/packages/SystemUI/res/drawable/control_spinner_background.xml @@ -16,7 +16,7 @@  <layer-list xmlns:android="http://schemas.android.com/apk/res/android"              android:paddingMode="stack" -            android:paddingStart="0dp" +            android:paddingStart="40dp"              android:paddingEnd="40dp"              android:paddingLeft="0dp"              android:paddingRight="0dp"> diff --git a/packages/SystemUI/res/drawable/controls_list_divider_inset.xml b/packages/SystemUI/res/drawable/controls_list_divider_inset.xml new file mode 100644 index 000000000000..ddfa18c53db9 --- /dev/null +++ b/packages/SystemUI/res/drawable/controls_list_divider_inset.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2020 The Android Open Source Project + +     Licensed under the Apache License, Version 2.0 (the "License"); +     you may not use this file except in compliance with the License. +     You may obtain a copy of the License at + +          http://www.apache.org/licenses/LICENSE-2.0 + +     Unless required by applicable law or agreed to in writing, software +     distributed under the License is distributed on an "AS IS" BASIS, +     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +     See the License for the specific language governing permissions and +     limitations under the License. +--> +<inset +    xmlns:android="http://schemas.android.com/apk/res/android" +    android:drawable="@drawable/controls_list_divider" +    android:insetRight="@dimen/control_spinner_padding_horizontal" +    android:insetLeft="@dimen/control_spinner_padding_horizontal" /> diff --git a/packages/SystemUI/res/layout/controls_more_item.xml b/packages/SystemUI/res/layout/controls_more_item.xml index 549874a31acd..f24850e11e46 100644 --- a/packages/SystemUI/res/layout/controls_more_item.xml +++ b/packages/SystemUI/res/layout/controls_more_item.xml @@ -18,6 +18,5 @@      style="@style/Control.MenuItem"      android:layout_width="match_parent"      android:layout_height="wrap_content" -    android:padding="24dp"      android:layout_gravity="start" /> diff --git a/packages/SystemUI/res/layout/controls_spinner_item.xml b/packages/SystemUI/res/layout/controls_spinner_item.xml index 45540f102de1..574aed62ea86 100644 --- a/packages/SystemUI/res/layout/controls_spinner_item.xml +++ b/packages/SystemUI/res/layout/controls_spinner_item.xml @@ -17,7 +17,8 @@      xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="match_parent"      android:layout_height="wrap_content" -    android:padding="8dp"> +    android:paddingVertical="@dimen/control_spinner_padding_vertical" +    android:paddingHorizontal="@dimen/control_spinner_padding_horizontal">    <LinearLayout        android:orientation="horizontal" diff --git a/packages/SystemUI/res/layout/controls_with_favorites.xml b/packages/SystemUI/res/layout/controls_with_favorites.xml index b32320956e26..065ff68774eb 100644 --- a/packages/SystemUI/res/layout/controls_with_favorites.xml +++ b/packages/SystemUI/res/layout/controls_with_favorites.xml @@ -21,14 +21,14 @@        android:layout_height="match_parent"        android:orientation="horizontal"        android:layout_marginTop="@dimen/controls_top_margin" -      android:layout_marginEnd="@dimen/controls_header_side_margin" -      android:layout_marginStart="@dimen/controls_header_side_margin"> +      android:layout_marginBottom="@dimen/controls_header_bottom_margin">      <!-- make sure the header stays centered in the layout by adding a spacer -->      <Space          android:layout_width="@dimen/controls_header_menu_size"          android:layout_height="1dp" /> - +    <!-- need to keep this outer view in order to have a correctly sized anchor +         for the dropdown menu, as well as dropdown background in the right place -->      <LinearLayout          android:id="@+id/controls_header"          android:orientation="horizontal" @@ -38,15 +38,6 @@          android:layout_height="wrap_content"          android:layout_gravity="center"          android:gravity="center"> - -      <ImageView -          android:id="@+id/app_icon" -          android:layout_gravity="center" -          android:layout_width="@dimen/controls_header_app_icon_size" -          android:layout_height="@dimen/controls_header_app_icon_size" -          android:contentDescription="@null" -          android:layout_marginEnd="10dp" /> -        <TextView            style="@style/Control.Spinner.Header"            android:clickable="false" @@ -55,7 +46,6 @@            android:layout_height="wrap_content"            android:layout_gravity="center" />      </LinearLayout> -      <ImageView          android:id="@+id/controls_more"          android:src="@drawable/ic_more_vert" @@ -73,7 +63,6 @@        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical" -      android:paddingTop="30dp"        android:layout_marginLeft="@dimen/global_actions_side_margin"        android:layout_marginRight="@dimen/global_actions_side_margin" />  </merge> diff --git a/packages/SystemUI/res/layout/global_actions_grid_v2.xml b/packages/SystemUI/res/layout/global_actions_grid_v2.xml index fb57b47f63a0..e4e9d2975220 100644 --- a/packages/SystemUI/res/layout/global_actions_grid_v2.xml +++ b/packages/SystemUI/res/layout/global_actions_grid_v2.xml @@ -20,8 +20,6 @@          android:id="@android:id/list"          android:layout_width="match_parent"          android:layout_height="wrap_content" -        android:paddingLeft="@dimen/global_actions_grid_horizontal_padding" -        android:paddingRight="@dimen/global_actions_grid_horizontal_padding"          android:paddingTop="@dimen/global_actions_grid_vertical_padding"          android:paddingBottom="@dimen/global_actions_grid_vertical_padding"          android:orientation="horizontal" diff --git a/packages/SystemUI/res/layout/global_screenshot.xml b/packages/SystemUI/res/layout/global_screenshot.xml index 94a6bc566e73..de19303b4948 100644 --- a/packages/SystemUI/res/layout/global_screenshot.xml +++ b/packages/SystemUI/res/layout/global_screenshot.xml @@ -14,60 +14,89 @@    ~ See the License for the specific language governing permissions and    ~ limitations under the License.    --> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" -             android:layout_width="match_parent" -             android:layout_height="match_parent"> -    <ImageView -        android:id="@+id/global_screenshot_background" -        android:layout_width="match_parent" -        android:layout_height="match_parent" -        android:src="@android:color/black" -        android:visibility="gone"/> +<androidx.constraintlayout.widget.ConstraintLayout +    xmlns:android="http://schemas.android.com/apk/res/android" +    xmlns:app="http://schemas.android.com/apk/res-auto" +    android:id="@+id/global_screenshot_frame" +    android:layout_width="match_parent" +    android:layout_height="match_parent">      <ImageView          android:id="@+id/global_screenshot_actions_background" -        android:layout_height="400dp" +        android:layout_height="@dimen/global_screenshot_bg_protection_height"          android:layout_width="match_parent" -        android:layout_gravity="bottom|center" +        android:alpha="0.0"          android:src="@drawable/screenshot_actions_background_protection" -        android:alpha="0"/> +        app:layout_constraintBottom_toBottomOf="parent" +        app:layout_constraintStart_toStartOf="parent" +        app:layout_constraintEnd_toEndOf="parent"/> +    <ImageView +        android:id="@+id/global_screenshot_actions_container_background" +        android:visibility="gone" +        android:layout_height="0dp" +        android:layout_width="0dp" +        android:elevation="1dp" +        android:background="@drawable/action_chip_container_background" +        android:layout_marginStart="@dimen/screenshot_action_container_margin_horizontal" +        app:layout_constraintBottom_toBottomOf="@+id/global_screenshot_actions_container" +        app:layout_constraintStart_toStartOf="parent" +        app:layout_constraintTop_toTopOf="@+id/global_screenshot_actions_container" +        app:layout_constraintEnd_toEndOf="@+id/global_screenshot_actions_container"/>      <HorizontalScrollView          android:id="@+id/global_screenshot_actions_container" -        android:layout_width="wrap_content" +        android:layout_width="0dp"          android:layout_height="wrap_content" -        android:layout_gravity="bottom|left" -        android:elevation="1dp" -        android:fillViewport="true" -        android:layout_marginHorizontal="@dimen/screenshot_action_container_margin_horizontal" +        android:layout_marginEnd="@dimen/screenshot_action_container_margin_horizontal"          android:layout_marginBottom="@dimen/screenshot_action_container_offset_y" -        android:gravity="center" -        android:paddingLeft="@dimen/screenshot_action_container_padding_left" -        android:paddingRight="@dimen/screenshot_action_container_padding_right" +        android:paddingHorizontal="@dimen/screenshot_action_container_padding_right"          android:paddingVertical="@dimen/screenshot_action_container_padding_vertical" -        android:visibility="gone" +        android:elevation="1dp"          android:scrollbars="none" -        android:background="@drawable/action_chip_container_background"> +        app:layout_constraintHorizontal_bias="0" +        app:layout_constraintWidth_percent="1.0" +        app:layout_constraintWidth_max="wrap" +        app:layout_constraintBottom_toBottomOf="parent" +        app:layout_constraintStart_toEndOf="@+id/global_screenshot_preview" +        app:layout_constraintEnd_toEndOf="parent">          <LinearLayout              android:id="@+id/global_screenshot_actions"              android:layout_width="wrap_content"              android:layout_height="wrap_content"/>      </HorizontalScrollView>      <ImageView -        android:id="@+id/global_screenshot" -        android:layout_width="wrap_content" +        android:id="@+id/global_screenshot_animated_view" +        android:layout_width="match_parent" +        android:layout_height="match_parent" +        android:layout_gravity="center" +        android:visibility="gone" +        android:elevation="@dimen/screenshot_preview_elevation" +        android:background="@drawable/screenshot_rounded_corners" +        android:adjustViewBounds="true"/> +    <ImageView +        android:id="@+id/global_screenshot_preview" +        android:layout_width="@dimen/global_screenshot_x_scale"          android:layout_height="wrap_content"          android:layout_gravity="center" +        android:layout_marginStart="@dimen/screenshot_offset_x" +        android:layout_marginBottom="@dimen/screenshot_offset_y" +        android:scaleType="fitEnd"          android:elevation="@dimen/screenshot_preview_elevation"          android:visibility="gone"          android:background="@drawable/screenshot_rounded_corners"          android:adjustViewBounds="true" -        android:contentDescription="@string/screenshot_preview_description"/> +        android:contentDescription="@string/screenshot_preview_description" +        app:layout_constraintBottom_toBottomOf="parent" +        app:layout_constraintStart_toStartOf="parent"/>      <FrameLayout          android:id="@+id/global_screenshot_dismiss_button"          android:layout_width="@dimen/screenshot_dismiss_button_tappable_size"          android:layout_height="@dimen/screenshot_dismiss_button_tappable_size"          android:elevation="7dp"          android:visibility="gone" -        android:contentDescription="@string/screenshot_dismiss_ui_description"> +        android:contentDescription="@string/screenshot_dismiss_ui_description" +        app:layout_constraintStart_toEndOf="@+id/global_screenshot_preview" +        app:layout_constraintEnd_toEndOf="@+id/global_screenshot_preview" +        app:layout_constraintTop_toTopOf="@+id/global_screenshot_preview" +        app:layout_constraintBottom_toTopOf="@+id/global_screenshot_preview">          <ImageView              android:id="@+id/global_screenshot_dismiss_image"              android:layout_width="match_parent" @@ -79,14 +108,13 @@          android:id="@+id/global_screenshot_flash"          android:layout_width="match_parent"          android:layout_height="match_parent" -        android:src="@android:color/white" +        android:visibility="gone"          android:elevation="@dimen/screenshot_preview_elevation" -        android:visibility="gone"/> +        android:src="@android:color/white"/>      <com.android.systemui.screenshot.ScreenshotSelectorView          android:id="@+id/global_screenshot_selector"          android:layout_width="match_parent"          android:layout_height="match_parent"          android:visibility="gone"          android:pointerIcon="crosshair"/> - -</FrameLayout> +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/packages/SystemUI/res/layout/global_screenshot_action_chip.xml b/packages/SystemUI/res/layout/global_screenshot_action_chip.xml index bd91ddb5f406..e4ae7c1f5827 100644 --- a/packages/SystemUI/res/layout/global_screenshot_action_chip.xml +++ b/packages/SystemUI/res/layout/global_screenshot_action_chip.xml @@ -19,11 +19,11 @@      android:id="@+id/global_screenshot_action_chip"      android:layout_width="wrap_content"      android:layout_height="wrap_content" -    android:layout_marginRight="@dimen/screenshot_action_chip_margin_right" +    android:layout_marginEnd="@dimen/screenshot_action_chip_margin_right"      android:layout_gravity="center"      android:paddingVertical="@dimen/screenshot_action_chip_padding_vertical"      android:background="@drawable/action_chip_background" -    android:alpha="0" +    android:alpha="0.0"      android:gravity="center">      <ImageView          android:id="@+id/screenshot_action_chip_icon" diff --git a/packages/SystemUI/res/layout/hybrid_conversation_notification.xml b/packages/SystemUI/res/layout/hybrid_conversation_notification.xml index e6f27904ee58..21a671cf9d5a 100644 --- a/packages/SystemUI/res/layout/hybrid_conversation_notification.xml +++ b/packages/SystemUI/res/layout/hybrid_conversation_notification.xml @@ -47,14 +47,13 @@          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:singleLine="true" -          android:paddingEnd="8dp"          android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title"      />      <TextView          android:id="@+id/conversation_notification_sender" -        android:layout_width="match_parent" +        android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:singleLine="true"          style="?attr/hybridNotificationTextStyle" diff --git a/packages/SystemUI/res/layout/priority_onboarding_half_shell.xml b/packages/SystemUI/res/layout/priority_onboarding_half_shell.xml index ccb4f7832a62..c27b3a9b3bf4 100644 --- a/packages/SystemUI/res/layout/priority_onboarding_half_shell.xml +++ b/packages/SystemUI/res/layout/priority_onboarding_half_shell.xml @@ -30,7 +30,6 @@          android:layout_width="@dimen/qs_panel_width"          android:layout_height="wrap_content"          android:paddingTop="16dp" -        android:paddingBottom="16dp"          android:paddingStart="16dp"          android:paddingEnd="16dp"          android:orientation="vertical" @@ -44,7 +43,10 @@              android:id="@+id/show_at_top_tip"              android:layout_width="match_parent"              android:layout_height="wrap_content" -            android:padding="4dp" +            android:paddingTop="8dp" +            android:paddingBottom="8dp" +            android:paddingStart="4dp" +            android:paddingEnd="4dp"              android:orientation="horizontal"              >              <ImageView @@ -58,13 +60,13 @@              <TextView                  android:id="@+id/show_at_top_text"                  android:layout_width="wrap_content" -                android:layout_height="48dp" +                android:layout_height="wrap_content"                  android:paddingStart="16dp"                  android:paddingEnd="16dp"                  android:gravity="center_vertical|start"                  android:textSize="15sp"                  android:ellipsize="end" -                android:maxLines="1" +                android:maxLines="2"                  android:text="@string/priority_onboarding_show_at_top_text"                  style="@style/TextAppearance.NotificationInfo"                  /> @@ -75,7 +77,10 @@              android:id="@+id/show_avatar_tip"              android:layout_width="match_parent"              android:layout_height="wrap_content" -            android:padding="4dp" +            android:paddingTop="8dp" +            android:paddingBottom="8dp" +            android:paddingStart="4dp" +            android:paddingEnd="4dp"              android:orientation="horizontal"              >              <ImageView @@ -89,13 +94,13 @@              <TextView                  android:id="@+id/avatar_text"                  android:layout_width="wrap_content" -                android:layout_height="48dp" +                android:layout_height="wrap_content"                  android:paddingStart="16dp"                  android:paddingEnd="16dp"                  android:gravity="center_vertical|start"                  android:textSize="15sp"                  android:ellipsize="end" -                android:maxLines="1" +                android:maxLines="2"                  android:text="@string/priority_onboarding_show_avatar_text"                  style="@style/TextAppearance.NotificationInfo"                  /> @@ -108,7 +113,10 @@              android:id="@+id/floating_bubble_tip"              android:layout_width="match_parent"              android:layout_height="wrap_content" -            android:padding="4dp" +            android:paddingTop="8dp" +            android:paddingBottom="8dp" +            android:paddingStart="4dp" +            android:paddingEnd="4dp"              android:orientation="horizontal"              > @@ -123,13 +131,13 @@              <TextView                  android:id="@+id/bubble_text"                  android:layout_width="wrap_content" -                android:layout_height="48dp" +                android:layout_height="wrap_content"                  android:paddingStart="16dp"                  android:paddingEnd="16dp"                  android:gravity="center_vertical|start"                  android:textSize="15sp"                  android:ellipsize="end" -                android:maxLines="1" +                android:maxLines="2"                  android:text="@string/priority_onboarding_appear_as_bubble_text"                  style="@style/TextAppearance.NotificationInfo"                  /> @@ -140,7 +148,10 @@              android:id="@+id/ignore_dnd_tip"              android:layout_width="match_parent"              android:layout_height="wrap_content" -            android:padding="4dp" +            android:paddingTop="8dp" +            android:paddingBottom="8dp" +            android:paddingStart="4dp" +            android:paddingEnd="4dp"              android:orientation="horizontal"              > @@ -155,13 +166,13 @@              <TextView                  android:id="@+id/dnd_text"                  android:layout_width="wrap_content" -                android:layout_height="48dp" +                android:layout_height="wrap_content"                  android:paddingStart="16dp"                  android:paddingEnd="16dp"                  android:gravity="center_vertical|start"                  android:textSize="15sp"                  android:ellipsize="end" -                android:maxLines="1" +                android:maxLines="2"                  android:text="@string/priority_onboarding_ignores_dnd_text"                  style="@style/TextAppearance.NotificationInfo"                  /> @@ -173,7 +184,8 @@              android:id="@+id/button_container"              android:layout_width="match_parent"              android:layout_height="wrap_content" -            android:padding="4dp" +            android:paddingStart="4dp" +            android:paddingEnd="4dp"              android:orientation="horizontal"              >              <TextView diff --git a/packages/SystemUI/res/layout/super_notification_shade.xml b/packages/SystemUI/res/layout/super_notification_shade.xml index dc070cbaae26..d322e0905ef6 100644 --- a/packages/SystemUI/res/layout/super_notification_shade.xml +++ b/packages/SystemUI/res/layout/super_notification_shade.xml @@ -44,14 +44,6 @@      </com.android.systemui.statusbar.BackDropView>      <com.android.systemui.statusbar.ScrimView -        android:id="@+id/scrim_for_bubble" -        android:layout_width="match_parent" -        android:layout_height="match_parent" -        android:importantForAccessibility="no" -        sysui:ignoreRightInset="true" -        /> - -    <com.android.systemui.statusbar.ScrimView          android:id="@+id/scrim_behind"          android:layout_width="match_parent"          android:layout_height="match_parent" diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 73b293fc0901..c9aa9db24e37 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Kennisgewing is toegemaak."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Kennisgewingskerm."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Vinnige instellings."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Sluitskerm."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Skermopname"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Begin"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Toestel"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Swiep op om programme te wissel"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Sleep regs om programme vinnig te wissel"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Wissel oorsig"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Verskyn boaan die gespreksafdeling en lyk soos \'n borrel."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Instellings"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Prioriteit"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> steun nie gesprekspesifieke-instellings nie"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Geen onlangse borrels nie"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Onlangse borrels en borrels wat toegemaak is, sal hier verskyn"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Hierdie kennisgewings kan nie gewysig word nie."</string> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index bc271198332d..50b215ea1040 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"ማሳወቂያ ተወግዷል።"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"የማሳወቂያ ጥላ።"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ፈጣን ቅንብሮች።"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ማያ ገጽ ቆልፍ።"</string> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 564ba0d7b86c..9c44fc8d3049 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"تم تجاهل الإشعار."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"مركز الإشعارات."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"الإعدادات السريعة."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"شاشة القفل."</string> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index d9f8b7747d7c..ee35f578d521 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"জাননী অগ্ৰাহ্য কৰা হৈছে।"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"জাননী পেনেল।"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ক্ষিপ্ৰ ছেটিংসমূহ।"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"বন্ধ স্ক্ৰীণ।"</string> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 50d495395915..c36ca0ba0fa0 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Bildiriş uzaqlaşdırıldı."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bildiriş kölgəsi."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Tez ayarlar."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ekranı kilidləyin."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Ekran yazması"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Başlayın"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Dayandırın"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Cihaz"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Tətbiqi dəyişmək üçün yuxarı sürüşdürün"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Tətbiqləri cəld dəyişmək üçün sağa çəkin"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"İcmala Keçin"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Söhbət bölməsinin yuxarısında göstərilir və yumrucuq kimi görünür."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ayarlar"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> söhbətə aid ayarları dəstəkləmir"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Yumrucuqlar yoxdur"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Son yumrucuqlar və buraxılmış yumrucuqlar burada görünəcək"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirişlər dəyişdirilə bilməz."</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index d290521ec123..cad90dfa4481 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Obaveštenje je odbačeno."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Oblačić je odbačen."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Prozor sa obaveštenjima."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Brza podešavanja."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Zaključan ekran."</string> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index ca3f2dbd7412..064ee1cf3bea 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Апавяшчэнне прапушчана."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Цень апавяшчэння.."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Хуткія налады."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Экран блакіроўкі."</string> @@ -434,8 +436,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Запіс экрана"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Пачаць"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Спыніць"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Прылада"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Правядзіце ўверх, каб пераключыць праграмы"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Каб хутка пераключыцца паміж праграмамі, перацягніце ўправа"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Уключыць/выключыць агляд"</string> @@ -720,8 +721,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Паказваецца ўверсе раздзела размоў у выглядзе ўсплывальнага апавяшчэння."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Налады"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Прыярытэт"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> не падтрымлівае пэўныя налады размоў"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Няма нядаўніх усплывальных апавяшчэнняў"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Нядаўнія і адхіленыя ўсплывальныя апавяшчэнні будуць паказаны тут"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Гэтыя апавяшчэнні нельга змяніць."</string> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 7108f792163e..f25e3533c802 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Известието е отхвърлено."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Падащ панел с известия."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Бързи настройки."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Заключване на екрана."</string> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index a2a8689179e3..27b42f0710c3 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"বিজ্ঞপ্তি খারিজ করা হয়েছে৷"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"বিজ্ঞপ্তি শেড৷"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"দ্রুত সেটিংস৷"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"লক স্ক্রিন।"</string> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 91b19d72e615..573fda0ecc89 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Obavještenje je uklonjeno."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Oblačić je odbačen."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Obavještenja sa sjenčenjem."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Brze postavke."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Zaključan ekran."</string> @@ -1034,8 +1035,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Izaberite kontrole za pristup iz menija napajanja"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Držite i prevucite da preuredite kontrole"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"Sve kontrole su uklonjene"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Promjene nisu sačuvane"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"Učitavanje liste svih kontrola nije uspjelo."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Dodajte u kontrole uređaja"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index cb4d21574e67..456045ece821 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notificació omesa."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Àrea de notificacions"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configuració ràpida"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantalla de bloqueig"</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Gravació de pantalla"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Inicia"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Atura"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Dispositiu"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Llisca cap amunt per canviar d\'aplicació"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arrossega el dit cap a la dreta per canviar ràpidament d\'aplicació"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Activa o desactiva Aplicacions recents"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Es mostra com a bombolla a la part superior de la secció de converses."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Configuració"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Prioritat"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> no admet opcions de configuració específiques de converses"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No hi ha bombolles recents"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Les bombolles recents i les ignorades es mostraran aquí"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Aquestes notificacions no es poden modificar."</string> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 3b0f340b9718..3896b71dde60 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Oznámení je zavřeno."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Panel oznámení."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Rychlé nastavení."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Obrazovka uzamčení"</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 2bc0e25f5210..7d02ac295157 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notifikationen er annulleret."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notifikationspanel."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Kvikmenu."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Låseskærm."</string> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 3efafecd5585..18ccfa1fbf7c 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Benachrichtigung geschlossen"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Benachrichtigungsleiste"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Schnelleinstellungen"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Sperrbildschirm"</string> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index f9ac3f21dd8c..4864c594fa33 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Η ειδοποίηση έχει απορριφθεί."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Πλαίσιο σκίασης ειδοποιήσεων."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Γρήγορες ρυθμίσεις."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Οθόνη κλειδώματος"</string> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index bf276a97ce1d..296d974023b0 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notification dismissed."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Bubble dismissed."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string> @@ -1026,8 +1027,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index fccdffef9134..4e85aad7c87b 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notification dismissed."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Bubble dismissed."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string> @@ -1026,8 +1027,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index bf276a97ce1d..296d974023b0 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notification dismissed."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Bubble dismissed."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string> @@ -1026,8 +1027,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index bf276a97ce1d..296d974023b0 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notification dismissed."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Bubble dismissed."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string> @@ -1026,8 +1027,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index 74dfa34d4b85..69a226c23006 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notification dismissed."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Bubble dismissed."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 97ead2c95982..1c903517d48a 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notificación ignorada"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Pantalla de notificaciones"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configuración rápida"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantalla de bloqueo"</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Grabar pantalla"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Detener"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Dispositivo"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Desliza el dedo hacia arriba para cambiar de app"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arrastra a la derecha para cambiar aplicaciones rápidamente"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Ocultar o mostrar Recientes"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Aparece como una burbuja en la parte superior de la sección de la conversación."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Configuración"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Prioridad"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> no admite opciones de configuración específicas de conversaciones"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No hay burbujas recientes"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Las burbujas recientes y las que se descartaron aparecerán aquí"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"No se pueden modificar estas notificaciones."</string> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index f1b2b37692f4..271268187da2 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notificación ignorada"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Pantalla de notificaciones"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Ajustes rápidos"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantalla de bloqueo."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Grabación de la pantalla"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Inicio"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Detener"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Dispositivo"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Desliza el dedo hacia arriba para cambiar de aplicación"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arrastra hacia la derecha para cambiar rápidamente de aplicación"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Mostrar u ocultar aplicaciones recientes"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Aparece en la parte superior de la sección de una conversación en forma de burbuja."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ajustes"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Prioridad"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> no es compatible con ajustes específicos de conversaciones"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No hay burbujas recientes"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Las burbujas recientes y las cerradas aparecerán aquí"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Estas notificaciones no se pueden modificar."</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 6fe4bf28ea1a..8b5c1a46a7bd 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Märguandest on loobutud."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Märguande vari."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Kiirseaded."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Kuva lukustamine."</string> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 30e4eec50abf..3a7b40b54351 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Jakinarazpena baztertu da."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Jakinarazpenen panela."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Ezarpen bizkorrak."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantaila blokeatzeko aukera."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Pantaila-grabaketa"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Hasi"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Gelditu"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Gailua"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Egin gora aplikazioa aldatzeko"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arrastatu eskuinera aplikazioa azkar aldatzeko"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Aldatu ikuspegi orokorra"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Elkarrizketen atalaren goialdean agertzen da, burbuila gisa."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ezarpenak"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Lehentasuna"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak ez du onartzen elkarrizketen berariazko ezarpenik"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Ez dago azkenaldiko burbuilarik"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Azken burbuilak eta baztertutakoak agertuko dira hemen"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Jakinarazpen horiek ezin dira aldatu."</string> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index a65cc3700c4f..f60393c11249 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"اعلان ردشد."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"مجموعه اعلان."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"تنظیمات سریع."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"صفحه قفل."</string> @@ -1048,7 +1050,7 @@      <string name="controls_error_timeout" msgid="794197289772728958">"غیرفعال، برنامه را بررسی کنید"</string>      <string name="controls_error_retryable" msgid="864025882878378470">"خطا، درحال تلاش مجدد…"</string>      <string name="controls_error_removed" msgid="6299213591234723805">"دستگاه برداشته شد"</string> -    <string name="controls_error_generic" msgid="352500456918362905">"وضعیت بارگیری نشد"</string> +    <string name="controls_error_generic" msgid="352500456918362905">"وضعیت بار نشد"</string>      <string name="controls_error_failed" msgid="960228639198558525">"خطا، دوباره امتحان کنید"</string>      <string name="controls_in_progress" msgid="4421080500238215939">"درحال انجام"</string>      <string name="controls_added_tooltip" msgid="4842812921719153085">"برای دیدن کنترلهای جدید، دکمه روشن/خاموش را پایین نگه دارید"</string> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 56a43cffea73..5ba522a8f05b 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Ilmoitus hylätty."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Ilmoitusalue."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Pika-asetukset."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lukitse näyttö."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Näytön tallentaminen"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Aloita"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Lopeta"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Laite"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Vaihda sovellusta pyyhkäisemällä ylös"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Vaihda sovellusta nopeasti vetämällä oikealle"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Näytä/piilota viimeisimmät"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Näkyy keskusteluosion yläosassa kuplana"</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Asetukset"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Tärkeä"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei tue keskustelukohtaisia asetuksia"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Ei viimeaikaisia kuplia"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Viimeaikaiset ja äskettäin ohitetut kuplat näkyvät täällä"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Näitä ilmoituksia ei voi muokata"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 9376fea4fd18..38df6bb93530 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notification masquée"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Volet des notifications"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Paramètres rapides"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Écran de verrouillage"</string> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index e6bc8093606c..9721a865af5b 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notification masquée"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Volet des notifications"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Paramètres rapides"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Écran de verrouillage"</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Enregistrement de l\'écran"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Démarrer"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Arrêter"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Appareil"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Balayer l\'écran vers le haut pour changer d\'application"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Déplacer vers la droite pour changer rapidement d\'application"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Activer/Désactiver l\'aperçu"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"S\'affiche en haut de la section des conversations et apparaît sous forme de bulle."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Paramètres"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Prioritaire"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> n\'est pas compatible avec les paramètres de conversation"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Aucune bulle récente"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Les bulles récentes et ignorées s\'afficheront ici"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Impossible de modifier ces notifications."</string> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index f9e65e3702d9..de290e07ccb2 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notificación rexeitada"</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Ignorouse a burbulla."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Panel despregable"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configuración rápida"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantalla de bloqueo."</string> @@ -430,8 +431,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Gravación da pantalla"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Deter"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Dispositivo"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Pasar o dedo cara arriba para cambiar de aplicación"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arrastra cara á dereita para cambiar de aplicacións rapidamente"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Activar/desactivar Visión xeral"</string> @@ -714,8 +714,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Móstrase na parte superior da sección da conversa en forma de burbulla."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Configuración"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Prioridade"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> non admite opcións de configuración específicas para conversas"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Non hai burbullas recentes"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"As burbullas recentes e ignoradas aparecerán aquí."</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Estas notificacións non se poden modificar."</string> @@ -1028,8 +1027,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Escolle os controis para acceder desde o menú de acendido"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Para reorganizar os controis, mantenos premidos e arrástraos"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"Quitáronse todos os controis"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Non se gardaron os cambios"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"Non se puido cargar a lista de todos os controis."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outra"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Engadir ao control de dispositivos"</string> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index b9b237213bb8..bf1cc51a9bef 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"સૂચના કાઢી નાખી."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"નોટિફિકેશન શેડ."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ઝડપી સેટિંગ્સ."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"લૉક સ્ક્રીન."</string> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index ac89c0cefdd4..df76774ecb2f 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -257,6 +257,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"सूचना खारिज की गई."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"सूचना शेड."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"त्वरित सेटिंग."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"लॉक स्क्रीन."</string> @@ -432,8 +434,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"स्क्रीन रिकॉर्ड"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"शुरू करें"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"रोकें"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"डिवाइस"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"ऐप्लिकेशन बदलने के लिए ऊपर स्वाइप करें"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"ऐप्लिकेशन को झटपट स्विच करने के लिए उसे दाईं ओर खींचें और छोड़ें"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"खास जानकारी टॉगल करें"</string> @@ -716,8 +717,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"यह बातचीत सेक्शन में सबसे ऊपर और एक बबल के तौर पर दिखती है."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"सेटिंग"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"प्राथमिकता"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> में हर बातचीत के लिए अलग सेटिंग तय नहीं की जा सकती"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"हाल ही के बबल्स मौजूद नहीं हैं"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"हाल ही के बबल्स और हटाए गए बबल्स यहां दिखेंगे"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"ये सूचनाएं नहीं बदली जा सकती हैं."</string> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 6e77cd107b07..0bf983c9d379 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Obavijest je odbačena."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Zaslon obavijesti."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Brze postavke."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Zaključavanje zaslona."</string> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 34cc36beec92..7f250d9a37e0 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Értesítés elvetve."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Értesítési felület."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Gyorsbeállítások."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lezárási képernyő."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Képernyő rögzítése"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Kezdés"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Leállítás"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Eszköz"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Váltás az alkalmazások között felfelé csúsztatással"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Húzza jobbra az ujját az alkalmazások közötti gyors váltáshoz"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Áttekintés be- és kikapcsolása"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"A beszélgetések szakaszának tetején, buborékként jelenik meg."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Beállítások"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Prioritás"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás nem támogatja a beszélgetésspecifikus beállításokat"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nincsenek buborékok a közelmúltból"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"A legutóbbi és az elvetett buborékok itt jelennek majd meg"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ezeket az értesítéseket nem lehet módosítani."</string> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index a87761ae5b55..b6e101f24744 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Ծանուցումը անտեսվեց:"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Ծանուցումների վահանակ:"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Արագ կարգավորումներ:"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Էկրանի կողպում:"</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Էկրանի ձայնագրում"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Սկսել"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Կանգնեցնել"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Սարք"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Սահեցրեք վերև՝ մյուս հավելվածին անցնելու համար"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Քաշեք աջ՝ հավելվածների միջև անցնելու համար"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Միացնել/անջատել համատեսքը"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Ցուցադրվում է «Խոսակցություններ» բաժնում և հայտնվում է ամպիկի տեսքով։"</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Կարգավորումներ"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Կարևոր"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը չի աջակցում զրույցի հատուկ կարգավորումները"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Վերջին ամպիկներ չկան"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Այստեղ կցուցադրվեն վերջերս օգտագործված և փակված ամպիկները, որոնք կկարողանաք հեշտությամբ վերաբացել"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Այս ծանուցումները չեն կարող փոփոխվել:"</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 82dd783c2695..b441fe858ef6 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notifikasi disingkirkan."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bayangan pemberitahuan."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Setelan cepat."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Layar kunci."</string> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 3762faca11e5..4b160d4bc185 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Tilkynningu lokað."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Tilkynningasvæði."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Flýtistillingar."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lásskjár."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Skjáupptaka"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Hefja"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stöðva"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Tæki"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Strjúktu upp til að skipta á milli forrita"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Dragðu til hægri til að skipta hratt á milli forrita"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Kveikja/slökkva á yfirliti"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Sýnt sem blaðra efst í samtali."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Áfram"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Forgangur"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> styður ekki stillingar fyrir einstök samtöl"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Engar nýlegar blöðrur"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Nýlegar blöðrur og blöðrur sem þú hefur lokað birtast hér"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ekki er hægt að breyta þessum tilkynningum."</string> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 3e34544eaa99..aacd002ab14f 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notifica eliminata."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Area notifiche."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Impostazioni rapide."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Schermata di blocco."</string> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index 07e1c1c951f3..ca40e2da14cb 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"התראה נדחתה."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"לוח התראות."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"הגדרות מהירות."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"מסך נעילה."</string> @@ -434,8 +436,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"הקלטת המסך"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"התחלה"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"עצירה"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"מכשיר"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"יש להחליק מעלה כדי להחליף אפליקציות"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"יש לגרור ימינה כדי לעבור במהירות בין אפליקציות"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"החלפת מצב של מסכים אחרונים"</string> @@ -720,8 +721,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"מוצגת בחלק העליון של קטע השיחה ומופיעה כבועה."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"הגדרות"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"עדיפות"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> לא תומכת בהגדרות ספציפיות לשיחות"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"אין בועות מהזמן האחרון"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"בועות אחרונות ובועות שנסגרו יופיעו כאן"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"לא ניתן לשנות את ההתראות האלה."</string> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 7ced5fd3cc20..20f46e57cb7d 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"通知が削除されました。"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"通知シェード"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"クイック設定"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ロック画面"</string> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index 31983033bbee..242ee8d76a07 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"შეტყობინება წაიშალა."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"ბუშტი დაიხურა."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"შეტყობინებების ფარდა"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"სწრაფი პარამეტრები"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ეკრანის დაბლოკვა."</string> @@ -1026,8 +1027,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"აირჩიეთ მართვის საშუალებები ელკვების მენიუდან"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"მართვის საშუალებების გადაწყობა შეგიძლიათ მათი ჩავლებით გადატანით"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"მართვის ყველა საშუალება ამოიშალა"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ცვლილებები არ შენახულა"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"მართვის ყველა საშუალების სია ვერ ჩაიტვირთა."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"სხვა"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"მოწყობილ. მართვის საშუალებებში დამატება"</string> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index 537aa3630b4b..4af33051af1e 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Хабар алынып тасталды."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Хабарландыру тақтасы"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Жылдам параметрлер."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Бекіту экраны."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Экранды жазу"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Бастау"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Тоқтату"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Құрылғы"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Қолданбалар арасында ауысу үшін жоғары сырғытыңыз"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Қолданбаларды жылдам ауыстырып қосу үшін оңға қарай сүйреңіз"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Шолуды қосу/өшіру"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Сөйлесу бөлімінің жоғарғы жағында және қалқыма хабар түрінде көрсетіледі."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Параметрлер"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Маңыздылығы"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасында чаттың арнайы параметрлеріне қолдау көрсетілмейді."</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Жақындағы қалқыма хабарлар жоқ"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Жақында ашылған және жабылған қалқыма хабарлар осы жерде көрсетіледі."</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Бұл хабарландыруларды өзгерту мүмкін емес."</string> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 97a1c36b6aee..238189547bd0 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"បានបដិសេធការជូនដំណឹង"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ពណ៌ការជូនដំណឹង"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ការកំណត់រហ័ស។"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ចាក់សោអេក្រង់។"</string> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 7fe7d46e1b0e..6ab3e2d6629f 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"ಅಧಿಸೂಚನೆ ವಜಾಗೊಂಡಿದೆ."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ಅಧಿಸೂಚನೆಯ ಛಾಯೆ."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳು."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ಲಾಕ್ ಪರದೆ."</string> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index e27f208e55e8..441c1aa712be 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"알림이 제거되었습니다."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"알림 세부정보"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"빠른 설정"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"화면을 잠급니다."</string> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 93deca220b9e..8ff17e145c5e 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Эскертме өчүрүлдү."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Билдирмелер тактасы."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Тез тууралоолор."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Кулпуланган экран."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Экранды жаздыруу"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Баштадык"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Токтотуу"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Түзмөк"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Башка колдонмого которулуу үчүн,, өйдө сүрүңүз"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Колдонмолорду тез которуштуруу үчүн, оңго сүйрөңүз"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Сереп салууну өчүрүү/күйгүзүү"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Жазышуу бөлүмүнүн жогорку жагында көрсөтүлүп, калкып чыкма билдирме катары пайда болот."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Жөндөөлөр"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Маанилүүлүгү"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> жазышууга тийиштүү жөндөөлөрдү колдоого албайт"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Акыркы калкып чыкма билдирмелер жок"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Кайра жөнөтүлгөн жана жабылган калкып чыкма билдирмелер ушул жерде көрүнөт"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Бул билдирмелерди өзгөртүүгө болбойт."</string> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 38db899378c7..1f1a6efd18bc 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"ປິດການແຈ້ງເຕືອນແລ້ວ."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"ປິດ Bubble ໄສ້ແລ້ວ."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ໜ້າຈໍແຈ້ງເຕືອນ."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ການຕັ້ງຄ່າດ່ວນ."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ລັອກໜ້າຈໍ."</string> @@ -1026,8 +1027,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"ເລືອກການຄວບຄຸມເພື່ອເຂົ້າເຖິງຈາກເມນູເປີດປິດ"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ກົດຄ້າງໄວ້ເພື່ອຈັດຮຽງການຄວບຄຸມຄືນໃໝ່"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"ລຶບການຄວບຄຸມທັງໝົດອອກແລ້ວ"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ບໍ່ໄດ້ບັນທຶກການປ່ຽນແປງໄວ້"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"ບໍ່ສາມາດໂຫຼດລາຍຊື່ການຄວບຄຸມທັງໝົດໄດ້."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ອື່ນໆ"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"ເພີ່ມໃສ່ການຄວບຄຸມອຸປະກອນ"</string> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 277814fd4099..e48194fb29bf 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Pranešimo atsisakyta."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Pranešimų gaubtas."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Spartieji nustatymai."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Užrakinimo ekranas."</string> @@ -434,8 +436,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Ekrano įrašas"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Pradėti"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stabdyti"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Įrenginys"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Perbraukite aukštyn, kad perjungtumėte programas"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Vilkite į dešinę, kad greitai perjungtumėte programas"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Perjungti apžvalgą"</string> @@ -720,8 +721,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Rodoma pokalbio skilties viršuje kaip burbulas."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Nustatymai"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Prioritetas"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ nepalaiko konkrečių pokalbių nustatymų"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nėra naujausių burbulų"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Naujausi ir atsisakyti burbulus bus rodomi čia"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Šių pranešimų keisti negalima."</string> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 46df9b90c9da..676ced8e77f4 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Paziņojums netiek rādīts."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Paziņojumu panelis"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Ātrie iestatījumi"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Bloķēšanas ekrāns."</string> @@ -432,8 +434,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Ekrāna ierakstīšana"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Sākt"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Apturēt"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Ierīce"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Velciet augšup, lai pārslēgtu lietotnes"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Lai ātri pārslēgtu lietotnes, velciet pa labi"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Pārskata pārslēgšana"</string> @@ -717,8 +718,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Tiek rādīta sarunas sadaļas augšdaļā kā burbulis."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Iestatījumi"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Prioritārs"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"Lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g> netiek atbalstīti atsevišķu sarunu iestatījumi."</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nav nesen aizvērtu burbuļu"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Šeit būs redzami nesen rādītie burbuļi un aizvērtie burbuļi"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Šos paziņojumus nevar modificēt."</string> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index bf688baeb2d3..9012b414fb6a 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Известувањето е отфрлено."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Балончето е отфрлено."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Панел за известување"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Брзи поставки."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Заклучи екран."</string> @@ -1026,8 +1027,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Изберете ги контролите до кои ќе пристапувате од менито за вклучување"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Задржете и влечете за да ги преуредите контролите"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"Сите контроли се отстранети"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Промените не се зачувани"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"Не можеше да се вчита списокот со сите контроли."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Друга"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Додајте во контроли за уредите"</string> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index b4715ca1d1a1..c13359918a10 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"അറിയിപ്പ് നിരസിച്ചു."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"അറിയിപ്പ് ഷെയ്ഡ്."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ദ്രുത ക്രമീകരണങ്ങൾ."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ലോക്ക് സ്ക്രീൻ."</string> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index bf0b7c8bb6a9..ab90b0433a89 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Мэдэгдэл хаагдсан."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Мэдэгдлийн хураангуй самбар"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Шуурхай тохиргоо."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Дэлгэц түгжих."</string> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index 6868a7f76054..516ff805d7ce 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"सूचना डिसमिस केल्या."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"सूचना शेड."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"द्रुत सेटिंग्ज."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"लॉक स्क्रीन."</string> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index baaccf3af1ee..f61b6cda6ab2 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Pemberitahuan diketepikan."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bidai pemberitahuan."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Tetapan pantas."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Kunci skrin."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Rakam Skrin"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Mula"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Berhenti"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Peranti"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Leret ke atas untuk menukar apl"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Seret ke kanan untuk beralih apl dengan pantas"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Togol Ikhtisar"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Ditunjukkan di sebelah atas bahagian perbualan dan muncul sebagai gelembung."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Tetapan"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Keutamaan"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak menyokong tetapan khusus perbualan"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Tiada gelembung terbaharu"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Gelembung baharu dan gelembung yang diketepikan akan dipaparkan di sini"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Pemberitahuan ini tidak boleh diubah suai."</string> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 4a4e96ae2643..2615e61ce81e 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"အကြောင်းကြားချက်ကိုဖယ်ရှားပြီး"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"အကြောင်းကြားစာအကွက်"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"အမြန်လုပ် အပြင်အဆင်"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"မျက်နှာပြင် သော့ပိတ်ရန်"</string> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index dc749ecf6823..eef40161244f 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Varselet ble skjult."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Varselskygge."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Hurtiginnstillinger."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Låseskjerm."</string> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 04fff8517566..2d730429567d 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"सूचना खारेज।"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"सूचना कक्ष।"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"द्रुत सेटिङहरू"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"स्क्रीन बन्द गर्नुहोस्।"</string> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index 7376861ca5d6..a6e609514db3 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Melding verwijderd."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Meldingenpaneel."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Snelle instellingen."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Vergrendelingsscherm."</string> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 08afd1fc4a58..b540daa6a70d 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"ବିଜ୍ଞପ୍ତି ଖାରଜ କରାଗଲା।"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ବିଜ୍ଞପ୍ତି ଶେଡ୍।"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ଦ୍ରୁତ ସେଟିଂସ୍।"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ଲକ୍ ସ୍କ୍ରୀନ୍।"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 60846c60dc29..ccb1923ee6f0 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"ਸੂਚਨਾ ਰੱਦ ਕੀਤੀ।"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ਸੂਚਨਾ ਸ਼ੇਡ।"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ।"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">" ਲਾਕ  ਸਕ੍ਰੀਨ।"</string> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index a18df6f224fe..0e508fc76c8c 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Zamknięto powiadomienie."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Zamknięto dymek"</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Obszar powiadomień."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Szybkie ustawienia."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ekran blokady."</string> @@ -434,8 +435,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Nagrywanie ekranu"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Rozpocznij"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Zatrzymaj"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Urządzenie"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Przesuń w górę, by przełączyć aplikacje"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Szybko przeciągnij w prawo, by przełączyć aplikacje"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Przełącz Przegląd"</string> @@ -720,8 +720,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Wyświetla się u góry sekcji rozmów i ma postać dymku."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ustawienia"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Priorytet"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> nie obsługuje ustawień dotyczących rozmowy"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Brak ostatnich dymków"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Tutaj będą pojawiać się ostatnie i odrzucone dymki"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Tych powiadomień nie można zmodyfikować."</string> @@ -1040,8 +1039,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Wybierz elementy sterujące dostępne w menu zasilania"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Przytrzymaj i przeciągnij, aby przestawić elementy sterujące"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"Usunięto wszystkie elementy sterujące"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Zmiany nie zostały zapisane"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"Nie udało się wczytać listy elementów sterujących."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Inne"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Dodaj do sterowania urządzeniami"</string> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 6e97aa6ea1cd..c22a27725f06 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notificação dispensada."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Balão dispensado."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Aba de notificações."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configurações rápidas."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Tela de bloqueio."</string> @@ -1026,8 +1027,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Escolha os controles para acessar pelo menu do botão liga/desliga"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantenha a tela pressionada e arraste para reorganizar os controles"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controles foram removidos"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"As mudanças não foram salvas"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"Não foi possível carregar a lista de controles."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outro"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Adicionar aos controles do dispositivo"</string> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index cc2baad4447b..7441982ffe3c 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notificação ignorada."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Balão ignorado."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Painel de notificações."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Definições rápidas."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ecrã de bloqueio."</string> @@ -430,8 +431,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Gravação de ecrã"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Parar"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Dispositivo"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Deslizar rapidamente para cima para mudar de aplicação"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arraste para a direita para mudar rapidamente de aplicação."</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Ativar/desativar Vista geral"</string> @@ -714,8 +714,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Aparece na parte superior da secção de conversas e surge como um balão."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Definições"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Prioridade"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> não suporta definições específicas de conversas."</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nenhum balão recente"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Os balões recentes e ignorados vão aparecer aqui."</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar estas notificações."</string> @@ -1028,8 +1027,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Escolha os controlos a que pretende aceder a partir do menu ligar/desligar."</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Toque sem soltar e arraste para reorganizar os controlos."</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controlos foram removidos."</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Alterações não guardadas."</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"Não foi possível carregar a lista dos controlos."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outro"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Adicione aos controlos de dispositivos"</string> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 6e97aa6ea1cd..c22a27725f06 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notificação dispensada."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Balão dispensado."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Aba de notificações."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configurações rápidas."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Tela de bloqueio."</string> @@ -1026,8 +1027,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Escolha os controles para acessar pelo menu do botão liga/desliga"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantenha a tela pressionada e arraste para reorganizar os controles"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controles foram removidos"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"As mudanças não foram salvas"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"Não foi possível carregar a lista de controles."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outro"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Adicionar aos controles do dispositivo"</string> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index fed444139c08..6b167357f18e 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Notificarea a fost închisă."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Fereastră pentru notificări."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Setări rapide."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ecranul de blocare."</string> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index f7638ce50c4d..24ef2970c26b 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Уведомление закрыто"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Панель уведомлений"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Быстрые настройки"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Экран блокировки."</string> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 2bcd5e399c96..803bf522c201 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"දැනුම්දීම නිෂ්ප්රභා කරඇත."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"දැනුම්දීම් ආවරණය."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ක්ෂණික සැකසීම්."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"අගුළු තිරය."</string> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 620bcd67738d..b5106138a93c 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Upozornenie bolo zrušené."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Panel upozornení."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Rýchle nastavenia."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Uzamknutá obrazovka"</string> @@ -434,8 +436,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Záznam obrazovky"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Začať"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ukončiť"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Zariadenie"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Potiahnutím nahor prepnete aplikácie"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Presunutím doprava rýchlo prepnete aplikácie"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Prepnúť prehľad"</string> @@ -720,8 +721,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Zobrazuje sa v hornej časti konverzácie ako bublina."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Nastavenia"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Priorita"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> nepodporuje nastavenia konkrétnych konverzácií"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Žiadne nedávne bubliny"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Tu sa budú zobrazovať nedávne a zavreté bubliny"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Tieto upozornenia sa nedajú upraviť."</string> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index ba73b1aa92cc..9c96b405f85c 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Obvestilo je bilo odstranjeno."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Oblaček je bil opuščen."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Zaslon z obvestili."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Hitre nastavitve."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Zaklenjen zaslon"</string> @@ -1038,8 +1039,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Izberite kontrolnike, do katerih želite imeti dostop prek menija za vklop/izklop"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Držite in povlecite, da prerazporedite kontrolnike"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"Vsi kontrolniki so bili odstranjeni"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Spremembe niso shranjene"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"Seznama vseh kontrolnikov ni bilo mogoče naložiti."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Dodajanje med kontrolnike naprave"</string> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index 392c1f196e05..cc1398be94e6 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Njoftimi është hequr."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Streha e njoftimeve."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Cilësimet e shpejta."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ekrani i kyçjes."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Regjistrimi i ekranit"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Nis"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ndalo"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Pajisja"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Rrëshqit shpejt lart për të ndërruar aplikacionet"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Zvarrit djathtas për të ndërruar aplikacionet me shpejtësi"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Kalo te përmbledhja"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Shfaqet në krye të seksionit të bisedës dhe shfaqet si flluskë."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Cilësimet"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Përparësia"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk i mbështet cilësimet specifike të bisedës"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nuk ka flluska të fundit"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Flluskat e fundit dhe flluskat e hequra do të shfaqen këtu"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Këto njoftime nuk mund të modifikohen."</string> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 54d7fc898270..58cfcb8d5478 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Обавештење је одбачено."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Облачић је одбачен."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Прозор са обавештењима."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Брза подешавања."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Закључан екран."</string> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 70e97f20e24f..532057b26390 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Meddelandet ignorerades."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Meddelandepanel."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Snabbinställningar."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Låsskärm."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Skärminspelning"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Starta"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stoppa"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Enhet"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Byt appar genom att svepa uppåt"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Tryck och dra åt höger för att snabbt byta mellan appar"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Aktivera och inaktivera översikten"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Visas högst upp bland konversationerna som en bubbla"</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Inställningar"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> har inte stöd för konversationsspecifika inställningar"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Inga nya bubblor"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"De senaste bubblorna och ignorerade bubblor visas här"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Det går inte att ändra de här aviseringarna."</string> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 6ea4253acd70..20e03253185e 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -255,6 +255,7 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Arifa imetupwa."</string> +    <string name="accessibility_bubble_dismissed" msgid="270358867566720729">"Umeondoa kiputo."</string>      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Kivuli cha arifa."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Mipangilio ya haraka."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Skrini iliyofungwa."</string> @@ -430,8 +431,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Rekodi ya Skrini"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Anza kurekodi"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Acha kurekodi"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Kifaa"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Telezesha kidole juu ili ubadilishe programu"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Buruta kulia ili ubadilishe programu haraka"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Washa Muhtasari"</string> @@ -714,8 +714,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Huonyeshwa sehemu ya juu ya mazungumzo na huonekana kama kiputo."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Mipangilio"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Kipaumbele"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> haitumii mipangilio mahususi ya mazungumzo"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Hakuna viputo vya hivi majuzi"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Viputo vya hivi karibuni na vile vilivyoondolewa vitaonekana hapa"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Arifa hizi haziwezi kubadilishwa."</string> @@ -1028,8 +1027,7 @@      <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Chagua vidhibiti vya kufikia ukitumia menyu ya kuwasha/kuzima"</string>      <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Shikilia na uburute ili upange upya vidhibiti"</string>      <string name="controls_favorite_removed" msgid="5276978408529217272">"Umeondoa vidhibiti vyote"</string> -    <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> -    <skip /> +    <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Mabadiliko hayajahifadhiwa"</string>      <string name="controls_favorite_load_error" msgid="2533215155804455348">"Imeshindwa kupakia orodha ya vidhibiti vyote."</string>      <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Nyingine"</string>      <string name="controls_dialog_title" msgid="2343565267424406202">"Weka kwenye vidhibiti vya vifaa"</string> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index 81204e3c558e..29547032db1a 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"அறிவிப்பு நிராகரிக்கப்பட்டது."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"அறிவிப்பு விவரம்."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"உடனடி அமைப்பு."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"லாக் ஸ்கிரீன்."</string> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index cfd420a326e5..28f199092084 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"నోటిఫికేషన్ తీసివేయబడింది."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"నోటిఫికేషన్ షేడ్."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"శీఘ్ర సెట్టింగ్లు."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"లాక్ స్క్రీన్."</string> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 45a0661226e4..a932c707e849 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"ปิดการแจ้งเตือนแล้ว"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"หน้าต่างแจ้งเตือน"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"การตั้งค่าด่วน"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ล็อกหน้าจอ"</string> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index db00e8a6856a..d665fa3f8ed6 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Na-dismiss ang notification."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Mga mabilisang setting."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 51aad9dce271..70d6205ca184 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Bildirim kapatıldı."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bildirim gölgesi."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Hızlı ayarlar."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Kilit ekranı"</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Ekran Kaydı"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Başlat"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Durdur"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Cihaz"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Uygulamalar arasında geçiş yapmak için yukarı kaydırın"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Uygulamaları hızlıca değiştirmek için sağa kaydırın"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Genel bakışı aç/kapat"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Görüşme bölümünün üstünde baloncuk olarak gösterilir."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ayarlar"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Öncelik"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g>, görüşmeye özgü ayarları desteklemiyor"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Son kapatılan baloncuk yok"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Son baloncuklar ve kapattığınız baloncuklar burada görünür"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirimler değiştirilemez."</string> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index fe63ad63e443..afcefca517ce 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Сповіщення відхилено."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Панель сповіщень."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Швидке налаштування."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Заблокований екран."</string> @@ -434,8 +436,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Запис екрана"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Почати"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Зупинити"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Пристрій"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Проводьте пальцем угору, щоб переходити між додатками"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Перетягуйте праворуч, щоб швидко переходити між додатками"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Увімкнути або вимкнути огляд"</string> @@ -720,8 +721,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"З\'являється вгорі розділу з розмовами у вигляді спливаючого чату."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Налаштування"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Пріоритет"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> не підтримує налаштування для чату"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Немає нещодавніх спливаючих чатів"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Тут з\'являтимуться нещодавні й закриті спливаючі чати"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ці сповіщення не можна змінити."</string> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index eb5094d665f2..1eab67a3f1bd 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"اطلاع مسترد ہوگئی۔"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"اطلاعاتی شیڈ۔"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"فوری ترتیبات۔"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"مقفل اسکرین۔"</string> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index c83f9771c397..9bca1e13c221 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Xabarnoma e‘tiborsiz qoldirildi."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Xabarnoma soyasi."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Tezkor sozlamalar."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Qulflash ekrani."</string> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 63af035a5f43..58c7e576bfcc 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Đã loại bỏ thông báo."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bóng thông báo."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Cài đặt nhanh."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Màn hình khóa."</string> @@ -430,8 +432,7 @@      <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Ghi lại nội dung trên màn hình"</string>      <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Bắt đầu"</string>      <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Dừng"</string> -    <!-- no translation found for media_seamless_remote_device (177033467332920464) --> -    <skip /> +    <string name="media_seamless_remote_device" msgid="177033467332920464">"Thiết bị"</string>      <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Vuốt lên để chuyển đổi ứng dụng"</string>      <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Kéo sang phải để chuyển đổi nhanh giữa các ứng dụng"</string>      <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Bật/tắt chế độ xem Tổng quan"</string> @@ -714,8 +715,7 @@      <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Hiển thị dưới dạng bong bóng ở đầu cuộc trò chuyện."</string>      <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Cài đặt"</string>      <string name="notification_priority_title" msgid="2079708866333537093">"Mức độ ưu tiên"</string> -    <!-- no translation found for no_shortcut (7176375126961212514) --> -    <skip /> +    <string name="no_shortcut" msgid="7176375126961212514">"Ứng dụng <xliff:g id="APP_NAME">%1$s</xliff:g> không hỗ trợ tùy chọn cài đặt dành riêng cho cuộc trò chuyện"</string>      <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Không có bong bóng trò chuyện nào gần đây"</string>      <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Bong bóng trò chuyện đã đóng và bong bóng trò chuyện gần đây sẽ xuất hiện ở đây"</string>      <string name="notification_unblockable_desc" msgid="2073030886006190804">"Không thể sửa đổi các thông báo này."</string> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index 323324d5805f..58b118cbfd43 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"已关闭通知。"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"通知栏。"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"快捷设置。"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"锁定屏幕。"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index f78604cdcd82..a960add17776 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"通知已關閉。"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"通知欄。"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"快速設定。"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"上鎖畫面。"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 141452b07ac8..d695a3e6ca42 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"已關閉通知。"</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"通知欄。"</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"快捷設定。"</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"螢幕鎖定。"</string> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index b6de81bd69fc..f05b3afca880 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -255,6 +255,8 @@      <!-- no translation found for accessibility_work_mode (1280025758672376313) -->      <skip />      <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Isaziso sichithiwe."</string> +    <!-- no translation found for accessibility_bubble_dismissed (270358867566720729) --> +    <skip />      <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Umthunzi wesaziso."</string>      <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Izilingiselelo ezisheshayo."</string>      <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Khiya isikrini."</string> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index f9c7c6bd7c1e..2c2e7244ce2e 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -304,6 +304,7 @@      <!-- The padding on the global screenshot background image -->      <dimen name="global_screenshot_legacy_bg_padding">20dp</dimen>      <dimen name="global_screenshot_bg_padding">20dp</dimen> +    <dimen name="global_screenshot_bg_protection_height">400dp</dimen>      <dimen name="global_screenshot_x_scale">80dp</dimen>      <dimen name="screenshot_preview_elevation">6dp</dimen>      <dimen name="screenshot_offset_y">48dp</dimen> @@ -994,7 +995,7 @@      <dimen name="pip_expand_container_edge_margin">30dp</dimen>      <!-- The touchable/draggable edge size for PIP resize. --> -    <dimen name="pip_resize_edge_size">30dp</dimen> +    <dimen name="pip_resize_edge_size">48dp</dimen>      <!-- The corner radius for PiP window. -->      <dimen name="pip_corner_radius">8dp</dimen> @@ -1249,9 +1250,17 @@      <!-- Home Controls -->      <dimen name="controls_header_side_margin">4dp</dimen>      <dimen name="controls_header_menu_size">48dp</dimen> -    <dimen name="controls_header_app_icon_size">40dp</dimen> -    <dimen name="controls_top_margin">44dp</dimen> -    <dimen name="control_header_text_size">22sp</dimen> +    <dimen name="controls_header_bottom_margin">24dp</dimen> +    <dimen name="controls_header_app_icon_size">24dp</dimen> +    <dimen name="controls_top_margin">48dp</dimen> +    <dimen name="control_header_text_size">20sp</dimen> +    <dimen name="control_item_text_size">16sp</dimen> +    <dimen name="control_menu_item_text_size">16sp</dimen> +    <dimen name="control_menu_item_min_height">56dp</dimen> +    <dimen name="control_menu_vertical_padding">12dp</dimen> +    <dimen name="control_menu_horizontal_padding">16dp</dimen> +    <dimen name="control_spinner_padding_vertical">24dp</dimen> +    <dimen name="control_spinner_padding_horizontal">20dp</dimen>      <dimen name="control_text_size">14sp</dimen>      <dimen name="control_icon_size">24dp</dimen>      <dimen name="control_spacing">4dp</dimen> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index fd9a8d1dca7e..2b3e661c4f7e 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -2651,13 +2651,13 @@      <string name="inattentive_sleep_warning_title">Standby</string>      <!-- Priority conversation onboarding screen --> -    <!--  Text explaining that priority conversations show at the top of the conversation section [CHAR LIMIT=50]  --> +    <!--  Text explaining that priority conversations show at the top of the conversation section [CHAR LIMIT=75]  -->      <string name="priority_onboarding_show_at_top_text">Show at top of conversation section</string> -    <!--  Text explaining that priority conversations show an avatar on the lock screen [CHAR LIMIT=50]  --> +    <!--  Text explaining that priority conversations show an avatar on the lock screen [CHAR LIMIT=75]  -->      <string name="priority_onboarding_show_avatar_text">Show profile picture on lock screen</string> -    <!--  Text explaining that priority conversations will appear as a bubble [CHAR LIMIT=50]  --> +    <!--  Text explaining that priority conversations will appear as a bubble [CHAR LIMIT=75]  -->      <string name="priority_onboarding_appear_as_bubble_text">Appear as a floating bubble on top of apps</string> -    <!--  Text explaining that priority conversations can interrupt DnD settings [CHAR LIMIT=50]  --> +    <!--  Text explaining that priority conversations can interrupt DnD settings [CHAR LIMIT=75]  -->      <string name="priority_onboarding_ignores_dnd_text">Interrupt Do Not Disturb</string>      <!--  Title for the affirmative button [CHAR LIMIT=50]  -->      <string name="priority_onboarding_done_button_title">Got it</string> diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index 57d2040bed57..d3a5f04b7285 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -692,14 +692,16 @@      <style name="Control" />      <style name="Control.MenuItem"> -        <item name="android:fontFamily">@*android:string/config_bodyFontFamilyMedium</item> -        <item name="android:textSize">@dimen/control_text_size</item> +        <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item> +        <item name="android:textSize">@dimen/control_menu_item_text_size</item>          <item name="android:textColor">@color/control_primary_text</item>          <item name="android:singleLine">true</item> +        <item name="android:gravity">center_vertical</item> +        <item name="android:minHeight">@dimen/control_menu_item_min_height</item>      </style>      <style name="Control.Spinner"> -        <item name="android:textSize">@dimen/control_header_text_size</item> +        <item name="android:textColor">@color/control_primary_text</item>          <item name="android:fontFamily">@*android:string/config_headlineFontFamilyMedium</item>          <item name="android:singleLine">true</item>          <item name="android:ellipsize">end</item> @@ -707,11 +709,12 @@      <style name="Control.Spinner.Header">          <item name="android:background">@drawable/control_spinner_background</item> -        <item name="android:textColor">@color/control_primary_text</item> +        <item name="android:textSize">@dimen/control_header_text_size</item>      </style>      <style name="Control.Spinner.Item"> -        <item name="android:textColor">@color/control_secondary_text</item> +        <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item> +        <item name="android:textSize">@dimen/control_item_text_size</item>      </style>      <style name="TextAppearance.Control.Status"> @@ -735,7 +738,8 @@          <item name="android:overlapAnchor">true</item>          <!-- used to override dark/light theming --> -        <item name="*android:colorPopupBackground">@color/GM2_grey_900</item> +        <item name="*android:colorBackgroundFloating">@color/GM2_grey_800</item> +        <item name="*android:colorPopupBackground">@color/GM2_grey_800</item>      </style>      <style name="TextAppearance.ControlSetup"> diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java index 013f22203fbc..cafa0604d88e 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -29,7 +29,7 @@ import static android.view.Display.DEFAULT_DISPLAY;  import static android.view.Display.INVALID_DISPLAY;  import static android.view.View.INVISIBLE;  import static android.view.View.VISIBLE; -import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;  import static com.android.systemui.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_CONTROLLER;  import static com.android.systemui.bubbles.BubbleDebugConfig.TAG_BUBBLES; @@ -53,7 +53,9 @@ import android.content.Context;  import android.content.pm.ActivityInfo;  import android.content.pm.PackageManager;  import android.content.res.Configuration; +import android.graphics.PixelFormat;  import android.graphics.Rect; +import android.os.Binder;  import android.os.Handler;  import android.os.RemoteException;  import android.os.ServiceManager; @@ -66,7 +68,7 @@ import android.util.Pair;  import android.util.SparseSetArray;  import android.view.Display;  import android.view.ViewGroup; -import android.widget.FrameLayout; +import android.view.WindowManager;  import androidx.annotation.IntDef;  import androidx.annotation.MainThread; @@ -76,7 +78,6 @@ import com.android.internal.annotations.VisibleForTesting;  import com.android.internal.statusbar.IStatusBarService;  import com.android.internal.statusbar.NotificationVisibility;  import com.android.systemui.Dumpable; -import com.android.systemui.R;  import com.android.systemui.bubbles.dagger.BubbleModule;  import com.android.systemui.dump.DumpManager;  import com.android.systemui.model.SysUiState; @@ -88,6 +89,7 @@ import com.android.systemui.shared.system.WindowManagerWrapper;  import com.android.systemui.statusbar.FeatureFlags;  import com.android.systemui.statusbar.NotificationLockscreenUserManager;  import com.android.systemui.statusbar.NotificationRemoveInterceptor; +import com.android.systemui.statusbar.ScrimView;  import com.android.systemui.statusbar.notification.NotificationChannelHelper;  import com.android.systemui.statusbar.notification.NotificationEntryListener;  import com.android.systemui.statusbar.notification.NotificationEntryManager; @@ -98,6 +100,7 @@ import com.android.systemui.statusbar.notification.collection.notifcollection.No  import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;  import com.android.systemui.statusbar.phone.NotificationGroupManager;  import com.android.systemui.statusbar.phone.NotificationShadeWindowController; +import com.android.systemui.statusbar.phone.ScrimController;  import com.android.systemui.statusbar.phone.ShadeController;  import com.android.systemui.statusbar.phone.StatusBar;  import com.android.systemui.statusbar.policy.ConfigurationController; @@ -145,7 +148,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi      private final NotificationEntryManager mNotificationEntryManager;      private final NotifPipeline mNotifPipeline;      private final BubbleTaskStackListener mTaskStackListener; -    private BubbleStateChangeListener mStateChangeListener;      private BubbleExpandListener mExpandListener;      @Nullable private BubbleStackView.SurfaceSynchronizer mSurfaceSynchronizer;      private final NotificationGroupManager mNotificationGroupManager; @@ -153,6 +155,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi      private final FloatingContentCoordinator mFloatingContentCoordinator;      private BubbleData mBubbleData; +    private ScrimView mBubbleScrim;      @Nullable private BubbleStackView mStackView;      private BubbleIconFactory mBubbleIconFactory; @@ -175,11 +178,16 @@ public class BubbleController implements ConfigurationController.ConfigurationLi      private final NotificationInterruptStateProvider mNotificationInterruptStateProvider;      private IStatusBarService mBarService; +    private WindowManager mWindowManager;      private SysUiState mSysUiState;      // Used to post to main UI thread      private Handler mHandler = new Handler(); +    /** LayoutParams used to add the BubbleStackView to the window maanger. */ +    private WindowManager.LayoutParams mWmLayoutParams; + +      // Used for determining view rect for touch interaction      private Rect mTempRect = new Rect(); @@ -195,16 +203,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi      private final List<NotifCallback> mCallbacks = new ArrayList<>();      /** -     * Listener to be notified when some states of the bubbles change. -     */ -    public interface BubbleStateChangeListener { -        /** -         * Called when the stack has bubbles or no longer has bubbles. -         */ -        void onHasBubblesChanged(boolean hasBubbles); -    } - -    /**       * Listener to find out about stack expansion / collapse events.       */      public interface BubbleExpandListener { @@ -393,9 +391,12 @@ public class BubbleController implements ConfigurationController.ConfigurationLi          }          mSurfaceSynchronizer = synchronizer; +        mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);          mBarService = IStatusBarService.Stub.asInterface(                  ServiceManager.getService(Context.STATUS_BAR_SERVICE)); +        mBubbleScrim = new ScrimView(mContext); +          mSavedBubbleKeysPerUser = new SparseSetArray<>();          mCurrentUserId = mNotifUserManager.getCurrentUserId();          mNotifUserManager.addUserChangedListener( @@ -573,6 +574,15 @@ public class BubbleController implements ConfigurationController.ConfigurationLi      }      /** +     * Returns the scrim drawn behind the bubble stack. This is managed by {@link ScrimController} +     * since we want the scrim's appearance and behavior to be identical to that of the notification +     * shade scrim. +     */ +    public ScrimView getScrimForBubble() { +        return mBubbleScrim; +    } + +    /**       * Sets whether to perform inflation on the same thread as the caller. This method should only       * be used in tests, not in production.       */ @@ -592,7 +602,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi          return mBubbleData.getOverflowBubbles();      } -      /**       * BubbleStackView is lazily created by this method the first time a Bubble is added. This       * method initializes the stack view and adds it to the StatusBar just above the scrim. @@ -602,11 +611,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi              mStackView = new BubbleStackView(                      mContext, mBubbleData, mSurfaceSynchronizer, mFloatingContentCoordinator,                      mSysUiState, mNotificationShadeWindowController); -            ViewGroup nsv = mNotificationShadeWindowController.getNotificationShadeView(); -            int bubbleScrimIndex = nsv.indexOfChild(nsv.findViewById(R.id.scrim_for_bubble)); -            int stackIndex = bubbleScrimIndex + 1;  // Show stack above bubble scrim. -            nsv.addView(mStackView, stackIndex, -                    new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)); +            mStackView.addView(mBubbleScrim); +            addToWindowManager();              if (mExpandListener != null) {                  mStackView.setExpandListener(mExpandListener);              } @@ -616,6 +622,45 @@ public class BubbleController implements ConfigurationController.ConfigurationLi          }      } +    /** Adds the BubbleStackView to the WindowManager. */ +    private void addToWindowManager() { +        mWmLayoutParams = new WindowManager.LayoutParams( +                // Fill the screen so we can use translation animations to position the bubble +                // stack. We'll use touchable regions to ignore touches that are not on the bubbles +                // themselves. +                ViewGroup.LayoutParams.MATCH_PARENT, +                ViewGroup.LayoutParams.MATCH_PARENT, +                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, +                // Start not focusable - we'll become focusable when expanded so the ActivityView +                // can use the IME. +                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE +                    | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, +                PixelFormat.TRANSLUCENT); + +        mWmLayoutParams.setFitInsetsTypes(0); +        mWmLayoutParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; +        mWmLayoutParams.token = new Binder(); +        mWmLayoutParams.setTitle("Bubbles!"); +        mWmLayoutParams.packageName = mContext.getPackageName(); +        mWmLayoutParams.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; + +        mWindowManager.addView(mStackView, mWmLayoutParams); +    } + +    private void updateWmFlags() { +        if (isStackExpanded()) { +            // If we're expanded, we want to be focusable so that the ActivityView can receive focus +            // and show the IME. +            mWmLayoutParams.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; +        } else { +            // If we're collapsed, we don't want to be able to receive focus. Doing so would +            // preclude applications from using the IME since we are always above them. +            mWmLayoutParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; +        } + +        mWindowManager.updateViewLayout(mStackView, mWmLayoutParams); +    } +      /**       * Records the notification key for any active bubbles. These are used to restore active       * bubbles when the user returns to the foreground. @@ -687,13 +732,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi      }      /** -     * Set a listener to be notified when some states of the bubbles change. -     */ -    public void setBubbleStateChangeListener(BubbleStateChangeListener listener) { -        mStateChangeListener = listener; -    } - -    /**       * Set a listener to be notified of bubble expand events.       */      public void setExpandListener(BubbleExpandListener listener) { @@ -701,7 +739,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi              if (listener != null) {                  listener.onBubbleExpandChanged(isExpanding, key);              } -            mNotificationShadeWindowController.setBubbleExpanded(isExpanding); + +            updateWmFlags();          });          if (mStackView != null) {              mStackView.setExpandListener(mExpandListener); @@ -712,7 +751,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi       * Whether or not there are bubbles present, regardless of them being visible on the       * screen (e.g. if on AOD).       */ -    public boolean hasBubbles() { +    @VisibleForTesting +    boolean hasBubbles() {          if (mStackView == null) {              return false;          } @@ -1146,8 +1186,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi      /**       * Lets any listeners know if bubble state has changed.       * Updates the visibility of the bubbles based on current state. -     * Does not un-bubble, just hides or un-hides. Notifies any -     * {@link BubbleStateChangeListener}s of visibility changes. +     * Does not un-bubble, just hides or un-hides.       * Updates stack description for TalkBack focus.       */      public void updateStack() { @@ -1161,29 +1200,10 @@ public class BubbleController implements ConfigurationController.ConfigurationLi              mStackView.setVisibility(INVISIBLE);          } -        // Let listeners know if bubble state changed. -        boolean hadBubbles = mNotificationShadeWindowController.getBubblesShowing(); -        boolean hasBubblesShowing = hasBubbles() && mStackView.getVisibility() == VISIBLE; -        mNotificationShadeWindowController.setBubblesShowing(hasBubblesShowing); -        if (mStateChangeListener != null && hadBubbles != hasBubblesShowing) { -            mStateChangeListener.onHasBubblesChanged(hasBubblesShowing); -        } -          mStackView.updateContentDescription();      }      /** -     * Rect indicating the touchable region for the bubble stack / expanded stack. -     */ -    public Rect getTouchableRegion() { -        if (mStackView == null || mStackView.getVisibility() != VISIBLE) { -            return null; -        } -        mStackView.getBoundsOnScreen(mTempRect); -        return mTempRect; -    } - -    /**       * The display id of the expanded view, if the stack is expanded and not occluded by the       * status bar, otherwise returns {@link Display#INVALID_DISPLAY}.       */ diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java index bb2365559f74..e367927621f3 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java @@ -131,6 +131,7 @@ public class BubbleExpandedView extends LinearLayout {                          }                          try {                              if (!mIsOverflow && mBubble.usingShortcutInfo()) { +                                options.setApplyActivityFlagsForBubbles(true);                                  mActivityView.startShortcutActivity(mBubble.getShortcutInfo(),                                          options, null /* sourceBounds */);                              } else { diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java index 366d4a7345af..c802b59faba9 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java @@ -108,7 +108,8 @@ import java.util.function.Consumer;  /**   * Renders bubbles in a stack and handles animating expanded and collapsed states.   */ -public class BubbleStackView extends FrameLayout { +public class BubbleStackView extends FrameLayout +        implements ViewTreeObserver.OnComputeInternalInsetsListener {      private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleStackView" : TAG_BUBBLES;      /** Animation durations for bubble stack user education views. **/ @@ -647,7 +648,6 @@ public class BubbleStackView extends FrameLayout {      private boolean mShowingManage = false;      private PhysicsAnimator.SpringConfig mManageSpringConfig = new PhysicsAnimator.SpringConfig(              SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_LOW_BOUNCY); -      @SuppressLint("ClickableViewAccessibility")      public BubbleStackView(Context context, BubbleData data,              @Nullable SurfaceSynchronizer synchronizer, @@ -1052,14 +1052,24 @@ public class BubbleStackView extends FrameLayout {      }      @Override -    public void getBoundsOnScreen(Rect outRect, boolean clipToParent) { -        getBoundsOnScreen(outRect); +    public void onComputeInternalInsets(ViewTreeObserver.InternalInsetsInfo inoutInfo) { +        inoutInfo.setTouchableInsets(ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION); + +        getTouchableRegion(mTempRect); +        inoutInfo.touchableRegion.set(mTempRect); +    } + +    @Override +    protected void onAttachedToWindow() { +        super.onAttachedToWindow(); +        getViewTreeObserver().addOnComputeInternalInsetsListener(this);      }      @Override      protected void onDetachedFromWindow() {          super.onDetachedFromWindow();          getViewTreeObserver().removeOnPreDrawListener(mViewUpdater); +        getViewTreeObserver().removeOnComputeInternalInsetsListener(this);      }      @Override @@ -1960,8 +1970,16 @@ public class BubbleStackView extends FrameLayout {          mAfterFlyoutHidden = null;      } -    @Override -    public void getBoundsOnScreen(Rect outRect) { +    /** +     * Fills the Rect with the touchable region of the bubbles. This will be used by WindowManager +     * to decide which touch events go to Bubbles. +     * +     * Bubbles is below the status bar/notification shade but above application windows. If you're +     * trying to get touch events from the status bar or another higher-level window layer, you'll +     * need to re-order TYPE_BUBBLES in WindowManagerPolicy so that we have the opportunity to steal +     * them. +     */ +    public void getTouchableRegion(Rect outRect) {          if (mUserEducationView != null && mUserEducationView.getVisibility() == VISIBLE) {              // When user education shows then capture all touches              outRect.set(0, 0, getWidth(), getHeight()); @@ -1971,12 +1989,12 @@ public class BubbleStackView extends FrameLayout {          if (!mIsExpanded) {              if (getBubbleCount() > 0) {                  mBubbleContainer.getChildAt(0).getBoundsOnScreen(outRect); +                // Increase the touch target size of the bubble +                outRect.top -= mBubbleTouchPadding; +                outRect.left -= mBubbleTouchPadding; +                outRect.right += mBubbleTouchPadding; +                outRect.bottom += mBubbleTouchPadding;              } -            // Increase the touch target size of the bubble -            outRect.top -= mBubbleTouchPadding; -            outRect.left -= mBubbleTouchPadding; -            outRect.right += mBubbleTouchPadding; -            outRect.bottom += mBubbleTouchPadding;          } else {              mBubbleContainer.getBoundsOnScreen(outRect);          } diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt index 8e88756b16fd..bbabaa4b29ed 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt @@ -149,6 +149,7 @@ class ControlsControllerImpl @Inject constructor (              val user = intent.getIntExtra(Intent.EXTRA_USER_ID, UserHandle.USER_NULL)              if (user == currentUserId) {                  executor.execute { +                    Log.d(TAG, "Restore finished, storing auxiliary favorites")                      auxiliaryPersistenceWrapper.initialize()                      listingController.removeCallback(listingCallback)                      persistenceWrapper.storeFavorites(auxiliaryPersistenceWrapper.favorites) @@ -219,6 +220,7 @@ class ControlsControllerImpl @Inject constructor (                  // Check if something has been added or removed, if so, store the new list                  if (changed) { +                    Log.d(TAG, "Detected change in available services, storing updated favorites")                      persistenceWrapper.storeFavorites(Favorites.getAllStructures())                  }              } diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt index 94487e5a584a..3590f1f4fad8 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt @@ -39,6 +39,7 @@ private fun createServiceListing(context: Context): ServiceListing {          setNoun("Controls Provider")          setSetting("controls_providers")          setTag("controls_providers") +        setAddDeviceLockedFlags(true)      }.build()  } @@ -70,23 +71,32 @@ class ControlsListingControllerImpl @VisibleForTesting constructor(          private const val TAG = "ControlsListingControllerImpl"      } +    private var availableComponents = emptySet<ComponentName>()      private var availableServices = emptyList<ServiceInfo>()      override var currentUserId = ActivityManager.getCurrentUser()          private set      private val serviceListingCallback = ServiceListing.Callback { -        Log.d(TAG, "ServiceConfig reloaded") -        availableServices = it.toList() +        val newServices = it.toList() +        val newComponents = +            newServices.mapTo(mutableSetOf<ComponentName>(), { s -> s.getComponentName() })          backgroundExecutor.execute { -            callbacks.forEach { -                it.onServicesUpdated(getCurrentServices()) +            if (!newComponents.equals(availableComponents)) { +                Log.d(TAG, "ServiceConfig reloaded, count: ${newComponents.size}") +                availableComponents = newComponents +                availableServices = newServices +                val currentServices = getCurrentServices() +                callbacks.forEach { +                    it.onServicesUpdated(currentServices) +                }              }          }      }      init { +        Log.d(TAG, "Initializing")          serviceListing.addCallback(serviceListingCallback)          serviceListing.setListening(true)          serviceListing.reload() @@ -119,9 +129,10 @@ class ControlsListingControllerImpl @VisibleForTesting constructor(       */      override fun addCallback(listener: ControlsListingController.ControlsListingCallback) {          backgroundExecutor.execute { -            Log.d(TAG, "Subscribing callback") +            val services = getCurrentServices() +            Log.d(TAG, "Subscribing callback, service count: ${services.size}")              callbacks.add(listener) -            listener.onServicesUpdated(getCurrentServices()) +            listener.onServicesUpdated(services)          }      } diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt index 7108966072b9..38e732517c79 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt @@ -35,7 +35,6 @@ import android.util.TypedValue  import android.view.ContextThemeWrapper  import android.view.LayoutInflater  import android.view.View -import android.view.View.MeasureSpec  import android.view.ViewGroup  import android.view.WindowManager  import android.view.animation.AccelerateInterpolator @@ -58,6 +57,7 @@ import com.android.systemui.controls.management.ControlsListingController  import com.android.systemui.controls.management.ControlsProviderSelectorActivity  import com.android.systemui.dagger.qualifiers.Background  import com.android.systemui.dagger.qualifiers.Main +import com.android.systemui.globalactions.GlobalActionsPopupMenu  import com.android.systemui.plugins.ActivityStarter  import com.android.systemui.statusbar.policy.KeyguardStateController  import com.android.systemui.util.concurrency.DelayableExecutor @@ -287,14 +287,6 @@ class ControlsUiControllerImpl @Inject constructor (          createMenu()      } -    private fun createPopup(): ListPopupWindow { -        return ListPopupWindow( -            ContextThemeWrapper(context, R.style.Control_ListPopupWindow)).apply { -            setWindowLayoutType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY) -            setModal(true) -        } -    } -      private fun createMenu() {          val items = arrayOf(              context.resources.getString(R.string.controls_menu_add), @@ -306,7 +298,7 @@ class ControlsUiControllerImpl @Inject constructor (          val anchor = parent.requireViewById<ImageView>(R.id.controls_more)          anchor.setOnClickListener(object : View.OnClickListener {              override fun onClick(v: View) { -                popup = createPopup().apply { +                popup = GlobalActionsPopupMenu(context, false /* isDropDownMode */).apply {                      setAnchorView(anchor)                      setAdapter(adapter)                      setOnItemClickListener(object : AdapterView.OnItemClickListener { @@ -329,20 +321,6 @@ class ControlsUiControllerImpl @Inject constructor (                              dismiss()                          }                      }) -                    // need to call show() first in order to construct the listView -                    show() -                    var width = 0 -                    getListView()?.apply { -                        // width should be between [.5, .9] of screen -                        val parentWidth = this@ControlsUiControllerImpl.parent.getWidth() -                        val widthSpec = MeasureSpec.makeMeasureSpec( -                            (parentWidth * 0.9).toInt(), MeasureSpec.AT_MOST) -                        val child = adapter.getView(0, null, this) -                        child.measure(widthSpec, MeasureSpec.UNSPECIFIED) -                        width = Math.max(child.getMeasuredWidth(), (parentWidth * 0.5).toInt()) -                    } -                    setWidth(width) -                    setHorizontalOffset(-width + anchor.getWidth())                      show()                  }              } @@ -408,9 +386,6 @@ class ControlsUiControllerImpl @Inject constructor (              (getBackground() as LayerDrawable).getDrawable(1)                  .setTint(context.resources.getColor(R.color.control_spinner_dropdown, null))          } -        parent.requireViewById<ImageView>(R.id.app_icon).apply { -            setImageDrawable(selectionItem.icon) -        }          if (itemsWithStructure.size == 1) {              spinner.setBackground(null) @@ -420,9 +395,14 @@ class ControlsUiControllerImpl @Inject constructor (          val anchor = parent.requireViewById<ViewGroup>(R.id.controls_header)          anchor.setOnClickListener(object : View.OnClickListener {              override fun onClick(v: View) { -                popup = createPopup().apply { +                popup = GlobalActionsPopupMenu(context, true /* isDropDownMode */).apply {                      setAnchorView(anchor)                      setAdapter(adapter) +                    val theme = ContextThemeWrapper(context, R.style.Control_ListPopupWindow) +                        .getTheme() +                    setBackgroundDrawable( +                        context.resources.getDrawable(R.drawable.rounded_bg_full, theme)) +                      setOnItemClickListener(object : AdapterView.OnItemClickListener {                          override fun onItemClick(                              parent: AdapterView<*>, @@ -435,14 +415,6 @@ class ControlsUiControllerImpl @Inject constructor (                              dismiss()                          }                      }) -                    // need to call show() first in order to construct the listView -                    show() -                    getListView()?.apply { -                        setDividerHeight( -                            context.resources.getDimensionPixelSize(R.dimen.control_list_divider)) -                        setDivider( -                            context.resources.getDrawable(R.drawable.controls_list_divider)) -                    }                      show()                  }              } diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java index 3a4b273e1c98..23bcb29923d8 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java @@ -33,6 +33,8 @@ import android.view.LayoutInflater;  import android.view.WindowManager;  import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger; +import com.android.internal.logging.UiEventLoggerImpl;  import com.android.internal.util.NotificationMessagingUtil;  import com.android.internal.widget.LockPatternUtils;  import com.android.keyguard.ViewMediatorCallback; @@ -218,4 +220,11 @@ public class DependencyProvider {      public Choreographer providesChoreographer() {          return Choreographer.getInstance();      } + +    /** Provides an instance of {@link com.android.internal.logging.UiEventLogger} */ +    @Singleton +    @Provides +    static UiEventLogger provideUiEventLogger() { +        return new UiEventLoggerImpl(); +    }  } diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java index 8123158408dd..cf9e1412f3bd 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java @@ -82,7 +82,6 @@ import android.widget.ImageView;  import android.widget.ImageView.ScaleType;  import android.widget.LinearLayout;  import android.widget.ListPopupWindow; -import android.widget.ListView;  import android.widget.TextView;  import androidx.annotation.NonNull; @@ -2021,42 +2020,23 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,          }          private ListPopupWindow createPowerOverflowPopup() { -            ListPopupWindow popup = new ListPopupWindow(new ContextThemeWrapper( -                    mContext, com.android.systemui.R.style.Control_ListPopupWindow)); -            popup.setWindowLayoutType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY); +            ListPopupWindow popup = new GlobalActionsPopupMenu( +                    mContext, false /* isDropDownMode */);              View overflowButton =                      findViewById(com.android.systemui.R.id.global_actions_overflow_button);              popup.setAnchorView(overflowButton); -            int parentWidth = mGlobalActionsLayout.getWidth(); -            // arbitrarily set the menu width to half of parent -            // TODO: Logic for menu sizing based on contents. -            int halfParentWidth = Math.round(parentWidth * 0.5f); -            popup.setContentWidth(halfParentWidth);              popup.setAdapter(mOverflowAdapter); -            popup.setModal(true);              return popup;          }          private void showPowerOverflowMenu() { -            mOverflowPopup.show(); - -            // Width is fixed to slightly more than half of the GlobalActionsLayout container. -            // TODO: Resize the width of this dialog based on the sizes of the items in it. -            int width = Math.round(mGlobalActionsLayout.getWidth() * 0.6f); - -            ListView listView = mOverflowPopup.getListView(); -            listView.setDividerHeight(mContext.getResources() -                    .getDimensionPixelSize(com.android.systemui.R.dimen.control_list_divider)); -            listView.setDivider(mContext.getResources().getDrawable( -                    com.android.systemui.R.drawable.controls_list_divider)); -            mOverflowPopup.setWidth(width); -            mOverflowPopup.setHorizontalOffset(-width + mOverflowPopup.getAnchorView().getWidth()); -            mOverflowPopup.setVerticalOffset(mOverflowPopup.getAnchorView().getHeight()); +            mOverflowPopup = createPowerOverflowPopup();              mOverflowPopup.show();          }          private void hidePowerOverflowMenu() {              mOverflowPopup.dismiss(); +            mOverflowPopup = null;          }          private void initializeLayout() { @@ -2081,8 +2061,6 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,                  mContainer = mGlobalActionsLayout;              } -            mOverflowPopup = createPowerOverflowPopup(); -              View overflowButton = findViewById(                      com.android.systemui.R.id.global_actions_overflow_button);              if (overflowButton != null) { diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPopupMenu.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPopupMenu.java new file mode 100644 index 000000000000..02ea25128993 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPopupMenu.java @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.systemui.globalactions; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.content.Context; +import android.content.res.Resources; +import android.view.ContextThemeWrapper; +import android.view.View; +import android.view.View.MeasureSpec; +import android.view.WindowManager; +import android.widget.ListAdapter; +import android.widget.ListPopupWindow; +import android.widget.ListView; + +import com.android.systemui.R; + +/** + * Customized widget for use in the GlobalActionsDialog. Ensures common positioning and user + * interactions. + */ +public class GlobalActionsPopupMenu extends ListPopupWindow { +    private Context mContext; +    private boolean mIsDropDownMode; +    private int mMenuHorizontalPadding = 0; +    private int mMenuVerticalPadding = 0; +    private int mGlobalActionsSidePadding = 0; +    private ListAdapter mAdapter; + +    public GlobalActionsPopupMenu(@NonNull Context context, boolean isDropDownMode) { +        super(new ContextThemeWrapper(context, R.style.Control_ListPopupWindow)); +        mContext = context; +        mIsDropDownMode = isDropDownMode; + +        // required to show above the global actions dialog +        setWindowLayoutType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY); +        setModal(true); + +        Resources res = mContext.getResources(); +        mGlobalActionsSidePadding = res.getDimensionPixelSize(R.dimen.global_actions_side_margin); +        if (!isDropDownMode) { +            mMenuVerticalPadding = res.getDimensionPixelSize(R.dimen.control_menu_vertical_padding); +            mMenuHorizontalPadding = +                res.getDimensionPixelSize(R.dimen.control_menu_horizontal_padding); +        } +    } + +    /** +     * Set the listadapter used to populate this menu. +     */ +    public void setAdapter(@Nullable ListAdapter adapter) { +        mAdapter = adapter; +        super.setAdapter(adapter); +    } + +    /** +      * Show the dialog. +      */ +    public void show() { +        // need to call show() first in order to construct the listView +        super.show(); + +        ListView listView = getListView(); +        Resources res = mContext.getResources(); + +        setVerticalOffset(-getAnchorView().getHeight() / 2); + +        if (mIsDropDownMode) { +            // use a divider +            listView.setDividerHeight(res.getDimensionPixelSize(R.dimen.control_list_divider)); +            listView.setDivider(res.getDrawable(R.drawable.controls_list_divider_inset)); +        } else { +            if (mAdapter == null) return; + +            // width should be between [.5, .9] of screen +            int parentWidth = res.getSystem().getDisplayMetrics().widthPixels; +            int widthSpec = MeasureSpec.makeMeasureSpec( +                    (int) (parentWidth * 0.9), MeasureSpec.AT_MOST); +            View child = mAdapter.getView(0, null, listView); +            child.measure(widthSpec, MeasureSpec.UNSPECIFIED); +            int width = Math.max(child.getMeasuredWidth(), (int) (parentWidth * 0.5)); + +            listView.setPadding(mMenuHorizontalPadding, mMenuVerticalPadding, +                    mMenuHorizontalPadding, mMenuVerticalPadding); + +            setWidth(width); +            setHorizontalOffset(getAnchorView().getWidth() - mGlobalActionsSidePadding - width); +        } + +        super.show(); +    } +} diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java index d38c481752c6..7295f327d47a 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java @@ -238,6 +238,11 @@ public class PipTaskOrganizer extends TaskOrganizer {       * @param animationDurationMs duration in millisecond for the exiting PiP transition       */      public void dismissPip(int animationDurationMs) { +        if (!mInPip || mToken == null) { +            Log.wtf(TAG, "Not allowed to dismissPip in current state" +                    + " mInPip=" + mInPip + " mToken=" + mToken); +            return; +        }          final WindowContainerTransaction wct = new WindowContainerTransaction();          wct.setActivityWindowingMode(mToken, WINDOWING_MODE_UNDEFINED);          WindowOrganizer.applyTransaction(wct); diff --git a/packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt b/packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt index 448531a132df..c5ae3ab2c9fb 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt @@ -20,10 +20,14 @@ import android.content.Context  import android.content.res.Configuration  import android.view.View  import android.view.ViewGroup +import com.android.internal.logging.UiEventLogger  import com.android.systemui.R  import com.android.systemui.qs.TileLayout.exactly -class DoubleLineTileLayout(context: Context) : ViewGroup(context), QSPanel.QSTileLayout { +class DoubleLineTileLayout( +    context: Context, +    private val uiEventLogger: UiEventLogger +) : ViewGroup(context), QSPanel.QSTileLayout {      companion object {          private const val NUM_LINES = 2 @@ -86,6 +90,13 @@ class DoubleLineTileLayout(context: Context) : ViewGroup(context), QSPanel.QSTil          for (record in mRecords) {              record.tile.setListening(this, listening)          } +        if (listening) { +            for (i in 0 until numVisibleTiles) { +                val tile = mRecords[i].tile +                uiEventLogger.logWithInstanceId( +                        QSEvent.QQS_TILE_VISIBLE, 0, tile.metricsSpec, tile.instanceId) +            } +        }      }      override fun getNumVisibleTiles() = tilesToShow diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java index cd737217b84a..b157f4b3c5ed 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java @@ -22,7 +22,9 @@ import android.widget.Scroller;  import androidx.viewpager.widget.PagerAdapter;  import androidx.viewpager.widget.ViewPager; +import com.android.internal.logging.UiEventLogger;  import com.android.systemui.R; +import com.android.systemui.plugins.qs.QSTile;  import com.android.systemui.qs.QSPanel.QSTileLayout;  import com.android.systemui.qs.QSPanel.TileRecord; @@ -63,7 +65,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {      private int mLayoutDirection;      private int mHorizontalClipBound;      private final Rect mClippingRect; -    private int mLastMaxHeight = -1; +    private final UiEventLogger mUiEventLogger = QSEvents.INSTANCE.getQsUiEventsLogger();      public PagedTileLayout(Context context, AttributeSet attrs) {          super(context, attrs); @@ -75,6 +77,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {          mLayoutDirection = getLayoutDirection();          mClippingRect = new Rect();      } +    private int mLastMaxHeight = -1;      public void saveInstanceState(Bundle outState) {          outState.putInt(CURRENT_PAGE, getCurrentItem()); @@ -126,6 +129,15 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {          return page;      } +    // This will dump to the ui log all the tiles that are visible in this page +    private void logVisibleTiles(TilePage page) { +        for (int i = 0; i < page.mRecords.size(); i++) { +            QSTile t = page.mRecords.get(i).tile; +            mUiEventLogger.logWithInstanceId(QSEvent.QS_TILE_VISIBLE, 0, t.getMetricsSpec(), +                    t.getInstanceId()); +        } +    } +      @Override      public void setListening(boolean listening) {          if (mListening == listening) return; @@ -218,7 +230,11 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {          setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);          int currentItem = getCurrentPageNumber();          for (int i = 0; i < mPages.size(); i++) { -            mPages.get(i).setSelected(i == currentItem ? selected : false); +            TilePage page = mPages.get(i); +            page.setSelected(i == currentItem ? selected : false); +            if (page.isSelected()) { +                logVisibleTiles(page); +            }          }          setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);      } @@ -419,6 +435,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {                          mPageListener.onPageChanged(isLayoutRtl() ? position == mPages.size() - 1                                  : position == 0);                      } +                  }                  @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java index 17aaff1f7383..ee3b499edfb7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java @@ -39,6 +39,7 @@ import android.widget.Switch;  import android.widget.TextView;  import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger;  import com.android.systemui.Dependency;  import com.android.systemui.FontSizeUtils;  import com.android.systemui.R; @@ -53,6 +54,7 @@ public class QSDetail extends LinearLayout {      private static final long FADE_DURATION = 300;      private final SparseArray<View> mDetailViews = new SparseArray<>(); +    private final UiEventLogger mUiEventLogger = QSEvents.INSTANCE.getQsUiEventsLogger();      private ViewGroup mDetailContent;      protected TextView mDetailSettingsButton; @@ -205,6 +207,7 @@ public class QSDetail extends LinearLayout {              mDetailContent.addView(detailView);              mDetailViews.put(viewCacheIndex, detailView);              Dependency.get(MetricsLogger.class).visible(adapter.getMetricsCategory()); +            mUiEventLogger.log(adapter.openDetailEvent());              announceForAccessibility(mContext.getString(                      R.string.accessibility_quick_settings_detail,                      adapter.getTitle())); @@ -214,6 +217,7 @@ public class QSDetail extends LinearLayout {          } else {              if (mDetailAdapter != null) {                  Dependency.get(MetricsLogger.class).hidden(mDetailAdapter.getMetricsCategory()); +                mUiEventLogger.log(mDetailAdapter.closeDetailEvent());              }              mClosingDetail = true;              mDetailAdapter = null; @@ -249,6 +253,7 @@ public class QSDetail extends LinearLayout {          mDetailSettingsButton.setOnClickListener(v -> {              Dependency.get(MetricsLogger.class).action(ACTION_QS_MORE_SETTINGS,                      adapter.getMetricsCategory()); +            mUiEventLogger.log(adapter.moreSettingsEvent());              Dependency.get(ActivityStarter.class)                      .postStartActivityDismissingKeyguard(settingsIntent, 0);          }); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSEvents.kt b/packages/SystemUI/src/com/android/systemui/qs/QSEvents.kt new file mode 100644 index 000000000000..54e8a2be0d2a --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/QSEvents.kt @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.qs + +import com.android.internal.logging.UiEvent +import com.android.internal.logging.UiEventLogger +import com.android.internal.logging.UiEventLoggerImpl +import com.android.internal.logging.testing.UiEventLoggerFake + +object QSEvents { + +    var qsUiEventsLogger: UiEventLogger = UiEventLoggerImpl() +        private set + +    fun setLoggerForTesting(): UiEventLoggerFake { +        return UiEventLoggerFake().also { +            qsUiEventsLogger = it +        } +    } + +    fun resetLogger() { +        qsUiEventsLogger = UiEventLoggerImpl() +    } +} + +enum class QSEvent(private val _id: Int) : UiEventLogger.UiEventEnum { +    @UiEvent(doc = "Tile clicked. It has an instance id and a spec (or packageName)") +    QS_ACTION_CLICK(387), + +    @UiEvent(doc = "Tile secondary button clicked. " + +            "It has an instance id and a spec (or packageName)") +    QS_ACTION_SECONDARY_CLICK(388), + +    @UiEvent(doc = "Tile long clicked. It has an instance id and a spec (or packageName)") +    QS_ACTION_LONG_PRESS(389), + +    @UiEvent(doc = "Quick Settings panel expanded") +    QS_PANEL_EXPANDED(390), + +    @UiEvent(doc = "Quick Settings panel collapsed") +    QS_PANEL_COLLAPSED(391), + +    @UiEvent(doc = "Tile visible in Quick Settings panel. The tile may be in a different page. " + +            "It has an instance id and a spec (or packageName)") +    QS_TILE_VISIBLE(392), + +    @UiEvent(doc = "Quick Quick Settings panel expanded") +    QQS_PANEL_EXPANDED(393), + +    @UiEvent(doc = "Quick Quick Settings panel collapsed") +    QQS_PANEL_COLLAPSED(394), + +    @UiEvent(doc = "Tile visible in Quick Quick Settings panel. " + +            "It has an instance id and a spec (or packageName)") +    QQS_TILE_VISIBLE(395); + +    override fun getId() = _id +} + +enum class QSEditEvent(private val _id: Int) : UiEventLogger.UiEventEnum { + +    @UiEvent(doc = "Tile removed from current tiles") +    QS_EDIT_REMOVE(210), + +    @UiEvent(doc = "Tile added to current tiles") +    QS_EDIT_ADD(211), + +    @UiEvent(doc = "Tile moved") +    QS_EDIT_MOVE(212), + +    @UiEvent(doc = "QS customizer open") +    QS_EDIT_OPEN(213), + +    @UiEvent(doc = "QS customizer closed") +    QS_EDIT_CLOSED(214), + +    @UiEvent(doc = "QS tiles reset") +    QS_EDIT_RESET(215); + +    override fun getId() = _id +} + +enum class QSDndEvent(private val _id: Int) : UiEventLogger.UiEventEnum { +    @UiEvent(doc = "TODO(beverlyt)") +    QS_DND_CONDITION_SELECT(420), + +    @UiEvent(doc = "TODO(beverlyt)") +    QS_DND_TIME_UP(422), + +    @UiEvent(doc = "TODO(beverlyt)") +    QS_DND_TIME_DOWN(423); + +    override fun getId() = _id +} + +enum class QSUserSwitcherEvent(private val _id: Int) : UiEventLogger.UiEventEnum { +    @UiEvent(doc = "The current user has been switched in the detail panel") +    QS_USER_SWITCH(424), + +    @UiEvent(doc = "User switcher QS detail panel open") +    QS_USER_DETAIL_OPEN(425), + +    @UiEvent(doc = "User switcher QS detail panel closed") +    QS_USER_DETAIL_CLOSE(426), + +    @UiEvent(doc = "User switcher QS detail panel more settings pressed") +    QS_USER_MORE_SETTINGS(427); + +    override fun getId() = _id +}
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java index ece1ce8bb4d0..1e8c4d86da36 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java @@ -16,6 +16,8 @@ package com.android.systemui.qs;  import android.content.Context; +import com.android.internal.logging.InstanceId; +import com.android.internal.logging.UiEventLogger;  import com.android.systemui.plugins.qs.QSTile;  import com.android.systemui.qs.external.TileServices;  import com.android.systemui.qs.logging.QSLogger; @@ -30,6 +32,7 @@ public interface QSHost {      Context getContext();      Context getUserContext();      QSLogger getQSLogger(); +    UiEventLogger getUiEventLogger();      Collection<QSTile> getTiles();      void addCallback(Callback callback);      void removeCallback(Callback callback); @@ -39,6 +42,8 @@ public interface QSHost {      int indexOf(String tileSpec); +    InstanceId getNewInstanceId(); +      interface Callback {          void onTilesChanged();      } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 121e2aa94954..a3004bdc004d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -52,6 +52,7 @@ import android.widget.HorizontalScrollView;  import android.widget.LinearLayout;  import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger;  import com.android.internal.logging.nano.MetricsProto.MetricsEvent;  import com.android.internal.statusbar.NotificationVisibility;  import com.android.settingslib.Utils; @@ -129,6 +130,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne      private BrightnessController mBrightnessController;      private final DumpManager mDumpManager;      private final QSLogger mQSLogger; +    protected final UiEventLogger mUiEventLogger;      protected QSTileHost mHost;      protected QSSecurityFooter mFooter; @@ -176,7 +178,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne              @Background DelayableExecutor backgroundExecutor,              @Nullable LocalBluetoothManager localBluetoothManager,              ActivityStarter activityStarter, -            NotificationEntryManager entryManager +            NotificationEntryManager entryManager, +            UiEventLogger uiEventLogger      ) {          super(context, attrs);          mContext = context; @@ -188,6 +191,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne          mBroadcastDispatcher = broadcastDispatcher;          mActivityStarter = activityStarter;          mNotificationEntryManager = entryManager; +        mUiEventLogger = uiEventLogger;          setOrientation(VERTICAL); @@ -678,8 +682,10 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne          }          mMetricsLogger.visibility(MetricsEvent.QS_PANEL, mExpanded);          if (!mExpanded) { +            mUiEventLogger.log(closePanelEvent());              closeDetail();          } else { +            mUiEventLogger.log(openPanelEvent());              logTiles();          }      } @@ -786,6 +792,18 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne          return mHost.createTileView(tile, collapsedView);      } +    protected QSEvent openPanelEvent() { +        return QSEvent.QS_PANEL_EXPANDED; +    } + +    protected QSEvent closePanelEvent() { +        return QSEvent.QS_PANEL_COLLAPSED; +    } + +    protected QSEvent tileVisibleEvent() { +        return QSEvent.QS_TILE_VISIBLE; +    } +      protected boolean shouldShowDetail() {          return mExpanded;      } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java index 9e8eb3a28781..8835e5db50c0 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java @@ -31,6 +31,9 @@ import android.text.TextUtils;  import android.util.ArraySet;  import android.util.Log; +import com.android.internal.logging.InstanceId; +import com.android.internal.logging.InstanceIdSequence; +import com.android.internal.logging.UiEventLogger;  import com.android.systemui.Dumpable;  import com.android.systemui.R;  import com.android.systemui.broadcast.BroadcastDispatcher; @@ -73,6 +76,7 @@ import javax.inject.Singleton;  public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, Dumpable {      private static final String TAG = "QSTileHost";      private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); +    private static final int MAX_QS_INSTANCE_ID = 1 << 20;      public static final String TILES_SETTING = Secure.QS_TILES; @@ -85,6 +89,8 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D      private final DumpManager mDumpManager;      private final BroadcastDispatcher mBroadcastDispatcher;      private final QSLogger mQSLogger; +    private final UiEventLogger mUiEventLogger; +    private final InstanceIdSequence mInstanceIdSequence;      private final List<Callback> mCallbacks = new ArrayList<>();      private AutoTileManager mAutoTiles; @@ -106,7 +112,8 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D              DumpManager dumpManager,              BroadcastDispatcher broadcastDispatcher,              Optional<StatusBar> statusBarOptional, -            QSLogger qsLogger) { +            QSLogger qsLogger, +            UiEventLogger uiEventLogger) {          mIconController = iconController;          mContext = context;          mUserContext = context; @@ -114,8 +121,10 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D          mPluginManager = pluginManager;          mDumpManager = dumpManager;          mQSLogger = qsLogger; +        mUiEventLogger = uiEventLogger;          mBroadcastDispatcher = broadcastDispatcher; +        mInstanceIdSequence = new InstanceIdSequence(MAX_QS_INSTANCE_ID);          mServices = new TileServices(this, bgLooper, mBroadcastDispatcher);          mStatusBarOptional = statusBarOptional; @@ -137,6 +146,11 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D          return mIconController;      } +    @Override +    public InstanceId getNewInstanceId() { +        return mInstanceIdSequence.newInstanceId(); +    } +      public void destroy() {          mTiles.values().forEach(tile -> tile.destroy());          mAutoTiles.destroy(); @@ -170,6 +184,11 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D      }      @Override +    public UiEventLogger getUiEventLogger() { +        return mUiEventLogger; +    } + +    @Override      public void addCallback(Callback callback) {          mCallbacks.add(callback);      } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java index 38dea657242d..6683a1ce4f4f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java @@ -27,6 +27,7 @@ import android.view.Gravity;  import android.view.View;  import android.widget.LinearLayout; +import com.android.internal.logging.UiEventLogger;  import com.android.settingslib.bluetooth.LocalBluetoothManager;  import com.android.systemui.Dependency;  import com.android.systemui.R; @@ -88,11 +89,12 @@ public class QuickQSPanel extends QSPanel {              @Background DelayableExecutor backgroundExecutor,              @Nullable LocalBluetoothManager localBluetoothManager,              ActivityStarter activityStarter, -            NotificationEntryManager entryManager +            NotificationEntryManager entryManager, +            UiEventLogger uiEventLogger      ) {          super(context, attrs, dumpManager, broadcastDispatcher, qsLogger,                  foregroundExecutor, backgroundExecutor, localBluetoothManager, activityStarter, -                entryManager); +                entryManager, uiEventLogger);          if (mFooter != null) {              removeView(mFooter.getView());          } @@ -118,9 +120,9 @@ public class QuickQSPanel extends QSPanel {              lp2.setMarginStart(0);              mHorizontalLinearLayout.addView(mMediaPlayer.getView(), lp2); -            mTileLayout = new DoubleLineTileLayout(context); +            mTileLayout = new DoubleLineTileLayout(context, mUiEventLogger);              mMediaTileLayout = mTileLayout; -            mRegularTileLayout = new HeaderTileLayout(context); +            mRegularTileLayout = new HeaderTileLayout(context, mUiEventLogger);              LayoutParams lp = new LayoutParams(0, LayoutParams.MATCH_PARENT, 1);              lp.setMarginEnd(0);              lp.setMarginStart(marginSize); @@ -135,7 +137,7 @@ public class QuickQSPanel extends QSPanel {              super.setPadding(0, 0, 0, 0);          } else {              sDefaultMaxTiles = getResources().getInteger(R.integer.quick_qs_panel_max_columns); -            mTileLayout = new HeaderTileLayout(context); +            mTileLayout = new HeaderTileLayout(context, mUiEventLogger);              mTileLayout.setListening(mListening);              addView((View) mTileLayout, 0 /* Between brightness and footer */);              super.setPadding(0, 0, 0, 0); @@ -312,13 +314,30 @@ public class QuickQSPanel extends QSPanel {          super.setVisibility(visibility);      } +    @Override +    protected QSEvent openPanelEvent() { +        return QSEvent.QQS_PANEL_EXPANDED; +    } + +    @Override +    protected QSEvent closePanelEvent() { +        return QSEvent.QQS_PANEL_COLLAPSED; +    } + +    @Override +    protected QSEvent tileVisibleEvent() { +        return QSEvent.QQS_TILE_VISIBLE; +    } +      private static class HeaderTileLayout extends TileLayout { -        private boolean mListening; +        private final UiEventLogger mUiEventLogger; +          private Rect mClippingBounds = new Rect(); -        public HeaderTileLayout(Context context) { +        public HeaderTileLayout(Context context, UiEventLogger uiEventLogger) {              super(context); +            mUiEventLogger = uiEventLogger;              setClipChildren(false);              setClipToPadding(false);              LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, @@ -443,5 +462,18 @@ public class QuickQSPanel extends QSPanel {              }              return getPaddingStart() + column *  (mCellWidth + mCellMarginHorizontal);          } + +        @Override +        public void setListening(boolean listening) { +            boolean startedListening = !mListening && listening; +            super.setListening(listening); +            if (startedListening) { +                for (int i = 0; i < getNumVisibleTiles(); i++) { +                    QSTile tile = mRecords.get(i).tile; +                    mUiEventLogger.logWithInstanceId(QSEvent.QQS_TILE_VISIBLE, 0, +                            tile.getMetricsSpec(), tile.getInstanceId()); +                } +            } +        }      }  } diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java index 9f59277c918a..098431658e6a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java @@ -31,7 +31,7 @@ public class TileLayout extends ViewGroup implements QSTileLayout {      protected final ArrayList<TileRecord> mRecords = new ArrayList<>();      private int mCellMarginTop; -    private boolean mListening; +    protected boolean mListening;      protected int mMaxAllowedRows = 3;      // Prototyping with less rows diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java index bfac85bd4c10..3e2f9dec5807 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java @@ -44,6 +44,7 @@ import com.android.systemui.keyguard.ScreenLifecycle;  import com.android.systemui.plugins.qs.QS;  import com.android.systemui.plugins.qs.QSTile;  import com.android.systemui.qs.QSDetailClipper; +import com.android.systemui.qs.QSEditEvent;  import com.android.systemui.qs.QSTileHost;  import com.android.systemui.statusbar.phone.LightBarController;  import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer; @@ -93,7 +94,8 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene              LightBarController lightBarController,              KeyguardStateController keyguardStateController,              ScreenLifecycle screenLifecycle, -            TileQueryHelper tileQueryHelper) { +            TileQueryHelper tileQueryHelper, +            UiEventLogger uiEventLogger) {          super(new ContextThemeWrapper(context, R.style.edit_theme), attrs);          LayoutInflater.from(getContext()).inflate(R.layout.qs_customize_panel_content, this); @@ -115,7 +117,7 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene          mToolbar.setTitle(R.string.qs_edit);          mRecyclerView = findViewById(android.R.id.list);          mTransparentView = findViewById(R.id.customizer_transparent_view); -        mTileAdapter = new TileAdapter(getContext()); +        mTileAdapter = new TileAdapter(getContext(), uiEventLogger);          mTileQueryHelper = tileQueryHelper;          mTileQueryHelper.setListener(mTileAdapter);          mRecyclerView.setAdapter(mTileAdapter); diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSEditEvent.kt b/packages/SystemUI/src/com/android/systemui/qs/customize/QSEditEvent.kt deleted file mode 100644 index ff8ddec8397a..000000000000 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSEditEvent.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.qs.customize - -import com.android.internal.logging.UiEvent -import com.android.internal.logging.UiEventLogger - -enum class QSEditEvent(private val _id: Int) : UiEventLogger.UiEventEnum { - -    @UiEvent(doc = "Tile removed from current tiles") -    QS_EDIT_REMOVE(210), -    @UiEvent(doc = "Tile added to current tiles") -    QS_EDIT_ADD(211), -    @UiEvent(doc = "Tile moved") -    QS_EDIT_MOVE(212), -    @UiEvent(doc = "QS customizer open") -    QS_EDIT_OPEN(213), -    @UiEvent(doc = "QS customizer closed") -    QS_EDIT_CLOSED(214), -    @UiEvent(doc = "QS tiles reset") -    QS_EDIT_RESET(215); - -    override fun getId() = _id -}
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java index 58de95d7ed6d..e738cec4962a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java @@ -41,8 +41,8 @@ import androidx.recyclerview.widget.RecyclerView.State;  import androidx.recyclerview.widget.RecyclerView.ViewHolder;  import com.android.internal.logging.UiEventLogger; -import com.android.internal.logging.UiEventLoggerImpl;  import com.android.systemui.R; +import com.android.systemui.qs.QSEditEvent;  import com.android.systemui.qs.QSTileHost;  import com.android.systemui.qs.customize.TileAdapter.Holder;  import com.android.systemui.qs.customize.TileQueryHelper.TileInfo; @@ -92,10 +92,11 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta      private int mAccessibilityFromIndex;      private CharSequence mAccessibilityFromLabel;      private QSTileHost mHost; -    private UiEventLogger mUiEventLogger = new UiEventLoggerImpl(); +    private final UiEventLogger mUiEventLogger; -    public TileAdapter(Context context) { +    public TileAdapter(Context context, UiEventLogger uiEventLogger) {          mContext = context; +        mUiEventLogger = uiEventLogger;          mAccessibilityManager = context.getSystemService(AccessibilityManager.class);          mItemTouchHelper = new ItemTouchHelper(mCallbacks);          mDecoration = new TileItemDecoration(context); diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java index 08c8f86c1125..30e0a766de37 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java @@ -371,6 +371,11 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener          return MetricsEvent.QS_CUSTOM;      } +    @Override +    public final String getMetricsSpec() { +        return mComponent.getPackageName(); +    } +      public void startUnlockAndRun() {          Dependency.get(ActivityStarter.class).postQSRunnableDismissingKeyguard(() -> {              try { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java index 60f6647743d2..7e5f2e1961e1 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java @@ -48,7 +48,9 @@ import androidx.lifecycle.LifecycleOwner;  import androidx.lifecycle.LifecycleRegistry;  import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.logging.InstanceId;  import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger;  import com.android.settingslib.RestrictedLockUtils;  import com.android.settingslib.RestrictedLockUtilsInternal;  import com.android.settingslib.Utils; @@ -62,6 +64,7 @@ import com.android.systemui.plugins.qs.QSTile;  import com.android.systemui.plugins.qs.QSTile.State;  import com.android.systemui.plugins.statusbar.StatusBarStateController;  import com.android.systemui.qs.PagedTileLayout.TilePage; +import com.android.systemui.qs.QSEvent;  import com.android.systemui.qs.QSHost;  import com.android.systemui.qs.QuickStatusBarHeader;  import com.android.systemui.qs.logging.QSLogger; @@ -97,12 +100,14 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy      private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class);      private final StatusBarStateController              mStatusBarStateController = Dependency.get(StatusBarStateController.class); +    private final UiEventLogger mUiEventLogger;      private final QSLogger mQSLogger;      private final ArrayList<Callback> mCallbacks = new ArrayList<>();      private final Object mStaleListener = new Object();      protected TState mState;      private TState mTmpState; +    private final InstanceId mInstanceId;      private boolean mAnnounceNextStateChange;      private String mTileSpec; @@ -156,10 +161,12 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy      protected QSTileImpl(QSHost host) {          mHost = host;          mContext = host.getContext(); +        mInstanceId = host.getNewInstanceId();          mState = newTileState();          mTmpState = newTileState();          mQSSettingsPanelOption = QSSettingsControllerKt.getQSSettingsPanelOption();          mQSLogger = host.getQSLogger(); +        mUiEventLogger = host.getUiEventLogger();      }      protected final void resetStates() { @@ -173,6 +180,11 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy          return mLifecycle;      } +    @Override +    public InstanceId getInstanceId() { +        return mInstanceId; +    } +      /**       * Adds or removes a listening client for the tile. If the tile has one or more       * listening client it will go into the listening state. @@ -247,6 +259,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy          mMetricsLogger.write(populate(new LogMaker(ACTION_QS_CLICK).setType(TYPE_ACTION)                  .addTaggedData(FIELD_STATUS_BAR_STATE,                          mStatusBarStateController.getState()))); +        mUiEventLogger.logWithInstanceId(QSEvent.QS_ACTION_CLICK, 0, getMetricsSpec(), +                getInstanceId());          mQSLogger.logTileClick(mTileSpec, mStatusBarStateController.getState(), mState.state);          mHandler.sendEmptyMessage(H.CLICK);      } @@ -255,6 +269,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy          mMetricsLogger.write(populate(new LogMaker(ACTION_QS_SECONDARY_CLICK).setType(TYPE_ACTION)                  .addTaggedData(FIELD_STATUS_BAR_STATE,                          mStatusBarStateController.getState()))); +        mUiEventLogger.logWithInstanceId(QSEvent.QS_ACTION_SECONDARY_CLICK, 0, getMetricsSpec(), +                getInstanceId());          mQSLogger.logTileSecondaryClick(mTileSpec, mStatusBarStateController.getState(),                  mState.state);          mHandler.sendEmptyMessage(H.SECONDARY_CLICK); @@ -264,6 +280,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy          mMetricsLogger.write(populate(new LogMaker(ACTION_QS_LONG_PRESS).setType(TYPE_ACTION)                  .addTaggedData(FIELD_STATUS_BAR_STATE,                          mStatusBarStateController.getState()))); +        mUiEventLogger.logWithInstanceId(QSEvent.QS_ACTION_LONG_PRESS, 0, getMetricsSpec(), +                getInstanceId());          mQSLogger.logTileLongClick(mTileSpec, mStatusBarStateController.getState(), mState.state);          mHandler.sendEmptyMessage(H.LONG_CLICK); @@ -483,6 +501,11 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy          }      } +    @Override +    public String getMetricsSpec() { +        return mTileSpec; +    } +      /**       * Provides a default label for the tile.       * @return default label for the tile. diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java index 447f48b5db94..89ce125ae985 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java @@ -26,10 +26,12 @@ import android.view.View;  import android.view.ViewGroup;  import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger;  import com.android.internal.logging.nano.MetricsProto.MetricsEvent;  import com.android.settingslib.RestrictedLockUtils;  import com.android.systemui.R;  import com.android.systemui.qs.PseudoGridView; +import com.android.systemui.qs.QSUserSwitcherEvent;  import com.android.systemui.statusbar.policy.UserSwitcherController;  /** @@ -48,8 +50,9 @@ public class UserDetailView extends PseudoGridView {                  R.layout.qs_user_detail, parent, attach);      } -    public void createAndSetAdapter(UserSwitcherController controller) { -        mAdapter = new Adapter(mContext, controller); +    public void createAndSetAdapter(UserSwitcherController controller, +            UiEventLogger uiEventLogger) { +        mAdapter = new Adapter(mContext, controller, uiEventLogger);          ViewGroupAdapterBridge.link(this, mAdapter);      } @@ -63,11 +66,14 @@ public class UserDetailView extends PseudoGridView {          private final Context mContext;          protected UserSwitcherController mController;          private View mCurrentUserView; +        private final UiEventLogger mUiEventLogger; -        public Adapter(Context context, UserSwitcherController controller) { +        public Adapter(Context context, UserSwitcherController controller, +                UiEventLogger uiEventLogger) {              super(controller);              mContext = context;              mController = controller; +            mUiEventLogger = uiEventLogger;          }          @Override @@ -127,6 +133,7 @@ public class UserDetailView extends PseudoGridView {                  mController.startActivity(intent);              } else if (tag.isSwitchToEnabled) {                  MetricsLogger.action(mContext, MetricsEvent.QS_SWITCH_USER); +                mUiEventLogger.log(QSUserSwitcherEvent.QS_USER_SWITCH);                  if (!tag.isAddUser && !tag.isRestricted && !tag.isDisabledByAdmin) {                      if (mCurrentUserView != null) {                          mCurrentUserView.setActivated(false); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java index 581422116c8f..414828953778 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java @@ -17,7 +17,6 @@  package com.android.systemui.screenshot;  import static android.provider.DeviceConfig.NAMESPACE_SYSTEMUI; -import static android.view.View.VISIBLE;  import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;  import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.SCREENSHOT_SCROLLING_ENABLED; @@ -72,7 +71,6 @@ import android.view.animation.AccelerateInterpolator;  import android.view.animation.AnimationUtils;  import android.view.animation.Interpolator;  import android.widget.FrameLayout; -import android.widget.HorizontalScrollView;  import android.widget.ImageView;  import android.widget.LinearLayout;  import android.widget.Toast; @@ -187,10 +185,11 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset      private final View mScreenshotLayout;      private final ScreenshotSelectorView mScreenshotSelectorView; -    private final ImageView mBackgroundView; -    private final ImageView mScreenshotView; +    private final ImageView mScreenshotAnimatedView; +    private final ImageView mScreenshotPreview;      private final ImageView mScreenshotFlash; -    private final HorizontalScrollView mActionsContainer; +    private final ImageView mActionsContainerBackground; +    private final FrameLayout mActionsContainer;      private final LinearLayout mActionsView;      private final ImageView mBackgroundProtection;      private final FrameLayout mDismissButton; @@ -205,8 +204,6 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset      private float mScreenshotOffsetXPx;      private float mScreenshotOffsetYPx; -    private float mScreenshotHeightPx; -    private float mDismissButtonSize;      private float mCornerSizeX;      private float mDismissDeltaY; @@ -244,10 +241,19 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset          // Inflate the screenshot layout          mScreenshotLayout = layoutInflater.inflate(R.layout.global_screenshot, null); -        mBackgroundView = mScreenshotLayout.findViewById(R.id.global_screenshot_background); -        mScreenshotView = mScreenshotLayout.findViewById(R.id.global_screenshot); -        mScreenshotView.setClipToOutline(true); -        mScreenshotView.setOutlineProvider(new ViewOutlineProvider() { +        mScreenshotAnimatedView = +                mScreenshotLayout.findViewById(R.id.global_screenshot_animated_view); +        mScreenshotAnimatedView.setClipToOutline(true); +        mScreenshotAnimatedView.setOutlineProvider(new ViewOutlineProvider() { +            @Override +            public void getOutline(View view, Outline outline) { +                outline.setRoundRect(new Rect(0, 0, view.getWidth(), view.getHeight()), +                        ROUNDED_CORNER_RADIUS * view.getWidth()); +            } +        }); +        mScreenshotPreview = mScreenshotLayout.findViewById(R.id.global_screenshot_preview); +        mScreenshotPreview.setClipToOutline(true); +        mScreenshotPreview.setOutlineProvider(new ViewOutlineProvider() {              @Override              public void getOutline(View view, Outline outline) {                  outline.setRoundRect(new Rect(0, 0, view.getWidth(), view.getHeight()), @@ -255,6 +261,8 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset              }          }); +        mActionsContainerBackground = mScreenshotLayout.findViewById( +                R.id.global_screenshot_actions_container_background);          mActionsContainer = mScreenshotLayout.findViewById(                  R.id.global_screenshot_actions_container);          mActionsView = mScreenshotLayout.findViewById(R.id.global_screenshot_actions); @@ -273,9 +281,8 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset          mScreenshotLayout.setFocusable(true);          mScreenshotSelectorView.setFocusable(true);          mScreenshotSelectorView.setFocusableInTouchMode(true); -        mScreenshotView.setPivotX(0); -        mScreenshotView.setPivotY(0); -        mActionsContainer.setPivotX(0); +        mScreenshotAnimatedView.setPivotX(0); +        mScreenshotAnimatedView.setPivotY(0);          // Setup the window that we are going to use          mWindowLayoutParams = new WindowManager.LayoutParams( @@ -297,10 +304,6 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset          mScreenshotOffsetXPx = resources.getDimensionPixelSize(R.dimen.screenshot_offset_x);          mScreenshotOffsetYPx = resources.getDimensionPixelSize(R.dimen.screenshot_offset_y); -        mScreenshotHeightPx = -                resources.getDimensionPixelSize(R.dimen.screenshot_action_container_offset_y); -        mDismissButtonSize = resources.getDimensionPixelSize( -                R.dimen.screenshot_dismiss_button_tappable_size);          mCornerSizeX = resources.getDimensionPixelSize(R.dimen.global_screenshot_x_scale);          mDismissDeltaY = resources.getDimensionPixelSize(R.dimen.screenshot_dismissal_height_delta); @@ -318,7 +321,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset          Region touchRegion = new Region();          Rect screenshotRect = new Rect(); -        mScreenshotView.getBoundsOnScreen(screenshotRect); +        mScreenshotPreview.getBoundsOnScreen(screenshotRect);          touchRegion.op(screenshotRect, Region.Op.UNION);          Rect actionsRect = new Rect();          mActionsContainer.getBoundsOnScreen(actionsRect); @@ -469,6 +472,8 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset       */      private void dismissScreenshot(String reason, boolean immediate) {          Log.v(TAG, "clearing screenshot: " + reason); +        mScreenshotHandler.removeMessages(MESSAGE_CORNER_TIMEOUT); +        mScreenshotLayout.getViewTreeObserver().removeOnComputeInternalInsetsListener(this);          if (!immediate) {              mDismissAnimation = createScreenshotDismissAnimation();              mDismissAnimation.addListener(new AnimatorListenerAdapter() { @@ -488,23 +493,23 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset          if (mScreenshotLayout.isAttachedToWindow()) {              mWindowManager.removeView(mScreenshotLayout);          } -        mScreenshotHandler.removeMessages(MESSAGE_CORNER_TIMEOUT); -        mScreenshotLayout.getViewTreeObserver().removeOnComputeInternalInsetsListener(this);          // Clear any references to the bitmap -        mScreenshotView.setImageBitmap(null); +        mScreenshotPreview.setImageBitmap(null); +        mScreenshotAnimatedView.setImageBitmap(null); +        mActionsContainerBackground.setVisibility(View.GONE);          mActionsContainer.setVisibility(View.GONE); -        mBackgroundView.setVisibility(View.GONE);          mBackgroundProtection.setAlpha(0f);          mDismissButton.setVisibility(View.GONE); -        mScreenshotView.setVisibility(View.GONE); -        mScreenshotView.setLayerType(View.LAYER_TYPE_NONE, null); -        mScreenshotView.setContentDescription( +        mScreenshotPreview.setVisibility(View.GONE); +        mScreenshotPreview.setLayerType(View.LAYER_TYPE_NONE, null); +        mScreenshotPreview.setContentDescription(                  mContext.getResources().getString(R.string.screenshot_preview_description));          mScreenshotLayout.setAlpha(1);          mDismissButton.setTranslationY(0);          mActionsContainer.setTranslationY(0); -        mScreenshotView.setTranslationY(0); +        mActionsContainerBackground.setTranslationY(0); +        mScreenshotPreview.setTranslationY(0);      }      /** @@ -514,9 +519,8 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset       */      private void reloadAssets() {          mDismissImage.setImageDrawable(mContext.getDrawable(R.drawable.screenshot_cancel)); -        mActionsContainer.setBackground( +        mActionsContainerBackground.setBackground(                  mContext.getDrawable(R.drawable.action_chip_container_background)); -      }      /** @@ -558,10 +562,6 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset                      Toast.LENGTH_SHORT).show();          } - -        // Add the view for the animation -        mScreenshotView.setImageBitmap(mScreenBitmap); -          mScreenshotAnimation = createScreenshotDropInAnimation(w, h, screenRect);          saveScreenshotInWorkerThread(finisher, new ActionsReadyListener() { @@ -600,8 +600,8 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset              // Play the shutter sound to notify that we've taken a screenshot              mCameraSound.play(MediaActionSound.SHUTTER_CLICK); -            mScreenshotView.setLayerType(View.LAYER_TYPE_HARDWARE, null); -            mScreenshotView.buildLayer(); +            mScreenshotPreview.setLayerType(View.LAYER_TYPE_HARDWARE, null); +            mScreenshotPreview.buildLayer();              mScreenshotAnimation.start();          });      } @@ -609,6 +609,14 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset      private AnimatorSet createScreenshotDropInAnimation(int width, int height, Rect bounds) {          float cornerScale = mCornerSizeX / (float) width; +        mScreenshotAnimatedView.setScaleX(1); +        mScreenshotAnimatedView.setScaleY(1); +        mScreenshotAnimatedView.setX(0); +        mScreenshotAnimatedView.setY(0); + +        mScreenshotAnimatedView.setImageBitmap(mScreenBitmap); +        mScreenshotPreview.setImageBitmap(mScreenBitmap); +          AnimatorSet dropInAnimation = new AnimatorSet();          ValueAnimator flashInAnimator = ValueAnimator.ofFloat(0, 1);          flashInAnimator.setDuration(SCREENSHOT_FLASH_IN_DURATION_MS); @@ -623,9 +631,16 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset                  mScreenshotFlash.setAlpha((float) animation.getAnimatedValue()));          final PointF startPos = new PointF(bounds.centerX(), bounds.centerY()); -        final PointF finalPos = new PointF(mScreenshotOffsetXPx + width * cornerScale / 2f, -                mDisplayMetrics.heightPixels - mScreenshotOffsetYPx -                        - height * cornerScale / 2f); +        float finalX; +        if (mContext.getResources().getConfiguration().getLayoutDirection() +                == View.LAYOUT_DIRECTION_LTR) { +            finalX = mScreenshotOffsetXPx + width * cornerScale / 2f; +        } else { +            finalX = width - mScreenshotOffsetXPx - width * cornerScale / 2f; +        } +        float finalY = +                mDisplayMetrics.heightPixels - mScreenshotOffsetYPx - height * cornerScale / 2f; +        final PointF finalPos = new PointF(finalX, finalY);          ValueAnimator toCorner = ValueAnimator.ofFloat(0, 1);          toCorner.setDuration(SCREENSHOT_TO_CORNER_Y_DURATION_MS); @@ -639,30 +654,33 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset              if (t < scalePct) {                  float scale = MathUtils.lerp(                          1, cornerScale, mFastOutSlowIn.getInterpolation(t / scalePct)); -                mScreenshotView.setScaleX(scale); -                mScreenshotView.setScaleY(scale); +                mScreenshotAnimatedView.setScaleX(scale); +                mScreenshotAnimatedView.setScaleY(scale);              } else { -                mScreenshotView.setScaleX(cornerScale); -                mScreenshotView.setScaleY(cornerScale); +                mScreenshotAnimatedView.setScaleX(cornerScale); +                mScreenshotAnimatedView.setScaleY(cornerScale);              } +            float currentScaleX = mScreenshotAnimatedView.getScaleX(); +            float currentScaleY = mScreenshotAnimatedView.getScaleY(); +              if (t < xPositionPct) {                  float xCenter = MathUtils.lerp(startPos.x, finalPos.x,                          mFastOutSlowIn.getInterpolation(t / xPositionPct)); -                mScreenshotView.setX(xCenter - width * mScreenshotView.getScaleX() / 2f); +                mScreenshotAnimatedView.setX(xCenter - width * currentScaleX / 2f);              } else { -                mScreenshotView.setX(finalPos.x - width * mScreenshotView.getScaleX() / 2f); +                mScreenshotAnimatedView.setX(finalPos.x - width * currentScaleX / 2f);              }              float yCenter = MathUtils.lerp(startPos.y, finalPos.y,                      mFastOutSlowIn.getInterpolation(t)); -            mScreenshotView.setY(yCenter - height * mScreenshotView.getScaleY() / 2f); +            mScreenshotAnimatedView.setY(yCenter - height * currentScaleY / 2f);          });          toCorner.addListener(new AnimatorListenerAdapter() {              @Override              public void onAnimationStart(Animator animation) {                  super.onAnimationStart(animation); -                mScreenshotView.setVisibility(View.VISIBLE); +                mScreenshotAnimatedView.setVisibility(View.VISIBLE);              }          }); @@ -676,15 +694,16 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset              @Override              public void onAnimationEnd(Animator animation) {                  super.onAnimationEnd(animation); -                mScreenshotView.setScaleX(cornerScale); -                mScreenshotView.setScaleY(cornerScale); -                mScreenshotView.setX(finalPos.x - width * cornerScale / 2f); -                mScreenshotView.setY(finalPos.y - height * cornerScale / 2f); +                mScreenshotAnimatedView.setScaleX(1); +                mScreenshotAnimatedView.setScaleY(1); +                mScreenshotAnimatedView.setX(finalPos.x - width * cornerScale / 2f); +                mScreenshotAnimatedView.setY(finalPos.y - height * cornerScale / 2f);                  Rect bounds = new Rect(); -                mScreenshotView.getBoundsOnScreen(bounds); -                mDismissButton.setX(bounds.right - mDismissButtonSize / 2f); -                mDismissButton.setY(bounds.top - mDismissButtonSize / 2f); +                mDismissButton.getBoundsOnScreen(bounds); +                mScreenshotAnimatedView.setVisibility(View.GONE); +                mScreenshotPreview.setVisibility(View.VISIBLE);                  mDismissButton.setVisibility(View.VISIBLE); +                mScreenshotLayout.forceLayout();              }          }); @@ -747,7 +766,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset          mActionsView.addView(editChip);          chips.add(editChip); -        mScreenshotView.setOnClickListener(v -> { +        mScreenshotPreview.setOnClickListener(v -> {              try {                  imageData.editAction.actionIntent.send();                  mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_PREVIEW_TAPPED); @@ -757,7 +776,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset                  Log.e(TAG, "Intent cancelled", e);              }          }); -        mScreenshotView.setContentDescription(imageData.editAction.title); +        mScreenshotPreview.setContentDescription(imageData.editAction.title);          if (DeviceConfig.getBoolean(NAMESPACE_SYSTEMUI, SCREENSHOT_SCROLLING_ENABLED, false)) {              ScreenshotActionChip scrollChip = (ScreenshotActionChip) inflater.inflate( @@ -775,20 +794,33 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset              chips.add(scrollChip);          } +        // remove the margin from the last chip so that it's correctly aligned with the end +        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) +                mActionsView.getChildAt(mActionsView.getChildCount() - 1).getLayoutParams(); +        params.setMarginEnd(0); +          ValueAnimator animator = ValueAnimator.ofFloat(0, 1);          animator.setDuration(SCREENSHOT_ACTIONS_EXPANSION_DURATION_MS);          float alphaFraction = (float) SCREENSHOT_ACTIONS_ALPHA_DURATION_MS                  / SCREENSHOT_ACTIONS_EXPANSION_DURATION_MS; -        mActionsContainer.setVisibility(VISIBLE); -        mActionsContainer.setAlpha(0); +        mActionsContainer.setVisibility(View.VISIBLE); +        mActionsContainer.setAlpha(0f); +        mActionsContainerBackground.setAlpha(0f); +        mActionsContainerBackground.setVisibility(View.VISIBLE); + +        mActionsContainer.setPivotX(0); +        mActionsContainerBackground.setPivotX(0);          animator.addUpdateListener(animation -> {              float t = animation.getAnimatedFraction();              mBackgroundProtection.setAlpha(t); -            mActionsContainer.setAlpha(t < alphaFraction ? t / alphaFraction : 1); +            float containerAlpha = t < alphaFraction ? t / alphaFraction : 1; +            mActionsContainer.setAlpha(containerAlpha); +            mActionsContainerBackground.setAlpha(containerAlpha);              float containerScale = SCREENSHOT_ACTIONS_START_SCALE_X                      + (t * (1 - SCREENSHOT_ACTIONS_START_SCALE_X));              mActionsContainer.setScaleX(containerScale); +            mActionsContainerBackground.setScaleX(containerScale);              for (ScreenshotActionChip chip : chips) {                  chip.setAlpha(t);                  chip.setScaleX(1 / containerScale); // invert to keep size of children constant @@ -808,13 +840,14 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset          ValueAnimator yAnim = ValueAnimator.ofFloat(0, 1);          yAnim.setInterpolator(mAccelerateInterpolator);          yAnim.setDuration(SCREENSHOT_DISMISS_Y_DURATION_MS); -        float screenshotStartY = mScreenshotView.getTranslationY(); +        float screenshotStartY = mScreenshotPreview.getTranslationY();          float dismissStartY = mDismissButton.getTranslationY();          yAnim.addUpdateListener(animation -> {              float yDelta = MathUtils.lerp(0, mDismissDeltaY, animation.getAnimatedFraction()); -            mScreenshotView.setTranslationY(screenshotStartY + yDelta); +            mScreenshotPreview.setTranslationY(screenshotStartY + yDelta);              mDismissButton.setTranslationY(dismissStartY + yDelta);              mActionsContainer.setTranslationY(yDelta); +            mActionsContainerBackground.setTranslationY(yDelta);          });          AnimatorSet animSet = new AnimatorSet(); diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java index 2df450604d3b..060760a2f940 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java @@ -29,6 +29,7 @@ import android.annotation.Nullable;  import android.content.Context;  import android.content.res.Configuration;  import android.graphics.Rect; +import android.graphics.Region;  import android.graphics.Region.Op;  import android.hardware.display.DisplayManager;  import android.os.Bundle; @@ -338,12 +339,12 @@ public class DividerView extends FrameLayout implements OnTouchListener,      @Override      protected void onLayout(boolean changed, int left, int top, int right, int bottom) { +        super.onLayout(changed, left, top, right, bottom);          if (mFirstLayout) {              // Wait for first layout so that the ViewRootImpl surface has been created.              initializeSurfaceState();              mFirstLayout = false;          } -        super.onLayout(changed, left, top, right, bottom);          int minimizeLeft = 0;          int minimizeTop = 0;          if (mDockSide == WindowManager.DOCKED_TOP) { @@ -783,6 +784,20 @@ public class DividerView extends FrameLayout implements OnTouchListener,          setResizeDimLayer(t, false /* secondary */, 0.f /* alpha */);          t.apply();          mTiles.releaseTransaction(t); + +        // Get the actually-visible bar dimensions (relative to full window). This is a thin +        // bar going through the center. +        final Rect dividerBar = isHorizontalDivision() +                ? new Rect(0, mDividerInsets, mSplitLayout.mDisplayLayout.width(), +                mDividerInsets + mDividerSize) +                : new Rect(mDividerInsets, 0, mDividerInsets + mDividerSize, +                mSplitLayout.mDisplayLayout.height()); +        final Region touchRegion = new Region(dividerBar); +        // Add in the "draggable" portion. While not visible, this is an expanded area that the +        // user can interact with. +        touchRegion.union(new Rect(mHandle.getLeft(), mHandle.getTop(), +                mHandle.getRight(), mHandle.getBottom())); +        mWindowManager.setTouchRegion(touchRegion);      }      public void setMinimizedDockStack(boolean minimized, boolean isHomeStackResizable) { diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerWindowManager.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerWindowManager.java index 729df3887915..6ea3132ac942 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerWindowManager.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerWindowManager.java @@ -27,6 +27,7 @@ import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMA  import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;  import android.graphics.PixelFormat; +import android.graphics.Region;  import android.os.Binder;  import android.view.View;  import android.view.WindowManager; @@ -103,4 +104,12 @@ public class DividerWindowManager {              mSystemWindows.updateViewLayout(mView, mLp);          }      } + +    /** Sets the touch region to `touchRegion`. Use null to unset.*/ +    public void setTouchRegion(Region touchRegion) { +        if (mView == null) { +            return; +        } +        mSystemWindows.setTouchableRegion(mView, touchRegion); +    }  } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt index 866980458cad..c70d3847bd6f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt @@ -38,8 +38,8 @@ open class BlurUtils @Inject constructor(      @Main private val resources: Resources,      dumpManager: DumpManager  ) : Dumpable { -    private val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius) -    private val maxBlurRadius = resources.getDimensionPixelSize(R.dimen.max_window_blur_radius) +    val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius) +    val maxBlurRadius = resources.getDimensionPixelSize(R.dimen.max_window_blur_radius)      private val blurSupportedSysProp = SystemProperties              .getBoolean("ro.surface_flinger.supports_background_blur", false)      private val blurDisabledSysProp = SystemProperties diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt index 25f1a974bc36..7aae724ae80a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt @@ -20,7 +20,9 @@ import android.animation.Animator  import android.animation.AnimatorListenerAdapter  import android.animation.ValueAnimator  import android.app.WallpaperManager +import android.os.SystemClock  import android.util.Log +import android.util.MathUtils  import android.view.Choreographer  import android.view.View  import androidx.annotation.VisibleForTesting @@ -44,6 +46,7 @@ import java.io.PrintWriter  import javax.inject.Inject  import javax.inject.Singleton  import kotlin.math.max +import kotlin.math.sign  /**   * Controller responsible for statusbar window blur. @@ -61,6 +64,11 @@ class NotificationShadeDepthController @Inject constructor(  ) : PanelExpansionListener, Dumpable {      companion object {          private const val WAKE_UP_ANIMATION_ENABLED = true +        private const val VELOCITY_SCALE = 100f +        private const val MAX_VELOCITY = 3000f +        private const val MIN_VELOCITY = -MAX_VELOCITY +        private const val INTERACTION_BLUR_FRACTION = 0.4f +        private const val ANIMATION_BLUR_FRACTION = 1f - INTERACTION_BLUR_FRACTION          private const val TAG = "DepthController"      } @@ -71,8 +79,19 @@ class NotificationShadeDepthController @Inject constructor(      private var updateScheduled: Boolean = false      private var shadeExpansion = 0f      private var ignoreShadeBlurUntilHidden: Boolean = false +    private var isClosed: Boolean = true +    private var isOpen: Boolean = false +    private var isBlurred: Boolean = false + +    private var prevTracking: Boolean = false +    private var prevTimestamp: Long = -1 +    private var prevShadeDirection = 0 +    private var prevShadeVelocity = 0f +      @VisibleForTesting      var shadeSpring = DepthAnimation() +    var shadeAnimation = DepthAnimation() +      @VisibleForTesting      var globalActionsSpring = DepthAnimation()      var showingHomeControls: Boolean = false @@ -98,12 +117,15 @@ class NotificationShadeDepthController @Inject constructor(                  return              } -            if (shadeSpring.radius == 0) { +            if (shadeSpring.radius == 0 && shadeAnimation.radius == 0) {                  return              }              ignoreShadeBlurUntilHidden = true              shadeSpring.animateTo(0)              shadeSpring.finishIfRunning() + +            shadeAnimation.animateTo(0) +            shadeAnimation.finishIfRunning()          }      /** @@ -132,8 +154,11 @@ class NotificationShadeDepthController @Inject constructor(      @VisibleForTesting      val updateBlurCallback = Choreographer.FrameCallback {          updateScheduled = false - -        var shadeRadius = max(shadeSpring.radius, wakeAndUnlockBlurRadius).toFloat() +        val normalizedBlurRadius = MathUtils.constrain(shadeAnimation.radius, +                blurUtils.minBlurRadius, blurUtils.maxBlurRadius) +        val combinedBlur = (shadeSpring.radius * INTERACTION_BLUR_FRACTION + +                normalizedBlurRadius * ANIMATION_BLUR_FRACTION).toInt() +        var shadeRadius = max(combinedBlur, wakeAndUnlockBlurRadius).toFloat()          shadeRadius *= 1f - brightnessMirrorSpring.ratio          val launchProgress = notificationLaunchAnimationParams?.linearProgress ?: 0f          shadeRadius *= (1f - launchProgress) * (1f - launchProgress) @@ -208,12 +233,15 @@ class NotificationShadeDepthController @Inject constructor(      private val statusBarStateCallback = object : StatusBarStateController.StateListener {          override fun onStateChanged(newState: Int) { +            updateShadeAnimationBlur( +                    shadeExpansion, prevTracking, prevShadeVelocity, prevShadeDirection)              updateShadeBlur()          }          override fun onDozingChanged(isDozing: Boolean) {              if (isDozing) {                  shadeSpring.finishIfRunning() +                shadeAnimation.finishIfRunning()                  globalActionsSpring.finishIfRunning()                  brightnessMirrorSpring.finishIfRunning()              } @@ -234,24 +262,110 @@ class NotificationShadeDepthController @Inject constructor(              // Stop blur effect when scrims is opaque to avoid unnecessary GPU composition.              visibility -> scrimsVisible = visibility == ScrimController.OPAQUE          } +        shadeAnimation.setStiffness(SpringForce.STIFFNESS_LOW) +        shadeAnimation.setDampingRatio(SpringForce.DAMPING_RATIO_NO_BOUNCY)      }      /**       * Update blurs when pulling down the shade       */      override fun onPanelExpansionChanged(expansion: Float, tracking: Boolean) { -        if (expansion == shadeExpansion) { +        val timestamp = SystemClock.elapsedRealtimeNanos() + +        if (shadeExpansion == expansion && prevTracking == tracking) { +            prevTimestamp = timestamp              return          } + +        var deltaTime = 1f +        if (prevTimestamp < 0) { +            prevTimestamp = timestamp +        } else { +            deltaTime = MathUtils.constrain( +                    ((timestamp - prevTimestamp) / 1E9).toFloat(), 0.00001f, 1f) +        } + +        val diff = expansion - shadeExpansion +        val shadeDirection = sign(diff).toInt() +        val shadeVelocity = MathUtils.constrain( +            VELOCITY_SCALE * diff / deltaTime, MIN_VELOCITY, MAX_VELOCITY) +        updateShadeAnimationBlur(expansion, tracking, shadeVelocity, shadeDirection) + +        prevShadeDirection = shadeDirection +        prevShadeVelocity = shadeVelocity          shadeExpansion = expansion +        prevTracking = tracking +        prevTimestamp = timestamp +          updateShadeBlur()      } +    private fun updateShadeAnimationBlur( +        expansion: Float, +        tracking: Boolean, +        velocity: Float, +        direction: Int +    ) { +        if (isOnKeyguardNotDismissing()) { +            if (expansion > 0f) { +                // Blur view if user starts animating in the shade. +                if (isClosed) { +                    animateBlur(true, velocity) +                    isClosed = false +                } + +                // If we were blurring out and the user stopped the animation, blur view. +                if (tracking && !isBlurred) { +                    animateBlur(true, 0f) +                } + +                // If shade is being closed and the user isn't interacting with it, un-blur. +                if (!tracking && direction < 0 && isBlurred) { +                    animateBlur(false, velocity) +                } + +                if (expansion == 1f) { +                    if (!isOpen) { +                        isOpen = true +                        // If shade is open and view is not blurred, blur. +                        if (!isBlurred) { +                            animateBlur(true, velocity) +                        } +                    } +                } else { +                    isOpen = false +                } +                // Automatic animation when the user closes the shade. +            } else if (!isClosed) { +                isClosed = true +                // If shade is closed and view is not blurred, blur. +                if (isBlurred) { +                    animateBlur(false, velocity) +                } +            } +        } else { +            animateBlur(false, 0f) +            isClosed = true +            isOpen = false +        } +    } + +    private fun animateBlur(blur: Boolean, velocity: Float) { +        isBlurred = blur + +        val targetBlurNormalized = if (blur && isOnKeyguardNotDismissing()) { +            1f +        } else { +            0f +        } + +        shadeAnimation.setStartVelocity(velocity) +        shadeAnimation.animateTo(blurUtils.blurRadiusOfRatio(targetBlurNormalized)) +    } +      private fun updateShadeBlur() {          var newBlur = 0 -        val state = statusBarStateController.state -        if ((state == StatusBarState.SHADE || state == StatusBarState.SHADE_LOCKED) && -                !keyguardStateController.isKeyguardFadingAway) { +        if (isOnKeyguardNotDismissing()) {              newBlur = blurUtils.blurRadiusOfRatio(shadeExpansion)          }          shadeSpring.animateTo(newBlur) @@ -266,6 +380,12 @@ class NotificationShadeDepthController @Inject constructor(          choreographer.postFrameCallback(updateBlurCallback)      } +    private fun isOnKeyguardNotDismissing(): Boolean { +        val state = statusBarStateController.state +        return (state == StatusBarState.SHADE || state == StatusBarState.SHADE_LOCKED) && +                !keyguardStateController.isKeyguardFadingAway +    } +      fun updateGlobalDialogVisibility(visibility: Float, dialogView: View?) {          globalActionsSpring.animateTo(blurUtils.blurRadiusOfRatio(visibility), dialogView)      } @@ -275,6 +395,7 @@ class NotificationShadeDepthController @Inject constructor(              it.println("StatusBarWindowBlurController:")              it.increaseIndent()              it.println("shadeRadius: ${shadeSpring.radius}") +            it.println("shadeAnimation: ${shadeAnimation.radius}")              it.println("globalActionsRadius: ${globalActionsSpring.radius}")              it.println("brightnessMirrorRadius: ${brightnessMirrorSpring.radius}")              it.println("wakeAndUnlockBlur: $wakeAndUnlockBlurRadius") @@ -311,7 +432,7 @@ class NotificationShadeDepthController @Inject constructor(          private var view: View? = null          private var springAnimation = SpringAnimation(this, object : -            FloatPropertyCompat<DepthAnimation>("blurRadius") { +                FloatPropertyCompat<DepthAnimation>("blurRadius") {              override fun setValue(rect: DepthAnimation?, value: Float) {                  radius = value.toInt()                  scheduleUpdate(view) @@ -343,5 +464,17 @@ class NotificationShadeDepthController @Inject constructor(                  springAnimation.skipToEnd()              }          } + +        fun setStiffness(stiffness: Float) { +            springAnimation.spring.stiffness = stiffness +        } + +        fun setDampingRatio(dampingRation: Float) { +            springAnimation.spring.dampingRatio = dampingRation +        } + +        fun setStartVelocity(velocity: Float) { +            springAnimation.setStartVelocity(velocity) +        }      }  } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java index e81e5cae5bfc..229aa6d98e0a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java @@ -24,6 +24,7 @@ import android.util.Log;  import android.view.animation.Interpolator;  import com.android.internal.annotations.GuardedBy; +import com.android.internal.logging.UiEventLogger;  import com.android.systemui.DejankUtils;  import com.android.systemui.Dumpable;  import com.android.systemui.Interpolators; @@ -69,6 +70,7 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll              };      private final ArrayList<RankedListener> mListeners = new ArrayList<>(); +    private final UiEventLogger mUiEventLogger;      private int mState;      private int mLastState;      private boolean mLeaveOpenOnKeyguardHide; @@ -119,7 +121,8 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll      private Interpolator mDozeInterpolator = Interpolators.FAST_OUT_SLOW_IN;      @Inject -    public StatusBarStateControllerImpl() { +    public StatusBarStateControllerImpl(UiEventLogger uiEventLogger) { +        mUiEventLogger = uiEventLogger;          for (int i = 0; i < HISTORY_SIZE; i++) {              mHistoricalRecords[i] = new HistoricalState();          } @@ -155,6 +158,7 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll              }              mLastState = mState;              mState = state; +            mUiEventLogger.log(StatusBarStateEvent.fromState(mState));              for (RankedListener rl : new ArrayList<>(mListeners)) {                  rl.mListener.onStateChanged(mState);              } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateEvent.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateEvent.java new file mode 100644 index 000000000000..8330169980d4 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateEvent.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar; + +import com.android.internal.logging.UiEvent; +import com.android.internal.logging.UiEventLogger; + +/** + * Events for changes in the {@link StatusBarState}. + */ +public enum StatusBarStateEvent implements UiEventLogger.UiEventEnum { + +    @UiEvent(doc = "StatusBarState changed to unknown state") +    STATUS_BAR_STATE_UNKNOWN(428), + +    @UiEvent(doc = "StatusBarState changed to SHADE state") +    STATUS_BAR_STATE_SHADE(429), + +    @UiEvent(doc = "StatusBarState changed to KEYGUARD state") +    STATUS_BAR_STATE_KEYGUARD(430), + +    @UiEvent(doc = "StatusBarState changed to SHADE_LOCKED state") +    STATUS_BAR_STATE_SHADE_LOCKED(431), + +    @UiEvent(doc = "StatusBarState changed to FULLSCREEN_USER_SWITCHER state") +    STATUS_BAR_STATE_FULLSCREEN_USER_SWITCHER(432); + +    private int mId; +    StatusBarStateEvent(int id) { +        mId = id; +    } + +    @Override +    public int getId() { +        return mId; +    } + +    /** +     * Return the event associated with the state. +     */ +    public static StatusBarStateEvent fromState(int state) { +        switch(state) { +            case StatusBarState.SHADE: +                return STATUS_BAR_STATE_SHADE; +            case StatusBarState.KEYGUARD: +                return STATUS_BAR_STATE_KEYGUARD; +            case StatusBarState.SHADE_LOCKED: +                return STATUS_BAR_STATE_SHADE_LOCKED; +            case StatusBarState.FULLSCREEN_USER_SWITCHER: +                return STATUS_BAR_STATE_FULLSCREEN_USER_SWITCHER; +            default: +                return STATUS_BAR_STATE_UNKNOWN; +        } +    } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java index a0b144b4497c..2ab329e9574c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java @@ -54,9 +54,14 @@ public class DynamicPrivacyController implements KeyguardStateController.Callbac      }      @Override +    public void onKeyguardFadingAwayChanged() { +        onUnlockedChanged(); +    } + +    @Override      public void onUnlockedChanged() {          if (isDynamicPrivacyEnabled()) { -            // We only want to notify our listeners if dynamic privacy is actually active +            // We only want to notify our listeners if dynamic privacy is actually enabled              boolean dynamicallyUnlocked = isDynamicallyUnlocked();              if (dynamicallyUnlocked != mLastDynamicUnlocked || mCacheInvalid) {                  mLastDynamicUnlocked = dynamicallyUnlocked; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java index 78ee5f25b111..1dbfa32cdf41 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java @@ -24,8 +24,6 @@ import android.os.Handler;  import android.view.accessibility.AccessibilityManager;  import com.android.internal.logging.MetricsLogger; -import com.android.internal.logging.UiEventLogger; -import com.android.internal.logging.UiEventLoggerImpl;  import com.android.systemui.R;  import com.android.systemui.dagger.qualifiers.Main;  import com.android.systemui.dagger.qualifiers.UiBackground; @@ -161,13 +159,6 @@ public interface NotificationsModule {          return new NotificationPanelLoggerImpl();      } -    /** Provides an instance of {@link com.android.internal.logging.UiEventLogger} */ -    @Singleton -    @Provides -    static UiEventLogger provideUiEventLogger() { -        return new UiEventLoggerImpl(); -    } -      /** Provides an instance of {@link NotificationBlockingHelperManager} */      @Singleton      @Provides diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java index 324bc923fb35..fefad531377f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java @@ -336,6 +336,14 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter                  return false;              }          } + +        if (entry.hasJustLaunchedFullScreenIntent()) { +            if (DEBUG_HEADS_UP) { +                Log.d(TAG, "No alerting: recent fullscreen: " + sbn.getKey()); +            } +            return false; +        } +          return true;      } @@ -365,13 +373,6 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter              return false;          } -        if (entry.hasJustLaunchedFullScreenIntent()) { -            if (DEBUG_HEADS_UP) { -                Log.d(TAG, "No alerting: recent fullscreen: " + sbn.getKey()); -            } -            return false; -        } -          return true;      } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java index f8844c715230..2e5af9a7414a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java @@ -1680,7 +1680,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView      public void reset() {          mShowingPublicInitialized = false;          unDismiss(); -        resetTranslation(); +        if (mMenuRow == null || !mMenuRow.isMenuVisible()) { +            resetTranslation(); +        }          onHeightReset();          requestLayout();      } @@ -1838,10 +1840,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView      }      public void resetTranslation() { -        if (mMenuRow != null && mMenuRow.isMenuVisible()) { -            return; -        } -          if (mTranslateAnim != null) {              mTranslateAnim.cancel();          } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java index 32477a6f39b7..9e70f0ac29d5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java @@ -72,6 +72,7 @@ public class HybridConversationNotificationView extends HybridNotificationView {          mFacePileProtectionWidth = getResources().getDimensionPixelSize(                  R.dimen.conversation_single_line_face_pile_protection_width);          mTransformationHelper.addViewTransformingToSimilar(mConversationIconView); +        mTransformationHelper.addTransformedView(mConversationSenderName);      }      @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java index ba8a63428cf6..6748e3f76771 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java @@ -34,8 +34,10 @@ import android.os.RemoteException;  import android.os.SystemClock;  import android.os.SystemProperties;  import android.os.UserHandle; +import android.provider.DeviceConfig;  import android.provider.Settings;  import android.util.Log; +import android.util.TypedValue;  import android.view.ISystemGestureExclusionListener;  import android.view.InputChannel;  import android.view.InputDevice; @@ -50,6 +52,7 @@ import android.view.ViewConfiguration;  import android.view.WindowManager;  import android.view.WindowManagerGlobal; +import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;  import com.android.internal.policy.GestureNavigationSettingsObserver;  import com.android.systemui.Dependency;  import com.android.systemui.R; @@ -144,9 +147,9 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa      // The right side edge width where touch down is allowed      private int mEdgeWidthRight;      // The bottom gesture area height -    private int mBottomGestureHeight; +    private float mBottomGestureHeight;      // The slop to distinguish between horizontal and vertical motion -    private final float mTouchSlop; +    private float mTouchSlop;      // Duration after which we consider the event as longpress.      private final int mLongPressTimeout;      private int mStartingQuickstepRotation = -1; @@ -211,10 +214,6 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa          mPluginManager = pluginManager;          Dependency.get(ProtoTracer.class).add(this); -        // Reduce the default touch slop to ensure that we can intercept the gesture -        // before the app starts to react to it. -        // TODO(b/130352502) Tune this value and extract into a constant -        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop() * 0.75f;          mLongPressTimeout = Math.min(MAX_LONG_PRESS_TIMEOUT,                  ViewConfiguration.getLongPressTimeout()); @@ -233,8 +232,20 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa          mIsBackGestureAllowed =                  !mGestureNavigationSettingsObserver.areNavigationButtonForcedVisible(); -        mBottomGestureHeight = res.getDimensionPixelSize( +        final float defaultGestureHeight = res.getDimension(                  com.android.internal.R.dimen.navigation_bar_gesture_height); +        final float gestureHeight = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI, +                SystemUiDeviceConfigFlags.BACK_GESTURE_BOTTOM_HEIGHT, +                defaultGestureHeight); +        mBottomGestureHeight = TypedValue.applyDimension( +                TypedValue.COMPLEX_UNIT_DIP, gestureHeight, res.getDisplayMetrics()); + +        // Reduce the default touch slop to ensure that we can intercept the gesture +        // before the app starts to react to it. +        // TODO(b/130352502) Tune this value and extract into a constant +        final float backGestureSlop = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI, +                        SystemUiDeviceConfigFlags.BACK_GESTURE_SLOP_MULTIPLIER, 0.75f); +        mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop() * backGestureSlop;      }      @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java index 462b42a44c17..fc6a02840891 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java @@ -273,8 +273,7 @@ public class NotificationShadeWindowController implements Callback, Dumpable,      private void applyFocusableFlag(State state) {          boolean panelFocusable = state.mNotificationShadeFocusable && state.mPanelExpanded;          if (state.mBouncerShowing && (state.mKeyguardOccluded || state.mKeyguardNeedsInput) -                || ENABLE_REMOTE_INPUT && state.mRemoteInputActive -                || state.mBubbleExpanded) { +                || ENABLE_REMOTE_INPUT && state.mRemoteInputActive) {              mLpChanged.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE;              mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM;          } else if (state.isKeyguardShowingAndNotOccluded() || panelFocusable) { @@ -320,7 +319,7 @@ public class NotificationShadeWindowController implements Callback, Dumpable,      private boolean isExpanded(State state) {          return !state.mForceCollapsed && (state.isKeyguardShowingAndNotOccluded()                  || state.mPanelVisible || state.mKeyguardFadingAway || state.mBouncerShowing -                || state.mHeadsUpShowing || state.mBubblesShowing +                || state.mHeadsUpShowing                  || state.mScrimsVisibility != ScrimController.TRANSPARENT)                  || state.mBackgroundBlurRadius > 0;      } @@ -579,36 +578,6 @@ public class NotificationShadeWindowController implements Callback, Dumpable,      }      /** -     * Sets whether there are bubbles showing on the screen. -     */ -    public void setBubblesShowing(boolean bubblesShowing) { -        mCurrentState.mBubblesShowing = bubblesShowing; -        apply(mCurrentState); -    } - -    /** -     * The bubbles showing state for the status bar. -     */ -    public boolean getBubblesShowing() { -        return mCurrentState.mBubblesShowing; -    } - -    /** -     * Sets if there is a bubble being expanded on the screen. -     */ -    public void setBubbleExpanded(boolean bubbleExpanded) { -        mCurrentState.mBubbleExpanded = bubbleExpanded; -        apply(mCurrentState); -    } - -    /** -     * Whether the bubble is shown in expanded state for the status bar. -     */ -    public boolean getBubbleExpanded() { -        return mCurrentState.mBubbleExpanded; -    } - -    /**       * Whether the status bar panel is expanded or not.       */      public boolean getPanelExpanded() { @@ -679,8 +648,6 @@ public class NotificationShadeWindowController implements Callback, Dumpable,          boolean mBackdropShowing;          boolean mWallpaperSupportsAmbientMode;          boolean mNotTouchable; -        boolean mBubblesShowing; -        boolean mBubbleExpanded;          boolean mForceHasTopUi;          /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index ac5557b571d7..bbf83bc2057a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -1144,7 +1144,7 @@ public class StatusBar extends SystemUI implements DemoMode,          ScrimView scrimBehind = mNotificationShadeWindowView.findViewById(R.id.scrim_behind);          ScrimView scrimInFront = mNotificationShadeWindowView.findViewById(R.id.scrim_in_front); -        ScrimView scrimForBubble = mNotificationShadeWindowView.findViewById(R.id.scrim_for_bubble); +        ScrimView scrimForBubble = mBubbleController.getScrimForBubble();          mScrimController.setScrimVisibleListener(scrimsVisible -> {              mNotificationShadeWindowController.setScrimsVisibility(scrimsVisible); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java index 5bab86715663..9c7f49090122 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java @@ -32,7 +32,6 @@ import android.view.WindowInsets;  import com.android.systemui.Dumpable;  import com.android.systemui.R;  import com.android.systemui.ScreenDecorations; -import com.android.systemui.bubbles.BubbleController;  import com.android.systemui.statusbar.policy.ConfigurationController;  import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;  import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; @@ -45,8 +44,8 @@ import javax.inject.Singleton;  /**   * Manages what parts of the status bar are touchable. Clients are primarily UI that display in the - * status bar even though the UI doesn't look like part of the status bar. Currently this - * includes HeadsUpNotifications and Bubbles. + * status bar even though the UI doesn't look like part of the status bar. Currently this consists + * of HeadsUpNotifications.   */  @Singleton  public final class StatusBarTouchableRegionManager implements Dumpable { @@ -55,7 +54,6 @@ public final class StatusBarTouchableRegionManager implements Dumpable {      private final Context mContext;      private final HeadsUpManagerPhone mHeadsUpManager;      private final NotificationShadeWindowController mNotificationShadeWindowController; -    private final BubbleController mBubbleController;      private boolean mIsStatusBarExpanded = false;      private boolean mShouldAdjustInsets = false; @@ -73,8 +71,7 @@ public final class StatusBarTouchableRegionManager implements Dumpable {              Context context,              NotificationShadeWindowController notificationShadeWindowController,              ConfigurationController configurationController, -            HeadsUpManagerPhone headsUpManager, -            BubbleController bubbleController +            HeadsUpManagerPhone headsUpManager      ) {          mContext = context;          initResources(); @@ -117,11 +114,6 @@ public final class StatusBarTouchableRegionManager implements Dumpable {          mNotificationShadeWindowController.setForcePluginOpenListener((forceOpen) -> {              updateTouchableRegion();          }); - -        mBubbleController = bubbleController; -        mBubbleController.setBubbleStateChangeListener((hasBubbles) -> { -            updateTouchableRegion(); -        });      }      protected void setup( @@ -172,12 +164,6 @@ public final class StatusBarTouchableRegionManager implements Dumpable {                      mStatusBarHeight);              updateRegionForNotch(mTouchableRegion);          } - -        // Update touchable region for bubbles -        Rect bubbleRect = mBubbleController.getTouchableRegion(); -        if (bubbleRect != null) { -            mTouchableRegion.union(bubbleRect); -        }          return mTouchableRegion;      } @@ -198,7 +184,6 @@ public final class StatusBarTouchableRegionManager implements Dumpable {                  && (mNotificationShadeWindowView.getRootWindowInsets().getDisplayCutout() != null);          boolean shouldObserve = mHeadsUpManager.hasPinnedHeadsUp()                          || mHeadsUpManager.isHeadsUpGoingAway() -                        || mBubbleController.hasBubbles()                          || mForceCollapsedUntilLayout                          || hasCutoutInset                          || mNotificationShadeWindowController.getForcePluginOpen(); @@ -266,7 +251,7 @@ public final class StatusBarTouchableRegionManager implements Dumpable {              }              // Update touch insets to include any area needed for touching features that live in -            // the status bar (ie: heads up notifications or bubbles) +            // the status bar (ie: heads up notifications)              info.setTouchableInsets(ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION);              info.touchableRegion.set(calculateTouchableRegion());          } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java index bb0b5e00ff67..412962cc797a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java @@ -48,6 +48,7 @@ import android.view.ViewGroup;  import android.widget.BaseAdapter;  import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.logging.UiEventLogger;  import com.android.internal.logging.nano.MetricsProto.MetricsEvent;  import com.android.internal.util.UserIcons;  import com.android.settingslib.RestrictedLockUtilsInternal; @@ -61,6 +62,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;  import com.android.systemui.dagger.qualifiers.Main;  import com.android.systemui.plugins.ActivityStarter;  import com.android.systemui.plugins.qs.DetailAdapter; +import com.android.systemui.qs.QSUserSwitcherEvent;  import com.android.systemui.qs.tiles.UserDetailView;  import com.android.systemui.statusbar.phone.SystemUIDialog; @@ -108,13 +110,15 @@ public class UserSwitcherController implements Dumpable {      private int mSecondaryUser = UserHandle.USER_NULL;      private Intent mSecondaryUserServiceIntent;      private SparseBooleanArray mForcePictureLoadForUserId = new SparseBooleanArray(2); +    private final UiEventLogger mUiEventLogger;      @Inject      public UserSwitcherController(Context context, KeyguardStateController keyguardStateController,              @Main Handler handler, ActivityStarter activityStarter, -            BroadcastDispatcher broadcastDispatcher) { +            BroadcastDispatcher broadcastDispatcher, UiEventLogger uiEventLogger) {          mContext = context;          mBroadcastDispatcher = broadcastDispatcher; +        mUiEventLogger = uiEventLogger;          if (!UserManager.isGuestUserEphemeral()) {              mGuestResumeSessionReceiver.register(mBroadcastDispatcher);          } @@ -801,7 +805,7 @@ public class UserSwitcherController implements Dumpable {              UserDetailView v;              if (!(convertView instanceof UserDetailView)) {                  v = UserDetailView.inflate(context, parent, false); -                v.createAndSetAdapter(UserSwitcherController.this); +                v.createAndSetAdapter(UserSwitcherController.this, mUiEventLogger);              } else {                  v = (UserDetailView) convertView;              } @@ -827,6 +831,21 @@ public class UserSwitcherController implements Dumpable {          public int getMetricsCategory() {              return MetricsEvent.QS_USERDETAIL;          } + +        @Override +        public UiEventLogger.UiEventEnum openDetailEvent() { +            return QSUserSwitcherEvent.QS_USER_DETAIL_OPEN; +        } + +        @Override +        public UiEventLogger.UiEventEnum closeDetailEvent() { +            return QSUserSwitcherEvent.QS_USER_DETAIL_CLOSE; +        } + +        @Override +        public UiEventLogger.UiEventEnum moreSettingsEvent() { +            return QSUserSwitcherEvent.QS_USER_MORE_SETTINGS; +        }      };      private final KeyguardStateController.Callback mCallback = diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java index 7bb987ca7cf0..0cd4fb9578ff 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java +++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java @@ -56,9 +56,12 @@ import android.widget.TextView;  import com.android.internal.annotations.VisibleForTesting;  import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger;  import com.android.internal.logging.nano.MetricsProto.MetricsEvent;  import com.android.systemui.Prefs;  import com.android.systemui.R; +import com.android.systemui.qs.QSDndEvent; +import com.android.systemui.qs.QSEvents;  import com.android.systemui.statusbar.policy.ZenModeController;  import java.io.FileDescriptor; @@ -103,6 +106,7 @@ public class ZenModePanel extends FrameLayout {      private final TransitionHelper mTransitionHelper = new TransitionHelper();      private final Uri mForeverId;      private final ConfigurableTexts mConfigurableTexts; +    private final UiEventLogger mUiEventLogger = QSEvents.INSTANCE.getQsUiEventsLogger();      private String mTag = TAG + "/" + Integer.toHexString(System.identityHashCode(this)); @@ -662,6 +666,7 @@ public class ZenModePanel extends FrameLayout {                      tag.rb.setChecked(true);                      if (DEBUG) Log.d(mTag, "onCheckedChanged " + conditionId);                      MetricsLogger.action(mContext, MetricsEvent.QS_DND_CONDITION_SELECT); +                    mUiEventLogger.log(QSDndEvent.QS_DND_CONDITION_SELECT);                      select(tag.condition);                      announceConditionSelection(tag);                  } @@ -767,6 +772,7 @@ public class ZenModePanel extends FrameLayout {      private void onClickTimeButton(View row, ConditionTag tag, boolean up, int rowId) {          MetricsLogger.action(mContext, MetricsEvent.QS_DND_TIME, up); +        mUiEventLogger.log(up ? QSDndEvent.QS_DND_TIME_UP : QSDndEvent.QS_DND_TIME_DOWN);          Condition newCondition = null;          final int N = MINUTE_BUCKETS.length;          if (mBucketIndex == -1) { diff --git a/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java b/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java index 0b6e4b2ab598..64cac84ff24e 100644 --- a/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java +++ b/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java @@ -23,7 +23,9 @@ import android.content.Context;  import android.content.res.Configuration;  import android.graphics.Point;  import android.graphics.Rect; +import android.graphics.Region;  import android.os.Bundle; +import android.os.IBinder;  import android.os.ParcelFileDescriptor;  import android.os.RemoteException;  import android.util.MergedConfiguration; @@ -139,6 +141,23 @@ public class SystemWindows {      }      /** +     * Sets the touchable region of a view's window. This will be cropped to the window size. +     * @param view +     * @param region +     */ +    public void setTouchableRegion(@NonNull View view, Region region) { +        SurfaceControlViewHost root = mViewRoots.get(view); +        if (root == null) { +            return; +        } +        WindowlessWindowManager wwm = root.getWindowlessWM(); +        if (!(wwm instanceof SysUiWindowManager)) { +            return; +        } +        ((SysUiWindowManager) wwm).setTouchableRegionForWindow(view, region); +    } + +    /**       * Adds a root for system-ui window management with no views. Only useful for IME.       */      public void addRoot(int displayId, int windowType) { @@ -289,6 +308,14 @@ public class SystemWindows {          SurfaceControl getSurfaceControlForWindow(View rootView) {              return getSurfaceControl(rootView);          } + +        void setTouchableRegionForWindow(View rootView, Region region) { +            IBinder token = rootView.getWindowToken(); +            if (token == null) { +                return; +            } +            setTouchRegion(token, region); +        }      }      class ContainerWindow extends IWindow.Stub { diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java index c2b35069a4ad..58906d7bd2d3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java @@ -30,7 +30,6 @@ import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue;  import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean;  import static org.mockito.ArgumentMatchers.anyInt;  import static org.mockito.ArgumentMatchers.anyString;  import static org.mockito.ArgumentMatchers.eq; @@ -162,8 +161,6 @@ public class BubbleControllerTest extends SysuiTestCase {      private ExpandableNotificationRow mNonBubbleNotifRow;      @Mock -    private BubbleController.BubbleStateChangeListener mBubbleStateChangeListener; -    @Mock      private BubbleController.BubbleExpandListener mBubbleExpandListener;      @Mock      private PendingIntent mDeleteIntent; @@ -280,7 +277,6 @@ public class BubbleControllerTest extends SysuiTestCase {                  mFloatingContentCoordinator,                  mSysUiState,                  mock(INotificationManager.class)); -        mBubbleController.setBubbleStateChangeListener(mBubbleStateChangeListener);          mBubbleController.setExpandListener(mBubbleExpandListener);          // Get a reference to the BubbleController's entry listener @@ -298,7 +294,6 @@ public class BubbleControllerTest extends SysuiTestCase {          mBubbleController.updateBubble(mRow.getEntry());          assertTrue(mBubbleController.hasBubbles()); -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true);          assertFalse(mSysUiStateBubblesExpanded);      } @@ -316,14 +311,11 @@ public class BubbleControllerTest extends SysuiTestCase {          assertNotNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()));          assertTrue(mBubbleController.hasBubbles());          verify(mNotificationEntryManager).updateNotifications(any()); -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true);          mBubbleController.removeBubble(                  mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE); -        assertFalse(mNotificationShadeWindowController.getBubblesShowing());          assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()));          verify(mNotificationEntryManager, times(2)).updateNotifications(anyString()); -        verify(mBubbleStateChangeListener).onHasBubblesChanged(false);          assertFalse(mSysUiStateBubblesExpanded);      } @@ -388,7 +380,6 @@ public class BubbleControllerTest extends SysuiTestCase {          assertTrue(mBubbleController.hasBubbles());          mBubbleData.dismissAll(BubbleController.DISMISS_USER_GESTURE); -        assertFalse(mNotificationShadeWindowController.getBubblesShowing());          verify(mNotificationEntryManager, times(3)).updateNotifications(any());          assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()));          assertNull(mBubbleData.getBubbleInStackWithKey(mRow2.getEntry().getKey())); @@ -408,14 +399,12 @@ public class BubbleControllerTest extends SysuiTestCase {          assertTrue(mBubbleController.hasBubbles());          assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(                  mRow.getEntry())); -        assertFalse(mNotificationShadeWindowController.getBubbleExpanded());          // Expand the stack          BubbleStackView stackView = mBubbleController.getStackView();          mBubbleData.setExpanded(true);          assertTrue(mBubbleController.isStackExpanded());          verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getEntry().getKey()); -        assertTrue(mNotificationShadeWindowController.getBubbleExpanded());          assertTrue(mSysUiStateBubblesExpanded); @@ -427,7 +416,6 @@ public class BubbleControllerTest extends SysuiTestCase {          mBubbleController.collapseStack();          verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey());          assertFalse(mBubbleController.isStackExpanded()); -        assertFalse(mNotificationShadeWindowController.getBubbleExpanded());          assertFalse(mSysUiStateBubblesExpanded);      } @@ -553,7 +541,6 @@ public class BubbleControllerTest extends SysuiTestCase {          mEntryListener.onPendingEntryAdded(mRow2.getEntry());          mBubbleController.updateBubble(mRow.getEntry());          mBubbleController.updateBubble(mRow2.getEntry()); -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true);          // Expand          BubbleStackView stackView = mBubbleController.getStackView(); @@ -588,7 +575,6 @@ public class BubbleControllerTest extends SysuiTestCase {          // Make sure state changes and collapse happens          verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey()); -        verify(mBubbleStateChangeListener).onHasBubblesChanged(false);          assertFalse(mBubbleController.hasBubbles());          assertFalse(mSysUiStateBubblesExpanded); @@ -609,9 +595,6 @@ public class BubbleControllerTest extends SysuiTestCase {                  mRow.getEntry().getKey());          assertFalse(mBubbleController.isStackExpanded()); -        // # of bubbles should change -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */); -          assertFalse(mSysUiStateBubblesExpanded);      } @@ -629,9 +612,6 @@ public class BubbleControllerTest extends SysuiTestCase {                  mRow.getEntry().getKey());          assertTrue(mBubbleController.isStackExpanded()); -        // # of bubbles should change -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */); -          assertTrue(mSysUiStateBubblesExpanded);      } @@ -651,9 +631,6 @@ public class BubbleControllerTest extends SysuiTestCase {          assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showDot());          assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showFlyout()); -        // # of bubbles should change -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */); -          assertFalse(mSysUiStateBubblesExpanded);      } @@ -679,9 +656,6 @@ public class BubbleControllerTest extends SysuiTestCase {          assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showDot());          assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showFlyout()); -        // # of bubbles should change -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */); -          assertFalse(mSysUiStateBubblesExpanded);      } @@ -716,7 +690,6 @@ public class BubbleControllerTest extends SysuiTestCase {          mEntryListener.onPendingEntryAdded(mNonBubbleNotifRow.getEntry());          mEntryListener.onPreEntryUpdated(mNonBubbleNotifRow.getEntry()); -        verify(mBubbleStateChangeListener, never()).onHasBubblesChanged(anyBoolean());          assertThat(mBubbleController.hasBubbles()).isFalse();      } diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java index 23dfb7c2a3a5..ec1a797533fa 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java @@ -26,7 +26,6 @@ import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.anyBoolean;  import static org.mockito.ArgumentMatchers.anyInt;  import static org.mockito.ArgumentMatchers.anyString;  import static org.mockito.ArgumentMatchers.eq; @@ -150,8 +149,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {      private ExpandableNotificationRow mRow2;      private ExpandableNotificationRow mNonBubbleNotifRow;      @Mock -    private BubbleController.BubbleStateChangeListener mBubbleStateChangeListener; -    @Mock      private BubbleController.BubbleExpandListener mBubbleExpandListener;      @Mock      private PendingIntent mDeleteIntent; @@ -256,7 +253,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {                  mSysUiState,                  mock(INotificationManager.class));          mBubbleController.addNotifCallback(mNotifCallback); -        mBubbleController.setBubbleStateChangeListener(mBubbleStateChangeListener);          mBubbleController.setExpandListener(mBubbleExpandListener);          // Get a reference to the BubbleController's entry listener @@ -269,8 +265,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {      public void testAddBubble() {          mBubbleController.updateBubble(mRow.getEntry());          assertTrue(mBubbleController.hasBubbles()); - -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true);      }      @Test @@ -286,13 +280,10 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {          assertNotNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()));          assertTrue(mBubbleController.hasBubbles());          verify(mNotifCallback, times(1)).invalidateNotifications(anyString()); -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true);          mBubbleController.removeBubble(mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE); -        assertFalse(mNotificationShadeWindowController.getBubblesShowing());          assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()));          verify(mNotifCallback, times(2)).invalidateNotifications(anyString()); -        verify(mBubbleStateChangeListener).onHasBubblesChanged(false);      }      @Test @@ -347,7 +338,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {          assertTrue(mBubbleController.hasBubbles());          mBubbleData.dismissAll(BubbleController.DISMISS_USER_GESTURE); -        assertFalse(mNotificationShadeWindowController.getBubblesShowing());          verify(mNotifCallback, times(3)).invalidateNotifications(anyString());          assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()));          assertNull(mBubbleData.getBubbleInStackWithKey(mRow2.getEntry().getKey())); @@ -365,14 +355,12 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {          assertTrue(mBubbleController.hasBubbles());          assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(                  mRow.getEntry())); -        assertFalse(mNotificationShadeWindowController.getBubbleExpanded());          // Expand the stack          BubbleStackView stackView = mBubbleController.getStackView();          mBubbleData.setExpanded(true);          assertTrue(mBubbleController.isStackExpanded());          verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getEntry().getKey()); -        assertTrue(mNotificationShadeWindowController.getBubbleExpanded());          // Make sure the notif is suppressed          assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(mRow.getEntry())); @@ -381,7 +369,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {          mBubbleController.collapseStack();          verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey());          assertFalse(mBubbleController.isStackExpanded()); -        assertFalse(mNotificationShadeWindowController.getBubbleExpanded());      }      @Test @@ -495,7 +482,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {          mEntryListener.onEntryAdded(mRow2.getEntry());          mBubbleController.updateBubble(mRow.getEntry());          mBubbleController.updateBubble(mRow2.getEntry()); -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true);          // Expand          BubbleStackView stackView = mBubbleController.getStackView(); @@ -528,7 +514,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {          // Make sure state changes and collapse happens          verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey()); -        verify(mBubbleStateChangeListener).onHasBubblesChanged(false);          assertFalse(mBubbleController.hasBubbles());      } @@ -546,9 +531,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {          verify(mBubbleExpandListener, never()).onBubbleExpandChanged(false /* expanded */,                  mRow.getEntry().getKey());          assertFalse(mBubbleController.isStackExpanded()); - -        // # of bubbles should change -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);      }      @Test @@ -564,9 +546,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {          verify(mBubbleExpandListener).onBubbleExpandChanged(true /* expanded */,                  mRow.getEntry().getKey());          assertTrue(mBubbleController.isStackExpanded()); - -        // # of bubbles should change -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);      }      @Test @@ -584,9 +563,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {          // Dot + flyout is hidden because notif is suppressed          assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showDot());          assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showFlyout()); - -        // # of bubbles should change -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);      }      @Test @@ -610,9 +586,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {          // Dot + flyout is hidden because notif is suppressed          assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showDot());          assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showFlyout()); - -        // # of bubbles should change -        verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);      }      @Test @@ -630,7 +603,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {          mEntryListener.onEntryAdded(mNonBubbleNotifRow.getEntry());          mEntryListener.onEntryUpdated(mNonBubbleNotifRow.getEntry()); -        verify(mBubbleStateChangeListener, never()).onHasBubblesChanged(anyBoolean());          assertThat(mBubbleController.hasBubbles()).isFalse();      } diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java index 5b78067ef81a..ae7387996322 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java @@ -27,6 +27,7 @@ import android.util.DisplayMetrics;  import androidx.test.filters.SmallTest; +import com.android.internal.logging.testing.UiEventLoggerFake;  import com.android.keyguard.KeyguardUpdateMonitor;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.classifier.brightline.BrightLineFalsingManager; @@ -65,7 +66,8 @@ public class FalsingManagerProxyTest extends SysuiTestCase {      private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());      private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());      private DockManager mDockManager = new DockManagerFake(); -    private StatusBarStateController mStatusBarStateController = new StatusBarStateControllerImpl(); +    private StatusBarStateController mStatusBarStateController = +            new StatusBarStateControllerImpl(new UiEventLoggerFake());      @Before      public void setup() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java index 8b5cc9abb777..b9cb499420ee 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java @@ -25,6 +25,7 @@ import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.util.DisplayMetrics; +import com.android.internal.logging.testing.UiEventLoggerFake;  import com.android.keyguard.KeyguardUpdateMonitor;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.dock.DockManager; @@ -67,7 +68,7 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase {          FalsingDataProvider falsingDataProvider = new FalsingDataProvider(dm);          DeviceConfigProxy deviceConfigProxy = new DeviceConfigProxyFake();          DockManager dockManager = new DockManagerFake(); -        mStatusBarStateController = new StatusBarStateControllerImpl(); +        mStatusBarStateController = new StatusBarStateControllerImpl(new UiEventLoggerFake());          mStatusBarStateController.setState(StatusBarState.KEYGUARD);          mFalsingManager = new BrightLineFalsingManager(falsingDataProvider,                  mKeyguardUpdateMonitor, mProximitySensor, deviceConfigProxy, dockManager, 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 8879e83b4d0e..353efeeb21f6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java @@ -16,6 +16,7 @@ package com.android.systemui.qs;  import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_MORE_SETTINGS; +import static org.junit.Assert.assertEquals;  import static org.mockito.Matchers.any;  import static org.mockito.Matchers.anyInt;  import static org.mockito.Matchers.eq; @@ -33,11 +34,13 @@ import android.view.View;  import androidx.test.filters.SmallTest;  import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.testing.UiEventLoggerFake;  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.plugins.ActivityStarter;  import com.android.systemui.plugins.qs.DetailAdapter; +import org.junit.After;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; @@ -54,10 +57,13 @@ public class QSDetailTest extends SysuiTestCase {      private ActivityStarter mActivityStarter;      private DetailAdapter mMockDetailAdapter;      private TestableLooper mTestableLooper; +    private UiEventLoggerFake mUiEventLogger;      @Before      public void setup() throws Exception {          mTestableLooper = TestableLooper.get(this); +        mUiEventLogger = QSEvents.INSTANCE.setLoggerForTesting(); +          mTestableLooper.runWithLooper(() -> {              mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);              mActivityStarter = mDependency.injectMockDependency(ActivityStarter.class); @@ -70,6 +76,19 @@ public class QSDetailTest extends SysuiTestCase {              when(mMockDetailAdapter.createDetailView(any(), any(), any()))                      .thenReturn(mock(View.class));          }); + +        // Only detail in use is the user detail +        when(mMockDetailAdapter.openDetailEvent()) +                .thenReturn(QSUserSwitcherEvent.QS_USER_DETAIL_OPEN); +        when(mMockDetailAdapter.closeDetailEvent()) +                .thenReturn(QSUserSwitcherEvent.QS_USER_DETAIL_CLOSE); +        when(mMockDetailAdapter.moreSettingsEvent()) +                .thenReturn(QSUserSwitcherEvent.QS_USER_MORE_SETTINGS); +    } + +    @After +    public void tearDown() { +        QSEvents.INSTANCE.resetLogger();      }      @Test @@ -79,9 +98,16 @@ public class QSDetailTest extends SysuiTestCase {          mQsDetail.handleShowingDetail(mMockDetailAdapter, 0, 0, false);          verify(mMetricsLogger).visible(eq(mMockDetailAdapter.getMetricsCategory())); +        assertEquals(1, mUiEventLogger.numLogs()); +        assertEquals(QSUserSwitcherEvent.QS_USER_DETAIL_OPEN.getId(), mUiEventLogger.eventId(0)); +        mUiEventLogger.getLogs().clear(); +          mQsDetail.handleShowingDetail(null, 0, 0, false);          verify(mMetricsLogger).hidden(eq(mMockDetailAdapter.getMetricsCategory())); +        assertEquals(1, mUiEventLogger.numLogs()); +        assertEquals(QSUserSwitcherEvent.QS_USER_DETAIL_CLOSE.getId(), mUiEventLogger.eventId(0)); +          ViewUtils.detachView(mQsDetail);          mTestableLooper.processAllMessages();      } @@ -92,10 +118,13 @@ public class QSDetailTest extends SysuiTestCase {          mTestableLooper.processAllMessages();          mQsDetail.handleShowingDetail(mMockDetailAdapter, 0, 0, false); -        mQsDetail.findViewById(android.R.id.button2).performClick(); +        mUiEventLogger.getLogs().clear(); +        mQsDetail.requireViewById(android.R.id.button2).performClick();          int metricsCategory = mMockDetailAdapter.getMetricsCategory();          verify(mMetricsLogger).action(eq(ACTION_QS_MORE_SETTINGS), eq(metricsCategory)); +        assertEquals(1, mUiEventLogger.numLogs()); +        assertEquals(QSUserSwitcherEvent.QS_USER_MORE_SETTINGS.getId(), mUiEventLogger.eventId(0));          verify(mActivityStarter).postStartActivityDismissingKeyguard(any(), anyInt()); @@ -105,7 +134,9 @@ public class QSDetailTest extends SysuiTestCase {      @Test      public void testNullAdapterClick() { -        mQsDetail.setupDetailFooter(mock(DetailAdapter.class)); -        mQsDetail.findViewById(android.R.id.button2).performClick(); +        DetailAdapter mock = mock(DetailAdapter.class); +        when(mock.moreSettingsEvent()).thenReturn(DetailAdapter.INVALID); +        mQsDetail.setupDetailFooter(mock); +        mQsDetail.requireViewById(android.R.id.button2).performClick();      }  } 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 1f494a69f953..d338cbf51fb5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java @@ -34,6 +34,7 @@ import androidx.test.filters.SmallTest;  import androidx.test.filters.Suppress;  import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger;  import com.android.keyguard.CarrierText;  import com.android.systemui.Dependency;  import com.android.systemui.R; @@ -106,7 +107,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {                  mock(PluginManager.class), mock(TunerService.class),                  () -> mock(AutoTileManager.class), mock(DumpManager.class),                  mock(BroadcastDispatcher.class), Optional.of(mock(StatusBar.class)), -                mock(QSLogger.class)); +                mock(QSLogger.class), mock(UiEventLogger.class));          qs.setHost(host);          qs.setListening(true); 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 392adf99e511..9d35e53e7421 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java @@ -35,6 +35,7 @@ import androidx.test.filters.SmallTest;  import com.android.internal.logging.MetricsLogger;  import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.internal.logging.testing.UiEventLoggerFake;  import com.android.settingslib.bluetooth.LocalBluetoothManager;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.broadcast.BroadcastDispatcher; @@ -94,17 +95,19 @@ public class QSPanelTest extends SysuiTestCase {      private ActivityStarter mActivityStarter;      @Mock      private NotificationEntryManager mEntryManager; +    private UiEventLoggerFake mUiEventLogger;      @Before      public void setup() throws Exception {          MockitoAnnotations.initMocks(this);          mTestableLooper = TestableLooper.get(this); +        mUiEventLogger = new UiEventLoggerFake();          mTestableLooper.runWithLooper(() -> {              mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);              mQsPanel = new QSPanel(mContext, null, mDumpManager, mBroadcastDispatcher,                      mQSLogger, mForegroundExecutor, mBackgroundExecutor, -                    mLocalBluetoothManager, mActivityStarter, mEntryManager); +                    mLocalBluetoothManager, mActivityStarter, mEntryManager, mUiEventLogger);              // Provides a parent with non-zero size for QSPanel              mParentView = new FrameLayout(mContext);              mParentView.addView(mQsPanel); @@ -124,9 +127,17 @@ public class QSPanelTest extends SysuiTestCase {          mQsPanel.setExpanded(true);          verify(mMetricsLogger).visibility(eq(MetricsEvent.QS_PANEL), eq(true));          verify(mQSLogger).logPanelExpanded(true, mQsPanel.getDumpableTag()); +        assertEquals(1, mUiEventLogger.numLogs()); +        assertEquals(QSEvent.QS_PANEL_EXPANDED.getId(), mUiEventLogger.eventId(0)); +        mUiEventLogger.getLogs().clear(); +          mQsPanel.setExpanded(false);          verify(mMetricsLogger).visibility(eq(MetricsEvent.QS_PANEL), eq(false));          verify(mQSLogger).logPanelExpanded(false, mQsPanel.getDumpableTag()); +        assertEquals(1, mUiEventLogger.numLogs()); +        assertEquals(QSEvent.QS_PANEL_COLLAPSED.getId(), mUiEventLogger.eventId(0)); +        mUiEventLogger.getLogs().clear(); +      }      @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java index 95c3e5aee870..966fa88653bf 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java @@ -41,6 +41,7 @@ import android.testing.TestableLooper.RunWithLooper;  import androidx.test.filters.SmallTest; +import com.android.internal.logging.UiEventLogger;  import com.android.internal.util.CollectionUtils;  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; @@ -50,7 +51,6 @@ import com.android.systemui.plugins.qs.QSFactory;  import com.android.systemui.plugins.qs.QSTile;  import com.android.systemui.qs.external.CustomTile;  import com.android.systemui.qs.logging.QSLogger; -import com.android.systemui.qs.tileimpl.QSFactoryImpl;  import com.android.systemui.qs.tileimpl.QSTileImpl;  import com.android.systemui.shared.plugins.PluginManager;  import com.android.systemui.statusbar.phone.AutoTileManager; @@ -105,6 +105,8 @@ public class QSTileHostTest extends SysuiTestCase {      private QSLogger mQSLogger;      @Mock      private CustomTile mCustomTile; +    @Mock +    private UiEventLogger mUiEventLogger;      private Handler mHandler;      private TestableLooper mLooper; @@ -117,7 +119,7 @@ public class QSTileHostTest extends SysuiTestCase {          mHandler = new Handler(mLooper.getLooper());          mQSTileHost = new TestQSTileHost(mContext, mIconController, mDefaultFactory, mHandler,                  mLooper.getLooper(), mPluginManager, mTunerService, mAutoTiles, mDumpManager, -                mBroadcastDispatcher, mStatusBar, mQSLogger); +                mBroadcastDispatcher, mStatusBar, mQSLogger, mUiEventLogger);          setUpTileFactory();          // Override this config so there are no unexpected tiles @@ -298,10 +300,11 @@ public class QSTileHostTest extends SysuiTestCase {                  QSFactory defaultFactory, Handler mainHandler, Looper bgLooper,                  PluginManager pluginManager, TunerService tunerService,                  Provider<AutoTileManager> autoTiles, DumpManager dumpManager, -                BroadcastDispatcher broadcastDispatcher, StatusBar statusBar, QSLogger qsLogger) { +                BroadcastDispatcher broadcastDispatcher, StatusBar statusBar, QSLogger qsLogger, +                UiEventLogger uiEventLogger) {              super(context, iconController, defaultFactory, mainHandler, bgLooper, pluginManager,                      tunerService, autoTiles, dumpManager, broadcastDispatcher, -                    Optional.of(statusBar), qsLogger); +                    Optional.of(statusBar), qsLogger, uiEventLogger);          }          @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java index 25bac7ae4117..204de929e331 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java @@ -24,6 +24,7 @@ import android.testing.TestableLooper.RunWithLooper;  import androidx.test.filters.SmallTest; +import com.android.internal.logging.testing.UiEventLoggerFake;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.qs.QSTileHost; @@ -42,7 +43,8 @@ public class TileAdapterTest extends SysuiTestCase {      @Before      public void setup() throws Exception { -        TestableLooper.get(this).runWithLooper(() -> mTileAdapter = new TileAdapter(mContext)); +        TestableLooper.get(this).runWithLooper(() -> mTileAdapter = +                new TileAdapter(mContext, new UiEventLoggerFake()));      }      @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java index 884e4c0f5205..2fc3d72c2672 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java @@ -30,6 +30,7 @@ import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; +import com.android.internal.logging.UiEventLogger;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.broadcast.BroadcastDispatcher;  import com.android.systemui.dump.DumpManager; @@ -81,6 +82,8 @@ public class TileServicesTest extends SysuiTestCase {      private StatusBar mStatusBar;      @Mock      private QSLogger mQSLogger; +    @Mock +    private UiEventLogger mUiEventLogger;      @Before      public void setUp() throws Exception { @@ -98,7 +101,8 @@ public class TileServicesTest extends SysuiTestCase {                  mDumpManager,                  mBroadcastDispatcher,                  Optional.of(mStatusBar), -                mQSLogger); +                mQSLogger, +                mUiEventLogger);          mTileService = new TestTileServices(host, Looper.getMainLooper(), mBroadcastDispatcher);      } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java index 4fada336fb94..1c0d451e064a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java @@ -46,12 +46,16 @@ import android.testing.TestableLooper.RunWithLooper;  import androidx.test.filters.SmallTest; +import com.android.internal.logging.InstanceId;  import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger; +import com.android.internal.logging.testing.UiEventLoggerFake;  import com.android.systemui.Dependency;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.plugins.ActivityStarter;  import com.android.systemui.plugins.qs.QSTile;  import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.qs.QSEvent;  import com.android.systemui.qs.QSHost;  import com.android.systemui.qs.QSTileHost;  import com.android.systemui.qs.logging.QSLogger; @@ -83,6 +87,8 @@ public class QSTileImplTest extends SysuiTestCase {      private QSTileHost mHost;      private MetricsLogger mMetricsLogger;      private StatusBarStateController mStatusBarStateController; +    private UiEventLoggerFake mUiEventLoggerFake; +    private InstanceId mInstanceId = InstanceId.fakeInstanceId(5);      @Captor      private ArgumentCaptor<LogMaker> mLogCaptor; @@ -94,12 +100,15 @@ public class QSTileImplTest extends SysuiTestCase {          mDependency.injectTestDependency(Dependency.BG_LOOPER, mTestableLooper.getLooper());          mDependency.injectMockDependency(ActivityStarter.class);          mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class); +        mUiEventLoggerFake = new UiEventLoggerFake();          mStatusBarStateController =              mDependency.injectMockDependency(StatusBarStateController.class);          mHost = mock(QSTileHost.class);          when(mHost.indexOf(SPEC)).thenReturn(POSITION);          when(mHost.getContext()).thenReturn(mContext.getBaseContext());          when(mHost.getQSLogger()).thenReturn(mQsLogger); +        when(mHost.getUiEventLogger()).thenReturn(mUiEventLoggerFake); +        when(mHost.getNewInstanceId()).thenReturn(mInstanceId);          mTile = spy(new TileImpl(mHost));          mTile.mHandler = mTile.new H(mTestableLooper.getLooper()); @@ -110,6 +119,9 @@ public class QSTileImplTest extends SysuiTestCase {      public void testClick_Metrics() {          mTile.click();          verify(mMetricsLogger).write(argThat(new TileLogMatcher(ACTION_QS_CLICK))); +        assertEquals(1, mUiEventLoggerFake.numLogs()); +        UiEventLoggerFake.FakeUiEvent event = mUiEventLoggerFake.get(0); +        assertEvent(QSEvent.QS_ACTION_CLICK, event);      }      @Test @@ -133,6 +145,9 @@ public class QSTileImplTest extends SysuiTestCase {      public void testSecondaryClick_Metrics() {          mTile.secondaryClick();          verify(mMetricsLogger).write(argThat(new TileLogMatcher(ACTION_QS_SECONDARY_CLICK))); +        assertEquals(1, mUiEventLoggerFake.numLogs()); +        UiEventLoggerFake.FakeUiEvent event = mUiEventLoggerFake.get(0); +        assertEvent(QSEvent.QS_ACTION_SECONDARY_CLICK, event);      }      @Test @@ -156,6 +171,9 @@ public class QSTileImplTest extends SysuiTestCase {      public void testLongClick_Metrics() {          mTile.longClick();          verify(mMetricsLogger).write(argThat(new TileLogMatcher(ACTION_QS_LONG_PRESS))); +        assertEquals(1, mUiEventLoggerFake.numLogs()); +        UiEventLoggerFake.FakeUiEvent event = mUiEventLoggerFake.get(0); +        assertEvent(QSEvent.QS_ACTION_LONG_PRESS, event);      } @@ -249,6 +267,13 @@ public class QSTileImplTest extends SysuiTestCase {          verify(mQsLogger).logTileChangeListening(SPEC, false);      } +    private void assertEvent(UiEventLogger.UiEventEnum eventType, +            UiEventLoggerFake.FakeUiEvent fakeEvent) { +        assertEquals(eventType.getId(), fakeEvent.eventId); +        assertEquals(SPEC, fakeEvent.packageName); +        assertEquals(mInstanceId, fakeEvent.instanceId); +    } +      private class TileLogMatcher implements ArgumentMatcher<LogMaker> {          private final int mCategory; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt index b51e716591fe..6d6a4d8f6b7d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt @@ -24,8 +24,11 @@ import android.view.LayoutInflater  import android.view.View  import android.view.ViewGroup  import androidx.test.filters.SmallTest +import com.android.internal.logging.testing.UiEventLoggerFake  import com.android.systemui.SysuiTestCase +import com.android.systemui.qs.QSUserSwitcherEvent  import com.android.systemui.statusbar.policy.UserSwitcherController +import org.junit.Assert.assertEquals  import org.junit.Before  import org.junit.Test  import org.junit.runner.RunWith @@ -50,15 +53,17 @@ class UserDetailViewAdapterTest : SysuiTestCase() {      @Mock private lateinit var mPicture: Bitmap      @Mock private lateinit var mLayoutInflater: LayoutInflater      private lateinit var adapter: UserDetailView.Adapter +    private lateinit var uiEventLogger: UiEventLoggerFake      @Before      fun setUp() {          MockitoAnnotations.initMocks(this) +        uiEventLogger = UiEventLoggerFake()          mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE, mLayoutInflater)          `when`(mLayoutInflater.inflate(anyInt(), any(ViewGroup::class.java), anyBoolean()))                  .thenReturn(mInflatedUserDetailItemView) -        adapter = UserDetailView.Adapter(mContext, mUserSwitcherController) +        adapter = UserDetailView.Adapter(mContext, mUserSwitcherController, uiEventLogger)      }      private fun clickableTest( @@ -77,6 +82,17 @@ class UserDetailViewAdapterTest : SysuiTestCase() {      }      @Test +    fun testUserSwitchLog() { +        val user = createUserRecord(false /* current */, false /* guest */) +        val v = adapter.createUserDetailItemView(View(mContext), mParent, user) +        `when`(v.tag).thenReturn(user) +        adapter.onClick(v) + +        assertEquals(1, uiEventLogger.numLogs()) +        assertEquals(QSUserSwitcherEvent.QS_USER_SWITCH.id, uiEventLogger.eventId(0)) +    } + +    @Test      fun testGuestIsClickable_differentViews_notCurrent() {          clickableTest(false, true, mOtherView, true)      } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt index c874915e9124..c46ac47e660c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt @@ -64,6 +64,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {      @Mock private lateinit var root: View      @Mock private lateinit var viewRootImpl: ViewRootImpl      @Mock private lateinit var shadeSpring: NotificationShadeDepthController.DepthAnimation +    @Mock private lateinit var shadeAnimation: NotificationShadeDepthController.DepthAnimation      @Mock private lateinit var globalActionsSpring: NotificationShadeDepthController.DepthAnimation      @Mock private lateinit var brightnessSpring: NotificationShadeDepthController.DepthAnimation      @JvmField @Rule val mockitoRule = MockitoJUnit.rule() @@ -80,11 +81,15 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {          `when`(blurUtils.blurRadiusOfRatio(anyFloat())).then { answer ->              (answer.arguments[0] as Float * maxBlur).toInt()          } +        `when`(blurUtils.minBlurRadius).thenReturn(0) +        `when`(blurUtils.maxBlurRadius).thenReturn(maxBlur) +          notificationShadeDepthController = NotificationShadeDepthController(                  statusBarStateController, blurUtils, biometricUnlockController,                  keyguardStateController, choreographer, wallpaperManager,                  notificationShadeWindowController, dumpManager)          notificationShadeDepthController.shadeSpring = shadeSpring +        notificationShadeDepthController.shadeAnimation = shadeAnimation          notificationShadeDepthController.brightnessMirrorSpring = brightnessSpring          notificationShadeDepthController.globalActionsSpring = globalActionsSpring          notificationShadeDepthController.root = root @@ -104,16 +109,61 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {          notificationShadeDepthController.onPanelExpansionChanged(1f /* expansion */,                  false /* tracking */)          verify(shadeSpring).animateTo(eq(maxBlur), any()) +        verify(shadeAnimation).animateTo(eq(maxBlur), any()) +    } + +    @Test +    fun onPanelExpansionChanged_animatesBlurIn_ifShade() { +        notificationShadeDepthController.onPanelExpansionChanged(0.01f /* expansion */, +                false /* tracking */) +        verify(shadeAnimation).animateTo(eq(maxBlur), any()) +    } + +    @Test +    fun onPanelExpansionChanged_animatesBlurOut_ifShade() { +        onPanelExpansionChanged_animatesBlurIn_ifShade() +        clearInvocations(shadeAnimation) +        notificationShadeDepthController.onPanelExpansionChanged(0f /* expansion */, +                false /* tracking */) +        verify(shadeAnimation).animateTo(eq(0), any()) +    } + +    @Test +    fun onPanelExpansionChanged_animatesBlurOut_ifFlick() { +        onPanelExpansionChanged_apliesBlur_ifShade() +        clearInvocations(shadeAnimation) +        notificationShadeDepthController.onPanelExpansionChanged(1f /* expansion */, +                true /* tracking */) +        verify(shadeAnimation, never()).animateTo(anyInt(), any()) + +        notificationShadeDepthController.onPanelExpansionChanged(0.9f /* expansion */, +                true /* tracking */) +        verify(shadeAnimation, never()).animateTo(anyInt(), any()) + +        notificationShadeDepthController.onPanelExpansionChanged(0.8f /* expansion */, +                false /* tracking */) +        verify(shadeAnimation).animateTo(eq(0), any()) +    } + +    @Test +    fun onPanelExpansionChanged_animatesBlurIn_ifFlickCancelled() { +        onPanelExpansionChanged_animatesBlurOut_ifFlick() +        clearInvocations(shadeAnimation) +        notificationShadeDepthController.onPanelExpansionChanged(0.6f /* expansion */, +                true /* tracking */) +        verify(shadeAnimation).animateTo(eq(maxBlur), any())      }      @Test      fun onStateChanged_reevalutesBlurs_ifSameRadiusAndNewState() {          onPanelExpansionChanged_apliesBlur_ifShade()          clearInvocations(shadeSpring) +        clearInvocations(shadeAnimation)          statusBarState = StatusBarState.KEYGUARD          statusBarStateListener.onStateChanged(statusBarState)          verify(shadeSpring).animateTo(eq(0), any()) +        verify(shadeAnimation).animateTo(eq(0), any())      }      @Test @@ -147,6 +197,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {      @Test      fun updateBlurCallback_setsBlur_whenExpanded() {          `when`(shadeSpring.radius).thenReturn(maxBlur) +        `when`(shadeAnimation.radius).thenReturn(maxBlur)          notificationShadeDepthController.updateBlurCallback.doFrame(0)          verify(blurUtils).applyBlur(any(), eq(maxBlur))      } @@ -154,6 +205,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {      @Test      fun updateBlurCallback_appLaunchAnimation_overridesZoom() {          `when`(shadeSpring.radius).thenReturn(maxBlur) +        `when`(shadeAnimation.radius).thenReturn(maxBlur)          val animProgress = ActivityLaunchAnimator.ExpandAnimationParameters()          animProgress.linearProgress = 1f          notificationShadeDepthController.notificationLaunchAnimationParams = animProgress @@ -187,6 +239,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {          `when`(brightnessSpring.ratio).thenReturn(1f)          // And shade is blurred          `when`(shadeSpring.radius).thenReturn(maxBlur) +        `when`(shadeAnimation.radius).thenReturn(maxBlur)          notificationShadeDepthController.updateBlurCallback.doFrame(0)          verify(notificationShadeWindowController).setBackgroundBlurRadius(0) @@ -207,8 +260,10 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {          val animProgress = ActivityLaunchAnimator.ExpandAnimationParameters()          animProgress.linearProgress = 0.5f          `when`(shadeSpring.radius).thenReturn(0) +        `when`(shadeAnimation.radius).thenReturn(0)          notificationShadeDepthController.notificationLaunchAnimationParams = animProgress          verify(shadeSpring, never()).animateTo(anyInt(), any()) +        verify(shadeAnimation, never()).animateTo(anyInt(), any())      }      private fun <T : Any> safeEq(value: T): T { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt new file mode 100644 index 000000000000..fca6bc50f6e2 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar + +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper +import androidx.test.filters.SmallTest +import com.android.internal.logging.testing.UiEventLoggerFake +import com.android.systemui.SysuiTestCase +import org.junit.Assert.assertEquals +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith + +@SmallTest +@RunWith(AndroidTestingRunner::class) +@TestableLooper.RunWithLooper +class StatusBarStateControllerImplTest : SysuiTestCase() { + +    private lateinit var controller: StatusBarStateControllerImpl +    private lateinit var uiEventLogger: UiEventLoggerFake + +    @Before +    fun setUp() { +        uiEventLogger = UiEventLoggerFake() +        controller = StatusBarStateControllerImpl(uiEventLogger) +    } + +    @Test +    fun testChangeState_logged() { +        TestableLooper.get(this).runWithLooper { +            controller.state = StatusBarState.FULLSCREEN_USER_SWITCHER +            controller.state = StatusBarState.KEYGUARD +            controller.state = StatusBarState.SHADE +            controller.state = StatusBarState.SHADE_LOCKED +        } + +        val logs = uiEventLogger.logs +        assertEquals(4, logs.size) +        val ids = logs.map(UiEventLoggerFake.FakeUiEvent::eventId) +        assertEquals(StatusBarStateEvent.STATUS_BAR_STATE_FULLSCREEN_USER_SWITCHER.id, ids[0]) +        assertEquals(StatusBarStateEvent.STATUS_BAR_STATE_KEYGUARD.id, ids[1]) +        assertEquals(StatusBarStateEvent.STATUS_BAR_STATE_SHADE.id, ids[2]) +        assertEquals(StatusBarStateEvent.STATUS_BAR_STATE_SHADE_LOCKED.id, ids[3]) +    } +}
\ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateEventTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateEventTest.kt new file mode 100644 index 000000000000..b5b2f1fc0484 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateEventTest.kt @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar + +import android.testing.AndroidTestingRunner +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import org.junit.Assert.assertEquals +import org.junit.Test +import org.junit.runner.RunWith + +@SmallTest +@RunWith(AndroidTestingRunner::class) +class StatusBarStateEventTest : SysuiTestCase() { + +    @Test +    fun testFromState() { +        val events = listOf( +                StatusBarStateEvent.STATUS_BAR_STATE_SHADE, +                StatusBarStateEvent.STATUS_BAR_STATE_SHADE_LOCKED, +                StatusBarStateEvent.STATUS_BAR_STATE_KEYGUARD, +                StatusBarStateEvent.STATUS_BAR_STATE_FULLSCREEN_USER_SWITCHER, +                StatusBarStateEvent.STATUS_BAR_STATE_UNKNOWN +        ) +        val states = listOf( +                StatusBarState.SHADE, +                StatusBarState.SHADE_LOCKED, +                StatusBarState.KEYGUARD, +                StatusBarState.FULLSCREEN_USER_SWITCHER, +                -1 +        ) +        events.zip(states).forEach { (event, state) -> +            assertEquals(event, StatusBarStateEvent.fromState(state)) +        } +    } +}
\ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java index 99dc895eafff..68cf66dfb700 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java @@ -19,6 +19,7 @@ package com.android.systemui.statusbar.notification;  import static org.mockito.ArgumentMatchers.any;  import static org.mockito.ArgumentMatchers.anyInt;  import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.verifyNoMoreInteractions;  import static org.mockito.Mockito.when; @@ -85,6 +86,22 @@ public class DynamicPrivacyControllerTest extends SysuiTestCase {          verify(mListener).onDynamicPrivacyChanged();      } +    @Test +    public void testNotifiedWhenKeyguardFadingAwayChanges() { +        when(mKeyguardStateController.canDismissLockScreen()).thenReturn(false); +        when(mKeyguardStateController.isKeyguardGoingAway()).thenReturn(false); +        enableDynamicPrivacy(); + +        when(mKeyguardStateController.isKeyguardFadingAway()).thenReturn(true); +        mDynamicPrivacyController.onKeyguardFadingAwayChanged(); +        verify(mListener).onDynamicPrivacyChanged(); +        reset(mListener); + +        when(mKeyguardStateController.isKeyguardFadingAway()).thenReturn(false); +        mDynamicPrivacyController.onUnlockedChanged(); +        verify(mListener).onDynamicPrivacyChanged(); +    } +      private void enableDynamicPrivacy() {          when(mLockScreenUserManager.shouldHideNotifications(any())).thenReturn(                  false); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java index 4b09aa687073..57ef05544e7e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java @@ -47,6 +47,7 @@ import android.view.accessibility.AccessibilityManager;  import androidx.test.filters.SmallTest;  import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.testing.UiEventLoggerFake;  import com.android.internal.util.LatencyTracker;  import com.android.keyguard.KeyguardClockSwitch;  import com.android.keyguard.KeyguardUpdateMonitor; @@ -207,7 +208,7 @@ public class NotificationPanelViewTest extends SysuiTestCase {          NotificationWakeUpCoordinator coordinator =                  new NotificationWakeUpCoordinator(                          mock(HeadsUpManagerPhone.class), -                        new StatusBarStateControllerImpl(), +                        new StatusBarStateControllerImpl(new UiEventLoggerFake()),                          mKeyguardBypassController,                          mDozeParameters);          PulseExpansionHandler expansionHandler = new PulseExpansionHandler( diff --git a/packages/Tethering/common/TetheringLib/Android.bp b/packages/Tethering/common/TetheringLib/Android.bp index ee6b9f12f9d2..b520bc880821 100644 --- a/packages/Tethering/common/TetheringLib/Android.bp +++ b/packages/Tethering/common/TetheringLib/Android.bp @@ -134,5 +134,5 @@ java_library {  java_library {      name: "framework-tethering-stubs-module_libs_api",      srcs: [":framework-tethering-stubs-srcs-module_libs_api"], -    defaults: ["framework-module-stubs-lib-defaults-systemapi"], +    defaults: ["framework-module-stubs-lib-defaults-module_libs_api"],  } diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index e4eb585e989d..2c63c6f8a65d 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -3011,10 +3011,13 @@ public class ConnectivityService extends IConnectivityManager.Stub              // Legacy version of notifyNetworkTestedWithExtras.              // Would only be called if the system has a NetworkStack module older than the              // framework, which does not happen in practice. +            Slog.wtf(TAG, "Deprecated notifyNetworkTested called: no action taken");          }          @Override          public void notifyNetworkTestedWithExtras(NetworkTestResultParcelable p) { +            // Notify mTrackerHandler and mConnectivityDiagnosticsHandler of the event. Both use +            // the same looper so messages will be processed in sequence.              final Message msg = mTrackerHandler.obtainMessage(                      EVENT_NETWORK_TESTED,                      new NetworkTestedResults( diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java index 385ace8a511b..c6d08c36631a 100644 --- a/services/core/java/com/android/server/pm/LauncherAppsService.java +++ b/services/core/java/com/android/server/pm/LauncherAppsService.java @@ -16,11 +16,15 @@  package com.android.server.pm; +import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK; +import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT; +  import android.annotation.NonNull;  import android.annotation.Nullable;  import android.annotation.UserIdInt;  import android.app.ActivityManager;  import android.app.ActivityManagerInternal; +import android.app.ActivityOptions;  import android.app.AppGlobals;  import android.app.IApplicationThread;  import android.app.PendingIntent; @@ -864,6 +868,14 @@ public class LauncherAppsService extends SystemService {              }              // Note the target activity doesn't have to be exported. +            // Flag for bubble +            ActivityOptions options = ActivityOptions.fromBundle(startActivityOptions); +            if (options != null && options.isApplyActivityFlagsForBubbles()) { +                // Flag for bubble to make behaviour match documentLaunchMode=always. +                intents[0].addFlags(FLAG_ACTIVITY_NEW_DOCUMENT); +                intents[0].addFlags(FLAG_ACTIVITY_MULTIPLE_TASK); +            } +              intents[0].addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);              intents[0].setSourceBounds(sourceBounds); diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 9c0ac1884bd5..33a11166d832 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -1122,21 +1122,52 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {      }      private void handleStreamValidateAndCommit() { -        boolean success = streamValidateAndCommit(); +        PackageManagerException unrecoverableFailure = null; +        // This will track whether the session and any children were validated and are ready to +        // progress to the next phase of install +        boolean allSessionsReady = false; +        try { +            allSessionsReady = streamValidateAndCommit(); +        } catch (PackageManagerException e) { +            unrecoverableFailure = e; +        }          if (isMultiPackage()) { -            for (int i = mChildSessionIds.size() - 1; i >= 0; --i) { +            int childCount = mChildSessionIds.size(); + +            // This will contain all child sessions that do not encounter an unrecoverable failure +            ArrayList<PackageInstallerSession> nonFailingSessions = new ArrayList<>(childCount); + +            for (int i = childCount - 1; i >= 0; --i) {                  final int childSessionId = mChildSessionIds.keyAt(i);                  // commit all children, regardless if any of them fail; we'll throw/return                  // as appropriate once all children have been processed -                if (!mSessionProvider.getSession(childSessionId) -                        .streamValidateAndCommit()) { -                    success = false; +                try { +                    PackageInstallerSession session = mSessionProvider.getSession(childSessionId); +                    if (!session.streamValidateAndCommit()) { +                        allSessionsReady = false; +                    } +                    nonFailingSessions.add(session); +                } catch (PackageManagerException e) { +                    allSessionsReady = false; +                    if (unrecoverableFailure == null) { +                        unrecoverableFailure = e; +                    } +                } +            } +            // If we encountered any unrecoverable failures, destroy all +            // other impacted sessions besides the parent; that will be cleaned up by the +            // ChildStatusIntentReceiver. +            if (unrecoverableFailure != null) { +                // fail other child sessions that did not already fail +                for (int i = nonFailingSessions.size() - 1; i >= 0; --i) { +                    PackageInstallerSession session = nonFailingSessions.get(i); +                    session.onSessionVerificationFailure(unrecoverableFailure);                  }              }          } -        if (!success) { +        if (!allSessionsReady) {              return;          } @@ -1216,14 +1247,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {                          mStatusReceiver.sendIntent(mContext, 0, intent, null, null);                      } catch (IntentSender.SendIntentException ignore) {                      } -                } else { +                } else { // failure, let's forward and clean up this session.                      intent.putExtra(PackageInstaller.EXTRA_SESSION_ID,                              PackageInstallerSession.this.sessionId);                      mChildSessionsRemaining.clear(); // we're done. Don't send any more. -                    try { -                        mStatusReceiver.sendIntent(mContext, 0, intent, null, null); -                    } catch (IntentSender.SendIntentException ignore) { -                    } +                    onSessionVerificationFailure(status, +                            intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE));                  }              });          } @@ -1329,7 +1358,13 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {          return true;      } -    private boolean streamValidateAndCommit() { +    /** +     * Returns true if the session is successfully validated and committed. Returns false if the +     * dataloader could not be prepared. This can be called multiple times so long as no +     * exception is thrown. +     * @throws PackageManagerException on an unrecoverable error. +     */ +    private boolean streamValidateAndCommit() throws PackageManagerException {          synchronized (mLock) {              if (mCommitted) {                  return true; @@ -1349,7 +1384,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {              mCommitted = true;          } -          return true;      } @@ -1449,10 +1483,11 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {       * Prepare DataLoader and stream content for DataLoader sessions.       * Validate the contents of all session.       * -     * @return false if validation failed. +     * @return false if the data loader could not be prepared. +     * @throws PackageManagerException when an unrecoverable exception is encountered       */      @GuardedBy("mLock") -    private boolean streamAndValidateLocked() { +    private boolean streamAndValidateLocked() throws PackageManagerException {          try {              // Read transfers from the original owner stay open, but as the session's data cannot              // be modified anymore, there is no leak of information. For staged sessions, further @@ -1472,16 +1507,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {              if (params.isStaged) {                  mStagingManager.checkNonOverlappingWithStagedSessions(this);              } -              return true;          } catch (PackageManagerException e) { -            onSessionVerificationFailure(e); +            throw onSessionVerificationFailure(e);          } catch (Throwable e) {              // Convert all exceptions into package manager exceptions as only those are handled              // in the code above. -            onSessionVerificationFailure(new PackageManagerException(e)); +            throw onSessionVerificationFailure(new PackageManagerException(e));          } -        return false;      }      private PackageManagerException onSessionVerificationFailure(PackageManagerException e) { diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 7158af6d5310..9de34a92cdf7 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -3229,60 +3229,66 @@ public final class Settings {              }          } -        // Read preferred apps from .../etc/preferred-apps directory. -        File preferredDir = new File(Environment.getRootDirectory(), "etc/preferred-apps"); -        if (!preferredDir.exists() || !preferredDir.isDirectory()) { -            return; -        } -        if (!preferredDir.canRead()) { -            Slog.w(TAG, "Directory " + preferredDir + " cannot be read"); -            return; -        } - -        // Iterate over the files in the directory and scan .xml files -        for (File f : preferredDir.listFiles()) { -            if (!f.getPath().endsWith(".xml")) { -                Slog.i(TAG, "Non-xml file " + f + " in " + preferredDir + " directory, ignoring"); +        // Read preferred apps from .../etc/preferred-apps directories. +        int size = PackageManagerService.SYSTEM_PARTITIONS.size(); +        for (int index = 0; index < size; index++) { +            PackageManagerService.ScanPartition partition = +                    PackageManagerService.SYSTEM_PARTITIONS.get(index); + +            File preferredDir = new File(partition.folder, "etc/preferred-apps"); +            if (!preferredDir.exists() || !preferredDir.isDirectory()) {                  continue;              } -            if (!f.canRead()) { -                Slog.w(TAG, "Preferred apps file " + f + " cannot be read"); + +            if (!preferredDir.canRead()) { +                Slog.w(TAG, "Directory " + preferredDir + " cannot be read");                  continue;              } -            if (PackageManagerService.DEBUG_PREFERRED) Log.d(TAG, "Reading default preferred " + f); -            InputStream str = null; -            try { -                str = new BufferedInputStream(new FileInputStream(f)); -                XmlPullParser parser = Xml.newPullParser(); -                parser.setInput(str, null); - -                int type; -                while ((type = parser.next()) != XmlPullParser.START_TAG -                        && type != XmlPullParser.END_DOCUMENT) { -                    ; -                } +            // Iterate over the files in the directory and scan .xml files +            File[] files = preferredDir.listFiles(); +            if (ArrayUtils.isEmpty(files)) { +                continue; +            } -                if (type != XmlPullParser.START_TAG) { -                    Slog.w(TAG, "Preferred apps file " + f + " does not have start tag"); +            for (File f : files) { +                if (!f.getPath().endsWith(".xml")) { +                    Slog.i(TAG, "Non-xml file " + f + " in " + preferredDir +                            + " directory, ignoring");                      continue;                  } -                if (!"preferred-activities".equals(parser.getName())) { -                    Slog.w(TAG, "Preferred apps file " + f -                            + " does not start with 'preferred-activities'"); +                if (!f.canRead()) { +                    Slog.w(TAG, "Preferred apps file " + f + " cannot be read");                      continue;                  } -                readDefaultPreferredActivitiesLPw(parser, userId); -            } catch (XmlPullParserException e) { -                Slog.w(TAG, "Error reading apps file " + f, e); -            } catch (IOException e) { -                Slog.w(TAG, "Error reading apps file " + f, e); -            } finally { -                if (str != null) { -                    try { -                        str.close(); -                    } catch (IOException e) { +                if (PackageManagerService.DEBUG_PREFERRED) { +                    Log.d(TAG, "Reading default preferred " + f); +                } + +                try (InputStream str = new BufferedInputStream(new FileInputStream(f))) { +                    XmlPullParser parser = Xml.newPullParser(); +                    parser.setInput(str, null); + +                    int type; +                    while ((type = parser.next()) != XmlPullParser.START_TAG +                            && type != XmlPullParser.END_DOCUMENT) { +                        ; +                    } + +                    if (type != XmlPullParser.START_TAG) { +                        Slog.w(TAG, "Preferred apps file " + f + " does not have start tag"); +                        continue; +                    } +                    if (!"preferred-activities".equals(parser.getName())) { +                        Slog.w(TAG, "Preferred apps file " + f +                                + " does not start with 'preferred-activities'"); +                        continue;                      } +                    readDefaultPreferredActivitiesLPw(parser, userId); +                } catch (XmlPullParserException e) { +                    Slog.w(TAG, "Error reading apps file " + f, e); +                } catch (IOException e) { +                    Slog.w(TAG, "Error reading apps file " + f, e);                  }              }          } diff --git a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java index 4a1a6a766726..a6f02e7842d3 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java @@ -241,6 +241,10 @@ public class AndroidPackageUtils {          return PackageInfo.composeLongVersionCode(pkg.getVersionCodeMajor(), pkg.getVersionCode());      } +    /** +     * Returns false iff the provided flags include the {@link PackageManager#MATCH_SYSTEM_ONLY} +     * flag and the provided package is not a system package. Otherwise returns {@code true}. +     */      public static boolean isMatchForSystemOnly(AndroidPackage pkg, int flags) {          if ((flags & PackageManager.MATCH_SYSTEM_ONLY) != 0) {              return pkg.isSystem(); diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index dcdbfdedb0c8..9edc03eaf3c3 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -235,10 +235,8 @@ import android.app.servertransaction.ClientTransaction;  import android.app.servertransaction.ClientTransactionItem;  import android.app.servertransaction.DestroyActivityItem;  import android.app.servertransaction.MoveToDisplayItem; -import android.app.servertransaction.MultiWindowModeChangeItem;  import android.app.servertransaction.NewIntentItem;  import android.app.servertransaction.PauseActivityItem; -import android.app.servertransaction.PipModeChangeItem;  import android.app.servertransaction.ResumeActivityItem;  import android.app.servertransaction.StartActivityItem;  import android.app.servertransaction.StopActivityItem; @@ -1155,11 +1153,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A              return;          } -        if (task.getStack().deferScheduleMultiWindowModeChanged()) { -            // Don't do anything if we are currently deferring multi-window mode change. -            return; -        } -          // An activity is considered to be in multi-window mode if its task isn't fullscreen.          final boolean inMultiWindowMode = inMultiWindowMode();          if (inMultiWindowMode != mLastReportedMultiWindowMode) { @@ -1167,20 +1160,13 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A                  updatePictureInPictureMode(null, false);              } else {                  mLastReportedMultiWindowMode = inMultiWindowMode; -                scheduleMultiWindowModeChanged(getConfiguration()); +                computeConfigurationAfterMultiWindowModeChange(); +                ensureActivityConfiguration(0 /* globalChanges */, PRESERVE_WINDOWS, +                        true /* ignoreVisibility */);              }          }      } -    private void scheduleMultiWindowModeChanged(Configuration overrideConfig) { -        try { -            mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), appToken, -                    MultiWindowModeChangeItem.obtain(mLastReportedMultiWindowMode, overrideConfig)); -        } catch (Exception e) { -            // If process died, I don't care. -        } -    } -      void updatePictureInPictureMode(Rect targetStackBounds, boolean forceUpdate) {          if (task == null || task.getStack() == null || !attachedToProcess()) {              return; @@ -1188,39 +1174,26 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A          final boolean inPictureInPictureMode = inPinnedWindowingMode() && targetStackBounds != null;          if (inPictureInPictureMode != mLastReportedPictureInPictureMode || forceUpdate) { -            // Picture-in-picture mode change normal triggers also multi-window mode change -            // except transitions between pip and split screen mode, so update that here in order. -            // Set the last reported MW state to the same as the PiP state since we haven't yet -            // actually resized the task (these callbacks need to proceed the configuration change -            // from the resize). -            // TODO(110009072): Once we move these callbacks to the client, remove all logic related -            // to forcing the update of the picture-in-picture mode as a part of the PiP animation. -            final boolean shouldScheduleMultiWindowModeChange = -                    mLastReportedMultiWindowMode != inMultiWindowMode(); +            // Picture-in-picture mode changes also trigger a multi-window mode change as well, so +            // update that here in order. Set the last reported MW state to the same as the PiP +            // state since we haven't yet actually resized the task (these callbacks need to +            // precede the configuration change from the resize.              mLastReportedPictureInPictureMode = inPictureInPictureMode;              mLastReportedMultiWindowMode = inPictureInPictureMode; -            final Configuration newConfig = new Configuration();              if (targetStackBounds != null && !targetStackBounds.isEmpty()) { -                newConfig.setTo(task.getRequestedOverrideConfiguration()); -                Rect outBounds = newConfig.windowConfiguration.getBounds(); -                task.adjustForMinimalTaskDimensions(outBounds, outBounds); -                task.computeConfigResourceOverrides(newConfig, task.getParent().getConfiguration()); -            } -            schedulePictureInPictureModeChanged(newConfig); -            if (shouldScheduleMultiWindowModeChange) { -                scheduleMultiWindowModeChanged(newConfig); +                computeConfigurationAfterMultiWindowModeChange();              } +            ensureActivityConfiguration(0 /* globalChanges */, PRESERVE_WINDOWS, +                    true /* ignoreVisibility */);          }      } -    private void schedulePictureInPictureModeChanged(Configuration overrideConfig) { -        try { -            mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), appToken, -                    PipModeChangeItem.obtain(mLastReportedPictureInPictureMode, -                            overrideConfig)); -        } catch (Exception e) { -            // If process died, no one cares. -        } +    private void computeConfigurationAfterMultiWindowModeChange() { +        final Configuration newConfig = new Configuration(); +        newConfig.setTo(task.getRequestedOverrideConfiguration()); +        Rect outBounds = newConfig.windowConfiguration.getBounds(); +        task.adjustForMinimalTaskDimensions(outBounds, outBounds); +        task.computeConfigResourceOverrides(newConfig, task.getParent().getConfiguration());      }      Task getTask() { @@ -4531,6 +4504,15 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A              return false;          } +        // Activity in a pinned stack should not be visible if the stack is in force hidden state. +        // Typically due to the FLAG_FORCE_HIDDEN_FOR_PINNED_TASK set on the stack, which is a +        // work around to send onStop before windowing mode change callbacks. +        // See also ActivityStackSupervisor#removePinnedStackInSurfaceTransaction +        // TODO: Should we ever be visible if the stack/task is invisible? +        if (inPinnedWindowingMode() && stack.isForceHidden()) { +            return false; +        } +          // Check if the activity is on a sleeping display, and if it can turn it ON.          if (getDisplay().isSleeping()) {              final boolean canTurnScreenOn = !mSetToSleep || canTurnScreenOn() @@ -4620,7 +4602,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A              // the current contract for "auto-Pip" is that the app should enter it before onPause              // returns. Just need to confirm this reasoning makes sense.              final boolean deferHidingClient = canEnterPictureInPicture -                    && !isState(STOPPING, STOPPED, PAUSED); +                    && !isState(STARTED, STOPPING, STOPPED, PAUSED);              setDeferHidingClient(deferHidingClient);              setVisibility(false); @@ -4631,9 +4613,16 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A                      // activity is hidden                      supportsEnterPipOnTaskSwitch = false;                      break; - -                case INITIALIZING:                  case RESUMED: +                    // If the app is capable of entering PIP, we should try pausing it now +                    // so it can PIP correctly. +                    if (deferHidingClient) { +                        getRootTask().startPausingLocked( +                                mStackSupervisor.mUserLeaving /* userLeaving */, +                                false /* uiSleeping */, null /* resuming */); +                        break; +                    } +                case INITIALIZING:                  case PAUSING:                  case PAUSED:                  case STARTED: diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index 2ab03ce058b2..68c6627c3d24 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -2676,9 +2676,9 @@ class ActivityStack extends Task {              mRootWindowContainer.ensureVisibilityAndConfig(null /* starting */,                      getDisplay().mDisplayId, false /* markFrozenIfConfigChanged */,                      false /* deferResume */); +        } else { +            mRootWindowContainer.resumeFocusedStacksTopActivities();          } - -        mRootWindowContainer.resumeFocusedStacksTopActivities();          return true;      } @@ -3344,23 +3344,6 @@ class ActivityStack extends Task {          getDisplayContent().getPinnedStackController().setActions(actions);      } -    /** -     * @return True if we are currently animating the pinned stack from fullscreen to non-fullscreen -     *         bounds and we have a deferred PiP mode changed callback set with the animation. -     */ -    public boolean deferScheduleMultiWindowModeChanged() { -        if (inPinnedWindowingMode()) { -            // For the pinned stack, the deferring of the multi-window mode changed is tied to the -            // transition animation into picture-in-picture, and is called once the animation -            // completes, or is interrupted in a way that would leave the stack in a non-fullscreen -            // state. -            // @see BoundsAnimationController -            // @see BoundsAnimationControllerTests -            return (mBoundsAnimatingRequested || mBoundsAnimating); -        } -        return false; -    } -      public boolean isForceScaled() {          return mBoundsAnimating;      } diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java index fe9e5f3ca09e..6f0a339c023e 100644 --- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java @@ -1452,16 +1452,15 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {          /**           * Workaround: Force-stop all the activities in the pinned stack before we reparent them           * to the fullscreen stack.  This is to guarantee that when we are removing a stack, -         * that the client receives onStop() before it is reparented.  We do this by detaching -         * the stack from the display so that it will be considered invisible when -         * ensureActivitiesVisible() is called, and all of its activities will be marked -         * invisible as well and added to the stopping list.  After which we process the +         * that the client receives onStop() before new windowing mode is set. +         * We do this by detaching the stack from the display so that it will be considered +         * invisible when ensureActivitiesVisible() is called, and all of its activities will be +         * marked invisible as well and added to the stopping list.  After which we process the           * stopping list by handling the idle.           */          stack.cancelAnimation();          stack.setForceHidden(FLAG_FORCE_HIDDEN_FOR_PINNED_TASK, true /* set */);          stack.ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS); -        stack.setForceHidden(FLAG_FORCE_HIDDEN_FOR_PINNED_TASK, false /* set */);          activityIdleInternal(null /* idleActivity */, false /* fromTimeout */,                  true /* processPausingActivities */, null /* configuration */); @@ -1478,6 +1477,9 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {                  toDisplay.getDefaultTaskDisplayArea().positionStackAtBottom(stack);              } +            // Follow on the workaround: activities are kept force hidden till the new windowing +            // mode is set. +            stack.setForceHidden(FLAG_FORCE_HIDDEN_FOR_PINNED_TASK, false /* set */);              mRootWindowContainer.ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS);              mRootWindowContainer.resumeFocusedStacksTopActivities();          } finally { @@ -2242,12 +2244,6 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {      }      void scheduleUpdateMultiWindowMode(Task task) { -        // If the stack is animating in a way where we will be forcing a multi-mode change at the -        // end, then ensure that we defer all in between multi-window mode changes -        if (task.getStack().deferScheduleMultiWindowModeChanged()) { -            return; -        } -          final PooledConsumer c = PooledLambda.obtainConsumer(                  ActivityStackSupervisor::addToMultiWindowModeChangedList, this,                  PooledLambda.__(ActivityRecord.class)); diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 5220fb25af74..511baa540d5a 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -4036,36 +4036,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {          }      } -    @Override -    public boolean isInMultiWindowMode(IBinder token) { -        final long origId = Binder.clearCallingIdentity(); -        try { -            synchronized (mGlobalLock) { -                final ActivityRecord r = ActivityRecord.isInStackLocked(token); -                if (r == null) { -                    return false; -                } -                // An activity is consider to be in multi-window mode if its task isn't fullscreen. -                return r.inMultiWindowMode(); -            } -        } finally { -            Binder.restoreCallingIdentity(origId); -        } -    } - -    @Override -    public boolean isInPictureInPictureMode(IBinder token) { -        final long origId = Binder.clearCallingIdentity(); -        try { -            synchronized (mGlobalLock) { -                return isInPictureInPictureMode(ActivityRecord.forTokenLocked(token)); -            } -        } finally { -            Binder.restoreCallingIdentity(origId); -        } -    } - -    private boolean isInPictureInPictureMode(ActivityRecord r) { +    @VisibleForTesting +    boolean isInPictureInPictureMode(ActivityRecord r) {          return r != null                  && r.getRootTask() != null                  && r.inPinnedWindowingMode() diff --git a/services/core/java/com/android/server/wm/ConfigurationContainer.java b/services/core/java/com/android/server/wm/ConfigurationContainer.java index 1036af67c0db..51357d1c5d94 100644 --- a/services/core/java/com/android/server/wm/ConfigurationContainer.java +++ b/services/core/java/com/android/server/wm/ConfigurationContainer.java @@ -23,11 +23,9 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;  import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; -import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;  import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;  import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;  import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY; -import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;  import static android.app.WindowConfiguration.activityTypeToString;  import static android.app.WindowConfiguration.windowingModeToString; @@ -391,8 +389,7 @@ public abstract class ConfigurationContainer<E extends ConfigurationContainer> {      public boolean inMultiWindowMode() {          /*@WindowConfiguration.WindowingMode*/ int windowingMode =                  mFullConfiguration.windowConfiguration.getWindowingMode(); -        return windowingMode != WINDOWING_MODE_FULLSCREEN -                && windowingMode != WINDOWING_MODE_UNDEFINED; +        return WindowConfiguration.inMultiWindowMode(windowingMode);      }      /** Returns true if this container is currently in split-screen windowing mode. */ diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index c66ff330edbd..e109dede7532 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -280,7 +280,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo      private final DisplayArea.Root mRootDisplayArea = new DisplayArea.Root(mWmService); -    private final DisplayAreaPolicy mDisplayAreaPolicy; +    @VisibleForTesting +    final DisplayAreaPolicy mDisplayAreaPolicy;      private WindowState mTmpWindow;      private WindowState mTmpWindow2; diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java index dd761bec0f16..c96c664c10e5 100644 --- a/services/core/java/com/android/server/wm/RecentsAnimationController.java +++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java @@ -421,16 +421,17 @@ public class RecentsAnimationController implements DeathRecipient {      @VisibleForTesting      AnimationAdapter addAnimation(Task task, boolean isRecentTaskInvisible) { -        return addAnimation(task, isRecentTaskInvisible, null /* finishedCallback */); +        return addAnimation(task, isRecentTaskInvisible, false /* hidden */, +                null /* finishedCallback */);      }      @VisibleForTesting -    AnimationAdapter addAnimation(Task task, boolean isRecentTaskInvisible, +    AnimationAdapter addAnimation(Task task, boolean isRecentTaskInvisible, boolean hidden,              OnAnimationFinishedCallback finishedCallback) {          ProtoLog.d(WM_DEBUG_RECENTS_ANIMATIONS, "addAnimation(%s)", task.getName());          final TaskAnimationAdapter taskAdapter = new TaskAnimationAdapter(task,                  isRecentTaskInvisible); -        task.startAnimation(task.getPendingTransaction(), taskAdapter, false /* hidden */, +        task.startAnimation(task.getPendingTransaction(), taskAdapter, hidden,                  ANIMATION_TYPE_RECENTS, finishedCallback);          task.commitPendingTransaction();          mPendingAnimations.add(taskAdapter); @@ -530,7 +531,7 @@ public class RecentsAnimationController implements DeathRecipient {          final SparseBooleanArray recentTaskIds =                  mService.mAtmService.getRecentTasks().getRecentTaskIds();          TaskAnimationAdapter adapter = (TaskAnimationAdapter) addAnimation(task, -                !recentTaskIds.get(task.mTaskId), finishedCallback); +                !recentTaskIds.get(task.mTaskId), true /* hidden */, finishedCallback);          mPendingNewTaskTargets.add(task.mTaskId);          return adapter.createRemoteAnimationTarget();      } diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java index 56147f216e73..bf20cb907b71 100644 --- a/services/core/java/com/android/server/wm/Session.java +++ b/services/core/java/com/android/server/wm/Session.java @@ -679,10 +679,10 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {      @Override      public void updateInputChannel(IBinder channelToken, int displayId, SurfaceControl surface, -            int flags) { +            int flags, Region region) {          final long identity = Binder.clearCallingIdentity();          try { -            mService.updateInputChannel(channelToken, displayId, surface, flags); +            mService.updateInputChannel(channelToken, displayId, surface, flags, region);          } finally {              Binder.restoreCallingIdentity(identity);          } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 84d749f148fb..6789d3fa1f3a 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -7970,17 +7970,24 @@ public class WindowManagerService extends IWindowManager.Stub          handleTaskFocusChange(touchedWindow.getTask());      } -    private void handleTaskFocusChange(Task task) { +    @VisibleForTesting +    void handleTaskFocusChange(Task task) {          if (task == null) {              return;          } -        final ActivityStack stack = task.getStack();          // We ignore home stack since we don't want home stack to move to front when touched.          // Specifically, in freeform we don't want tapping on home to cause the freeform apps to go          // behind home. See b/117376413 -        if (stack.isActivityTypeHome()) { -            return; +        if (task.isActivityTypeHome()) { +            // Only ignore home stack if the requested focus home Task is in the same +            // TaskDisplayArea as the current focus Task. +            TaskDisplayArea homeTda = task.getDisplayArea(); +            WindowState curFocusedWindow = getFocusedWindow(); +            if (curFocusedWindow != null && homeTda != null +                    && curFocusedWindow.isDescendantOf(homeTda)) { +                return; +            }          }          try { @@ -8023,7 +8030,7 @@ public class WindowManagerService extends IWindowManager.Stub          }          updateInputChannel(clientChannel.getToken(), callingUid, callingPid, displayId, surface, -                name, applicationHandle, flags); +                name, applicationHandle, flags, null /* region */);          clientChannel.transferTo(outInputChannel);          clientChannel.dispose(); @@ -8035,7 +8042,7 @@ public class WindowManagerService extends IWindowManager.Stub      private void updateInputChannel(IBinder channelToken, int callingUid, int callingPid,              int displayId, SurfaceControl surface, String name, -            InputApplicationHandle applicationHandle, int flags) { +            InputApplicationHandle applicationHandle, int flags, Region region) {          InputWindowHandle h = new InputWindowHandle(applicationHandle, displayId);          h.token = channelToken;          h.name = name; @@ -8055,7 +8062,13 @@ public class WindowManagerService extends IWindowManager.Stub          h.inputFeatures = 0; -        h.replaceTouchableRegionWithCrop(null); +        if (region == null) { +            h.replaceTouchableRegionWithCrop(null); +        } else { +            h.touchableRegion.set(region); +            h.replaceTouchableRegionWithCrop = false; +            h.setTouchableRegionCrop(surface); +        }          SurfaceControl.Transaction t = mTransactionFactory.get();          t.setInputWindowInfo(surface, h); @@ -8069,7 +8082,7 @@ public class WindowManagerService extends IWindowManager.Stub       * is undefined.       */      void updateInputChannel(IBinder channelToken, int displayId, SurfaceControl surface, -            int flags) { +            int flags, Region region) {          final InputApplicationHandle applicationHandle;          final String name;          final EmbeddedWindowController.EmbeddedWindow win; @@ -8084,7 +8097,7 @@ public class WindowManagerService extends IWindowManager.Stub          }          updateInputChannel(channelToken, win.mOwnerUid, win.mOwnerPid, displayId, surface, name, -                applicationHandle, flags); +                applicationHandle, flags, region);      }      /** Return whether layer tracing is enabled */ diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java index c8ec7b5503d1..d8874e40a760 100644 --- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java @@ -291,7 +291,6 @@ public class QuotaControllerTest {      private JobStatus createJobStatus(String testTag, int jobId) {          JobInfo jobInfo = new JobInfo.Builder(jobId,                  new ComponentName(mContext, "TestQuotaJobService")) -                .setMinimumLatency(Math.abs(jobId) + 1)                  .build();          return createJobStatus(testTag, SOURCE_PACKAGE, CALLING_UID, jobInfo);      } @@ -302,6 +301,9 @@ public class QuotaControllerTest {                  jobInfo, callingUid, packageName, SOURCE_USER_ID, testTag);          // Make sure tests aren't passing just because the default bucket is likely ACTIVE.          js.setStandbyBucket(FREQUENT_INDEX); +        // Make sure Doze and background-not-restricted don't affect tests. +        js.setDeviceNotDozingConstraintSatisfied(/* state */ true, /* whitelisted */false); +        js.setBackgroundNotRestrictedConstraintSatisfied(true);          return js;      } @@ -649,6 +651,7 @@ public class QuotaControllerTest {              assertEquals(expectedStats, inputStats);              assertTrue(mQuotaController.isWithinQuotaLocked(SOURCE_USER_ID, SOURCE_PACKAGE,                      RARE_INDEX)); +            assertTrue("Job not ready: " + jobStatus, jobStatus.isReady());          }          // Add old session. Make sure values are combined correctly. @@ -689,6 +692,7 @@ public class QuotaControllerTest {          assertEquals(expectedStats, inputStats);          assertFalse(                  mQuotaController.isWithinQuotaLocked(SOURCE_USER_ID, SOURCE_PACKAGE, RARE_INDEX)); +        assertFalse("Job unexpectedly ready: " + jobStatus, jobStatus.isReady());      }      /** @@ -1325,6 +1329,7 @@ public class QuotaControllerTest {          assertEquals(2, mQuotaController.getExecutionStatsLocked(                  SOURCE_USER_ID, SOURCE_PACKAGE, ACTIVE_INDEX).jobCountInRateLimitingWindow);          assertTrue(mQuotaController.isWithinQuotaLocked(jobStatus)); +        assertTrue(jobStatus.isReady());      }      @Test @@ -1387,7 +1392,9 @@ public class QuotaControllerTest {          mQuotaController.maybeStopTrackingJobLocked(unaffected, null, false);          assertTrue(mQuotaController.isWithinQuotaLocked(unaffected)); +        assertTrue(unaffected.isReady());          assertFalse(mQuotaController.isWithinQuotaLocked(fgStateChanger)); +        assertFalse(fgStateChanger.isReady());          assertEquals(1,                  mQuotaController.getTimingSessions(SOURCE_USER_ID, unaffectedPkgName).size());          assertEquals(42, diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java index bec37e929a80..6b3ee5adfc32 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java @@ -802,6 +802,7 @@ public final class UserManagerTest {      @Test      public void testCreateProfile_withContextUserId() throws Exception { +        assumeManagedUsersSupported();          final int primaryUserId = mUserManager.getPrimaryUser().id;          UserInfo userProfile = createProfileForUser("Managed 1", @@ -820,6 +821,7 @@ public final class UserManagerTest {      @Test      public void testSetUserName_withContextUserId() throws Exception { +        assumeManagedUsersSupported();          final int primaryUserId = mUserManager.getPrimaryUser().id;          UserInfo userInfo1 = createProfileForUser("Managed 1", @@ -855,6 +857,7 @@ public final class UserManagerTest {      @Test      public void testGetUserIcon_withContextUserId() throws Exception { +        assumeManagedUsersSupported();          final int primaryUserId = mUserManager.getPrimaryUser().id;          UserInfo userInfo1 = createProfileForUser("Managed 1", @@ -975,8 +978,11 @@ public final class UserManagerTest {      }      private void assumeManagedUsersSupported() { +        // In Automotive, if headless system user is enabled, a managed user cannot be created +        // under a primary user.          assumeTrue("device doesn't support managed users", -                mPackageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)); +                mPackageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS) +                && (!isAutomotive() || !UserManager.isHeadlessSystemUserMode()));      }      private boolean isAutomotive() { diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java index 353c781c15ef..00439f84702d 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java @@ -23,6 +23,7 @@ import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;  import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;  import static android.view.WindowManager.TRANSIT_TASK_OPEN; +import static android.window.DisplayAreaOrganizer.FEATURE_DEFAULT_TASK_CONTAINER;  import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;  import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyFloat; @@ -35,6 +36,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy;  import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;  import static com.android.dx.mockito.inline.extended.ExtendedMockito.times;  import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; +import static com.android.server.wm.DisplayArea.Type.ANY;  import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;  import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_SCREEN_ROTATION;  import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN; @@ -839,6 +841,36 @@ public class WindowContainerTests extends WindowTestsBase {          verifyWindowContainerApplyAnimation(stack, activity);      } +    @Test +    public void testGetDisplayArea() { +        // WindowContainer +        final WindowContainer windowContainer = new WindowContainer(mWm); + +        assertNull(windowContainer.getDisplayArea()); + +        // ActivityStack > WindowContainer +        final ActivityStack activityStack = createTaskStackOnDisplay(mDisplayContent); +        activityStack.addChild(windowContainer, 0); +        activityStack.setParent(null); + +        assertNull(windowContainer.getDisplayArea()); +        assertNull(activityStack.getDisplayArea()); + +        // TaskDisplayArea > ActivityStack > WindowContainer +        final TaskDisplayArea taskDisplayArea = new TaskDisplayArea( +                mDisplayContent, mWm, "TaskDisplayArea", FEATURE_DEFAULT_TASK_CONTAINER); +        taskDisplayArea.addChild(activityStack, 0); + +        assertEquals(taskDisplayArea, windowContainer.getDisplayArea()); +        assertEquals(taskDisplayArea, activityStack.getDisplayArea()); +        assertEquals(taskDisplayArea, taskDisplayArea.getDisplayArea()); + +        // DisplayArea +        final DisplayArea displayArea = new DisplayArea(mWm, ANY, "DisplayArea"); + +        assertEquals(displayArea, displayArea.getDisplayArea()); +    } +      private void verifyWindowContainerApplyAnimation(WindowContainer wc, ActivityRecord act) {          // Initial remote animation for app transition.          final RemoteAnimationAdapter adapter = new RemoteAnimationAdapter( diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java index 79b9ae1b902a..f52905ef6ae9 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java @@ -16,21 +16,30 @@  package com.android.server.wm; +import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; +import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; +import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; +import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;  import static android.os.Process.INVALID_UID; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;  import static android.view.WindowManager.LayoutParams.TYPE_TOAST; +import static android.window.DisplayAreaOrganizer.FEATURE_VENDOR_FIRST;  import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; +import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;  import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue;  import static org.mockito.ArgumentMatchers.anyString;  import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when;  import android.content.pm.PackageManager;  import android.os.IBinder; +import android.os.RemoteException;  import android.platform.test.annotations.Presubmit;  import androidx.test.filters.SmallTest; @@ -40,6 +49,10 @@ import org.junit.Test;  import org.junit.rules.ExpectedException;  import org.junit.runner.RunWith; +/** + * Build/Install/Run: + *  atest WmTests:WindowManagerServiceTests + */  @SmallTest  @Presubmit  @RunWith(WindowTestRunner.class) @@ -105,4 +118,70 @@ public class WindowManagerServiceTests extends WindowTestsBase {          mWm.removeWindowToken(token, mDisplayContent.getDisplayId());      } + +    @Test +    public void testTaskFocusChange_stackNotHomeType_focusChanges() throws RemoteException { +        DisplayContent display = createNewDisplay(); +        // Current focused window +        ActivityStack focusedStack = createTaskStackOnDisplay( +                WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD, display); +        Task focusedTask = createTaskInStack(focusedStack, 0 /* userId */); +        WindowState focusedWindow = createAppWindow(focusedTask, TYPE_APPLICATION, "App Window"); +        mDisplayContent.mCurrentFocus = focusedWindow; +        // Tapped task +        ActivityStack tappedStack = createTaskStackOnDisplay( +                WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, display); +        Task tappedTask = createTaskInStack(tappedStack, 0 /* userId */); +        spyOn(mWm.mActivityTaskManager); + +        mWm.handleTaskFocusChange(tappedTask); + +        verify(mWm.mActivityTaskManager).setFocusedTask(tappedTask.mTaskId); +    } + +    @Test +    public void testTaskFocusChange_stackHomeTypeWithSameTaskDisplayArea_focusDoesNotChange() +            throws RemoteException { +        DisplayContent display = createNewDisplay(); +        // Current focused window +        ActivityStack focusedStack = createTaskStackOnDisplay( +                WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD, display); +        Task focusedTask = createTaskInStack(focusedStack, 0 /* userId */); +        WindowState focusedWindow = createAppWindow(focusedTask, TYPE_APPLICATION, "App Window"); +        mDisplayContent.mCurrentFocus = focusedWindow; +        // Tapped home task +        ActivityStack tappedStack = createTaskStackOnDisplay( +                WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, display); +        Task tappedTask = createTaskInStack(tappedStack, 0 /* userId */); +        spyOn(mWm.mActivityTaskManager); + +        mWm.handleTaskFocusChange(tappedTask); + +        verify(mWm.mActivityTaskManager, never()).setFocusedTask(tappedTask.mTaskId); +    } + +    @Test +    public void testTaskFocusChange_stackHomeTypeWithDifferentTaskDisplayArea_focusChanges() +            throws RemoteException { +        DisplayContent display = createNewDisplay(); +        TaskDisplayArea secondTda = +                new TaskDisplayArea(display, mWm, "Tapped TDA", FEATURE_VENDOR_FIRST); +        display.mDisplayAreaPolicy.mRoot.addChild(secondTda, 1); +        display.mDisplayAreaPolicy.mTaskDisplayAreas.add(secondTda); +        // Current focused window +        ActivityStack focusedStack = createTaskStackOnDisplay( +                WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD, display); +        Task focusedTask = createTaskInStack(focusedStack, 0 /* userId */); +        WindowState focusedWindow = createAppWindow(focusedTask, TYPE_APPLICATION, "App Window"); +        mDisplayContent.mCurrentFocus = focusedWindow; +        // Tapped home task on another task display area +        ActivityStack tappedStack = createTaskStackOnTaskDisplayArea( +                WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, secondTda); +        Task tappedTask = createTaskInStack(tappedStack, 0 /* userId */); +        spyOn(mWm.mActivityTaskManager); + +        mWm.handleTaskFocusChange(tappedTask); + +        verify(mWm.mActivityTaskManager).setFocusedTask(tappedTask.mTaskId); +    }  } diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java index 94c204ab0fe0..0eaab527267a 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java @@ -304,6 +304,20 @@ class WindowTestsBase extends SystemServiceTestsBase {          }      } +    ActivityStack createTaskStackOnTaskDisplayArea( +            int windowingMode, int activityType, TaskDisplayArea tda) { +        synchronized (mWm.mGlobalLock) { +            return new ActivityTestsBase.StackBuilder( +                    tda.mDisplayContent.mWmService.mAtmService.mRootWindowContainer) +                    .setTaskDisplayArea(tda) +                    .setWindowingMode(windowingMode) +                    .setActivityType(activityType) +                    .setCreateActivity(false) +                    .setIntent(new Intent()) +                    .build(); +        } +    } +      /** Creates a {@link Task} and adds it to the specified {@link ActivityStack}. */      Task createTaskInStack(ActivityStack stack, int userId) {          return WindowTestUtils.createTaskInStack(mWm, stack, userId); diff --git a/startop/iorap/TEST_MAPPING b/startop/iorap/TEST_MAPPING index 1d8119d91240..8c9d4dfb0894 100644 --- a/startop/iorap/TEST_MAPPING +++ b/startop/iorap/TEST_MAPPING @@ -2,9 +2,6 @@    "presubmit": [      {        "name": "libiorap-java-tests" -    }, -    { -      "name": "iorap-functional-tests"      }    ],    "imports": [ diff --git a/tests/net/java/android/net/TelephonyNetworkSpecifierTest.java b/tests/net/java/android/net/TelephonyNetworkSpecifierTest.java index 47afed441ace..efb92033df1e 100644 --- a/tests/net/java/android/net/TelephonyNetworkSpecifierTest.java +++ b/tests/net/java/android/net/TelephonyNetworkSpecifierTest.java @@ -19,7 +19,10 @@ package android.net;  import static com.android.testutils.ParcelUtilsKt.assertParcelSane;  import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import android.net.wifi.WifiNetworkSpecifier;  import android.telephony.SubscriptionManager;  import androidx.test.filters.SmallTest; @@ -32,6 +35,7 @@ import org.junit.Test;  @SmallTest  public class TelephonyNetworkSpecifierTest {      private static final int TEST_SUBID = 5; +    private static final String TEST_SSID = "Test123";      /**       * Validate that IllegalArgumentException will be thrown if build TelephonyNetworkSpecifier @@ -79,4 +83,31 @@ public class TelephonyNetworkSpecifierTest {                  .build();          assertParcelSane(specifier, 1 /* fieldCount */);      } + +    /** +     * Validate the behavior of method canBeSatisfiedBy(). +     */ +    @Test +    public void testCanBeSatisfiedBy() { +        final TelephonyNetworkSpecifier tns1 = new TelephonyNetworkSpecifier.Builder() +                .setSubscriptionId(TEST_SUBID) +                .build(); +        final TelephonyNetworkSpecifier tns2 = new TelephonyNetworkSpecifier.Builder() +                .setSubscriptionId(TEST_SUBID) +                .build(); +        final WifiNetworkSpecifier wns = new WifiNetworkSpecifier.Builder() +                .setSsid(TEST_SSID) +                .build(); +        final MatchAllNetworkSpecifier mans = new MatchAllNetworkSpecifier(); + +        // Test equality +        assertEquals(tns1, tns2); +        assertTrue(tns1.canBeSatisfiedBy(tns1)); +        assertTrue(tns1.canBeSatisfiedBy(tns2)); + +        // Test other edge cases. +        assertFalse(tns1.canBeSatisfiedBy(null)); +        assertFalse(tns1.canBeSatisfiedBy(wns)); +        assertTrue(tns1.canBeSatisfiedBy(mans)); +    }  } diff --git a/tools/aapt2/dump/DumpManifest.cpp b/tools/aapt2/dump/DumpManifest.cpp index e7a82034c77a..4a6bfd031284 100644 --- a/tools/aapt2/dump/DumpManifest.cpp +++ b/tools/aapt2/dump/DumpManifest.cpp @@ -91,6 +91,7 @@ enum {  };  const std::string& kAndroidNamespace = "http://schemas.android.com/apk/res/android"; +constexpr int kCurrentDevelopmentVersion = 10000;  /** Retrieves the attribute of the element with the specified attribute resource id. */  static xml::Attribute* FindAttribute(xml::Element *el, uint32_t resd_id) { @@ -325,7 +326,7 @@ class ManifestExtractor {      ConfigDescription config;      config.orientation = android::ResTable_config::ORIENTATION_PORT;      config.density = android::ResTable_config::DENSITY_MEDIUM; -    config.sdkVersion = 10000; // Very high. +    config.sdkVersion = kCurrentDevelopmentVersion; // Very high.      config.screenWidthDp = 320;      config.screenHeightDp = 480;      config.smallestScreenWidthDp = 320; @@ -622,6 +623,8 @@ class UsesSdkBadging : public ManifestExtractor::Element {      }      if (target_sdk) {        extractor()->RaiseTargetSdk(*target_sdk); +    } else if (target_sdk_name) { +      extractor()->RaiseTargetSdk(kCurrentDevelopmentVersion);      }    } |