Merge "Revert "Revert "Move DozeServiceHost out of StatusBar."""
diff --git a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java
index 1a10753..5e5a04b 100644
--- a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java
+++ b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java
@@ -156,8 +156,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -2071,9 +2069,7 @@
CompletableFuture<HistoricalOps> ops = new CompletableFuture<>();
HistoricalOpsRequest histOpsRequest =
- new HistoricalOpsRequest.Builder(
- Instant.now().minus(1, ChronoUnit.HOURS).toEpochMilli(),
- Long.MAX_VALUE).build();
+ new HistoricalOpsRequest.Builder(0, Long.MAX_VALUE).build();
appOps.getHistoricalOps(histOpsRequest, mContext.getMainExecutor(), ops::complete);
HistoricalOps histOps = ops.get(EXTERNAL_STATS_SYNC_TIMEOUT_MILLIS,
diff --git a/api/current.txt b/api/current.txt
index fb65243..57bbd77 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -9231,14 +9231,16 @@
public final class WifiDeviceFilter implements android.companion.DeviceFilter<android.net.wifi.ScanResult> {
method public int describeContents();
- method public void writeToParcel(android.os.Parcel, int);
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.companion.WifiDeviceFilter> CREATOR;
}
public static final class WifiDeviceFilter.Builder {
ctor public WifiDeviceFilter.Builder();
method @NonNull public android.companion.WifiDeviceFilter build();
- method public android.companion.WifiDeviceFilter.Builder setNamePattern(@Nullable java.util.regex.Pattern);
+ method @NonNull public android.companion.WifiDeviceFilter.Builder setBssid(@Nullable android.net.MacAddress);
+ method @NonNull public android.companion.WifiDeviceFilter.Builder setBssidMask(@NonNull android.net.MacAddress);
+ method @NonNull public android.companion.WifiDeviceFilter.Builder setNamePattern(@Nullable java.util.regex.Pattern);
}
}
@@ -38917,6 +38919,7 @@
field public static final String ACTION_SECURITY_SETTINGS = "android.settings.SECURITY_SETTINGS";
field public static final String ACTION_SETTINGS = "android.settings.SETTINGS";
field public static final String ACTION_SHOW_REGULATORY_INFO = "android.settings.SHOW_REGULATORY_INFO";
+ field public static final String ACTION_SHOW_WORK_POLICY_INFO = "android.settings.SHOW_WORK_POLICY_INFO";
field public static final String ACTION_SOUND_SETTINGS = "android.settings.SOUND_SETTINGS";
field @Deprecated public static final String ACTION_STORAGE_VOLUME_ACCESS_SETTINGS = "android.settings.STORAGE_VOLUME_ACCESS_SETTINGS";
field public static final String ACTION_SYNC_SETTINGS = "android.settings.SYNC_SETTINGS";
diff --git a/api/system-current.txt b/api/system-current.txt
index b9dfad5..e6a3e9b 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -3639,7 +3639,7 @@
public final class MediaRecorder.AudioSource {
field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public static final int ECHO_REFERENCE = 1997; // 0x7cd
field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD) public static final int HOTWORD = 1999; // 0x7cf
- field public static final int RADIO_TUNER = 1998; // 0x7ce
+ field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public static final int RADIO_TUNER = 1998; // 0x7ce
}
public class PlayerProxy {
@@ -6962,9 +6962,11 @@
method @Deprecated public final android.view.textclassifier.TextClassifier getLocalTextClassifier();
method @Nullable public final android.os.IBinder onBind(android.content.Intent);
method @MainThread public abstract void onClassifyText(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassification.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextClassification>);
+ method public void onConnected();
method @MainThread public void onCreateTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationContext, @NonNull android.view.textclassifier.TextClassificationSessionId);
method @MainThread public void onDestroyTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationSessionId);
method @MainThread public void onDetectLanguage(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLanguage.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextLanguage>);
+ method public void onDisconnected();
method @MainThread public abstract void onGenerateLinks(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLinks.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextLinks>);
method @Deprecated @MainThread public void onSelectionEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.SelectionEvent);
method @MainThread public void onSuggestConversationActions(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.ConversationActions.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.ConversationActions>);
diff --git a/core/java/android/app/NotificationHistory.aidl b/core/java/android/app/NotificationHistory.aidl
new file mode 100644
index 0000000..8150e74
--- /dev/null
+++ b/core/java/android/app/NotificationHistory.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2019, 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;
+
+parcelable NotificationHistory;
\ No newline at end of file
diff --git a/core/java/android/app/NotificationHistory.java b/core/java/android/app/NotificationHistory.java
new file mode 100644
index 0000000..c35246b
--- /dev/null
+++ b/core/java/android/app/NotificationHistory.java
@@ -0,0 +1,506 @@
+/*
+ * Copyright (C) 2019 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;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.UserIdInt;
+import android.graphics.drawable.Icon;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+
+/**
+ * @hide
+ */
+public final class NotificationHistory implements Parcelable {
+
+ /**
+ * A historical notification. Any new fields added here should also be added to
+ * {@link #readNotificationFromParcel} and
+ * {@link #writeNotificationToParcel(HistoricalNotification, Parcel, int)}.
+ */
+ public static final class HistoricalNotification {
+ private String mPackage;
+ private String mChannelName;
+ private String mChannelId;
+ private int mUid;
+ private @UserIdInt int mUserId;
+ private long mPostedTimeMs;
+ private String mTitle;
+ private String mText;
+ private Icon mIcon;
+
+ private HistoricalNotification() {}
+
+ public String getPackage() {
+ return mPackage;
+ }
+
+ public String getChannelName() {
+ return mChannelName;
+ }
+
+ public String getChannelId() {
+ return mChannelId;
+ }
+
+ public int getUid() {
+ return mUid;
+ }
+
+ public int getUserId() {
+ return mUserId;
+ }
+
+ public long getPostedTimeMs() {
+ return mPostedTimeMs;
+ }
+
+ public String getTitle() {
+ return mTitle;
+ }
+
+ public String getText() {
+ return mText;
+ }
+
+ public Icon getIcon() {
+ return mIcon;
+ }
+
+ public String getKey() {
+ return mPackage + "|" + mUid + "|" + mPostedTimeMs;
+ }
+
+ @Override
+ public String toString() {
+ return "HistoricalNotification{" +
+ "key='" + getKey() + '\'' +
+ ", mChannelName='" + mChannelName + '\'' +
+ ", mChannelId='" + mChannelId + '\'' +
+ ", mUserId=" + mUserId +
+ ", mTitle='" + mTitle + '\'' +
+ ", mText='" + mText + '\'' +
+ ", mIcon=" + mIcon +
+ '}';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ HistoricalNotification that = (HistoricalNotification) o;
+ boolean iconsAreSame = getIcon() == null && that.getIcon() == null
+ || (getIcon() != null && that.getIcon() != null
+ && getIcon().sameAs(that.getIcon()));
+ return getUid() == that.getUid() &&
+ getUserId() == that.getUserId() &&
+ getPostedTimeMs() == that.getPostedTimeMs() &&
+ Objects.equals(getPackage(), that.getPackage()) &&
+ Objects.equals(getChannelName(), that.getChannelName()) &&
+ Objects.equals(getChannelId(), that.getChannelId()) &&
+ Objects.equals(getTitle(), that.getTitle()) &&
+ Objects.equals(getText(), that.getText()) &&
+ iconsAreSame;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(getPackage(), getChannelName(), getChannelId(), getUid(),
+ getUserId(),
+ getPostedTimeMs(), getTitle(), getText(), getIcon());
+ }
+
+ public static final class Builder {
+ private String mPackage;
+ private String mChannelName;
+ private String mChannelId;
+ private int mUid;
+ private @UserIdInt int mUserId;
+ private long mPostedTimeMs;
+ private String mTitle;
+ private String mText;
+ private Icon mIcon;
+
+ public Builder() {}
+
+ public Builder setPackage(String aPackage) {
+ mPackage = aPackage;
+ return this;
+ }
+
+ public Builder setChannelName(String channelName) {
+ mChannelName = channelName;
+ return this;
+ }
+
+ public Builder setChannelId(String channelId) {
+ mChannelId = channelId;
+ return this;
+ }
+
+ public Builder setUid(int uid) {
+ mUid = uid;
+ return this;
+ }
+
+ public Builder setUserId(int userId) {
+ mUserId = userId;
+ return this;
+ }
+
+ public Builder setPostedTimeMs(long postedTimeMs) {
+ mPostedTimeMs = postedTimeMs;
+ return this;
+ }
+
+ public Builder setTitle(String title) {
+ mTitle = title;
+ return this;
+ }
+
+ public Builder setText(String text) {
+ mText = text;
+ return this;
+ }
+
+ public Builder setIcon(Icon icon) {
+ mIcon = icon;
+ return this;
+ }
+
+ public HistoricalNotification build() {
+ HistoricalNotification n = new HistoricalNotification();
+ n.mPackage = mPackage;
+ n.mChannelName = mChannelName;
+ n.mChannelId = mChannelId;
+ n.mUid = mUid;
+ n.mUserId = mUserId;
+ n.mPostedTimeMs = mPostedTimeMs;
+ n.mTitle = mTitle;
+ n.mText = mText;
+ n.mIcon = mIcon;
+ return n;
+ }
+ }
+ }
+
+ // Only used when creating the resulting history. Not used for reading/unparceling.
+ private List<HistoricalNotification> mNotificationsToWrite = new ArrayList<>();
+ // ditto
+ private Set<String> mStringsToWrite = new HashSet<>();
+
+ // Mostly used for reading/unparceling events.
+ private Parcel mParcel = null;
+ private int mHistoryCount;
+ private int mIndex = 0;
+
+ // Sorted array of commonly used strings to shrink the size of the parcel. populated from
+ // mStringsToWrite on write and the parcel on read.
+ private String[] mStringPool;
+
+ /**
+ * Construct the iterator from a parcel.
+ */
+ private NotificationHistory(Parcel in) {
+ byte[] bytes = in.readBlob();
+ Parcel data = Parcel.obtain();
+ data.unmarshall(bytes, 0, bytes.length);
+ data.setDataPosition(0);
+ mHistoryCount = data.readInt();
+ mIndex = data.readInt();
+ if (mHistoryCount > 0) {
+ mStringPool = data.createStringArray();
+
+ final int listByteLength = data.readInt();
+ final int positionInParcel = data.readInt();
+ mParcel = Parcel.obtain();
+ mParcel.setDataPosition(0);
+ mParcel.appendFrom(data, data.dataPosition(), listByteLength);
+ mParcel.setDataSize(mParcel.dataPosition());
+ mParcel.setDataPosition(positionInParcel);
+ }
+ }
+
+ /**
+ * Create an empty iterator.
+ */
+ public NotificationHistory() {
+ mHistoryCount = 0;
+ }
+
+ /**
+ * Returns whether or not there are more events to read using {@link #getNextNotification()}.
+ *
+ * @return true if there are more events, false otherwise.
+ */
+ public boolean hasNextNotification() {
+ return mIndex < mHistoryCount;
+ }
+
+ /**
+ * Retrieve the next {@link HistoricalNotification} from the collection and put the
+ * resulting data into {@code notificationOut}.
+ *
+ * @return The next {@link HistoricalNotification} or null if there are no more notifications.
+ */
+ public @Nullable HistoricalNotification getNextNotification() {
+ if (!hasNextNotification()) {
+ return null;
+ }
+
+ HistoricalNotification n = readNotificationFromParcel(mParcel);
+
+ mIndex++;
+ if (!hasNextNotification()) {
+ mParcel.recycle();
+ mParcel = null;
+ }
+ return n;
+ }
+
+ /**
+ * Adds all of the pooled strings that have been read from disk
+ */
+ public void addPooledStrings(@NonNull List<String> strings) {
+ mStringsToWrite.addAll(strings);
+ }
+
+ /**
+ * Builds the pooled strings from pending notifications. Useful if the pooled strings on
+ * disk contains strings that aren't relevant to the notifications in our collection.
+ */
+ public void poolStringsFromNotifications() {
+ mStringsToWrite.clear();
+ for (int i = 0; i < mNotificationsToWrite.size(); i++) {
+ final HistoricalNotification notification = mNotificationsToWrite.get(i);
+ mStringsToWrite.add(notification.getPackage());
+ mStringsToWrite.add(notification.getChannelName());
+ mStringsToWrite.add(notification.getChannelId());
+ }
+ }
+
+ /**
+ * Used when populating a history from disk; adds an historical notification.
+ */
+ public void addNotificationToWrite(@NonNull HistoricalNotification notification) {
+ if (notification == null) {
+ return;
+ }
+ mNotificationsToWrite.add(notification);
+ mHistoryCount++;
+ }
+
+ /**
+ * Removes a package's historical notifications and regenerates the string pool
+ */
+ public void removeNotificationsFromWrite(String packageName) {
+ for (int i = mNotificationsToWrite.size() - 1; i >= 0; i--) {
+ if (packageName.equals(mNotificationsToWrite.get(i).getPackage())) {
+ mNotificationsToWrite.remove(i);
+ }
+ }
+ poolStringsFromNotifications();
+ }
+
+ /**
+ * Gets pooled strings in order to write them to disk
+ */
+ public @NonNull String[] getPooledStringsToWrite() {
+ String[] stringsToWrite = mStringsToWrite.toArray(new String[]{});
+ Arrays.sort(stringsToWrite);
+ return stringsToWrite;
+ }
+
+ /**
+ * Gets the historical notifications in order to write them to disk
+ */
+ public @NonNull List<HistoricalNotification> getNotificationsToWrite() {
+ return mNotificationsToWrite;
+ }
+
+ /**
+ * Gets the number of notifications in the collection
+ */
+ public int getHistoryCount() {
+ return mHistoryCount;
+ }
+
+ private int findStringIndex(String str) {
+ final int index = Arrays.binarySearch(mStringPool, str);
+ if (index < 0) {
+ throw new IllegalStateException("String '" + str + "' is not in the string pool");
+ }
+ return index;
+ }
+
+ /**
+ * Writes a single notification to the parcel. Modify this when updating member variables of
+ * {@link HistoricalNotification}.
+ */
+ private void writeNotificationToParcel(HistoricalNotification notification, Parcel p,
+ int flags) {
+ final int packageIndex;
+ if (notification.mPackage != null) {
+ packageIndex = findStringIndex(notification.mPackage);
+ } else {
+ packageIndex = -1;
+ }
+
+ final int channelNameIndex;
+ if (notification.getChannelName() != null) {
+ channelNameIndex = findStringIndex(notification.getChannelName());
+ } else {
+ channelNameIndex = -1;
+ }
+
+ final int channelIdIndex;
+ if (notification.getChannelId() != null) {
+ channelIdIndex = findStringIndex(notification.getChannelId());
+ } else {
+ channelIdIndex = -1;
+ }
+
+ p.writeInt(packageIndex);
+ p.writeInt(channelNameIndex);
+ p.writeInt(channelIdIndex);
+ p.writeInt(notification.getUid());
+ p.writeInt(notification.getUserId());
+ p.writeLong(notification.getPostedTimeMs());
+ p.writeString(notification.getTitle());
+ p.writeString(notification.getText());
+ notification.getIcon().writeToParcel(p, flags);
+ }
+
+ /**
+ * Reads a single notification from the parcel. Modify this when updating member variables of
+ * {@link HistoricalNotification}.
+ */
+ private HistoricalNotification readNotificationFromParcel(Parcel p) {
+ HistoricalNotification.Builder notificationOut = new HistoricalNotification.Builder();
+ final int packageIndex = p.readInt();
+ if (packageIndex >= 0) {
+ notificationOut.mPackage = mStringPool[packageIndex];
+ } else {
+ notificationOut.mPackage = null;
+ }
+
+ final int channelNameIndex = p.readInt();
+ if (channelNameIndex >= 0) {
+ notificationOut.setChannelName(mStringPool[channelNameIndex]);
+ } else {
+ notificationOut.setChannelName(null);
+ }
+
+ final int channelIdIndex = p.readInt();
+ if (channelIdIndex >= 0) {
+ notificationOut.setChannelId(mStringPool[channelIdIndex]);
+ } else {
+ notificationOut.setChannelId(null);
+ }
+
+ notificationOut.setUid(p.readInt());
+ notificationOut.setUserId(p.readInt());
+ notificationOut.setPostedTimeMs(p.readLong());
+ notificationOut.setTitle(p.readString());
+ notificationOut.setText(p.readString());
+ notificationOut.setIcon(Icon.CREATOR.createFromParcel(p));
+
+ return notificationOut.build();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ Parcel data = Parcel.obtain();
+ data.writeInt(mHistoryCount);
+ data.writeInt(mIndex);
+ if (mHistoryCount > 0) {
+ mStringPool = getPooledStringsToWrite();
+ data.writeStringArray(mStringPool);
+
+ if (!mNotificationsToWrite.isEmpty()) {
+ // typically system_server to a process
+
+ // Write out the events
+ Parcel p = Parcel.obtain();
+ try {
+ p.setDataPosition(0);
+ for (int i = 0; i < mHistoryCount; i++) {
+ final HistoricalNotification notification = mNotificationsToWrite.get(i);
+ writeNotificationToParcel(notification, p, flags);
+ }
+
+ final int listByteLength = p.dataPosition();
+
+ // Write the total length of the data.
+ data.writeInt(listByteLength);
+
+ // Write our current position into the data.
+ data.writeInt(0);
+
+ // Write the data.
+ data.appendFrom(p, 0, listByteLength);
+ } finally {
+ p.recycle();
+ }
+
+ } else if (mParcel != null) {
+ // typically process to process as mNotificationsToWrite is not populated on
+ // unparcel.
+
+ // Write the total length of the data.
+ data.writeInt(mParcel.dataSize());
+
+ // Write out current position into the data.
+ data.writeInt(mParcel.dataPosition());
+
+ // Write the data.
+ data.appendFrom(mParcel, 0, mParcel.dataSize());
+ } else {
+ throw new IllegalStateException(
+ "Either mParcel or mNotificationsToWrite must not be null");
+ }
+ }
+ // Data can be too large for a transact. Write the data as a Blob, which will be written to
+ // ashmem if too large.
+ dest.writeBlob(data.marshall());
+ }
+
+ public static final @NonNull Creator<NotificationHistory> CREATOR
+ = new Creator<NotificationHistory>() {
+ @Override
+ public NotificationHistory createFromParcel(Parcel source) {
+ return new NotificationHistory(source);
+ }
+
+ @Override
+ public NotificationHistory[] newArray(int size) {
+ return new NotificationHistory[size];
+ }
+ };
+}
diff --git a/core/java/android/companion/CompanionDeviceManager.java b/core/java/android/companion/CompanionDeviceManager.java
index cb35357..9cb73f9 100644
--- a/core/java/android/companion/CompanionDeviceManager.java
+++ b/core/java/android/companion/CompanionDeviceManager.java
@@ -42,11 +42,15 @@
/**
* System level service for managing companion devices
*
+ * See <a href="{@docRoot}guide/topics/connectivity/companion-device-pairing">this guide</a>
+ * for a usage example.
+ *
* <p>To obtain an instance call {@link Context#getSystemService}({@link
* Context#COMPANION_DEVICE_SERVICE}) Then, call {@link #associate(AssociationRequest,
* Callback, Handler)} to initiate the flow of associating current package with a
* device selected by user.</p>
*
+ * @see CompanionDeviceManager#associate
* @see AssociationRequest
*/
@SystemService(Context.COMPANION_DEVICE_SERVICE)
diff --git a/core/java/android/companion/WifiDeviceFilter.java b/core/java/android/companion/WifiDeviceFilter.java
index 62098d5..58bf874 100644
--- a/core/java/android/companion/WifiDeviceFilter.java
+++ b/core/java/android/companion/WifiDeviceFilter.java
@@ -17,17 +17,18 @@
package android.companion;
import static android.companion.BluetoothDeviceFilterUtils.getDeviceDisplayNameInternal;
-import static android.companion.BluetoothDeviceFilterUtils.patternFromString;
-import static android.companion.BluetoothDeviceFilterUtils.patternToString;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.annotation.SuppressLint;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.le.ScanFilter;
+import android.net.MacAddress;
import android.net.wifi.ScanResult;
import android.os.Parcel;
-import android.provider.OneTimeUseBuilder;
+import android.os.Parcelable;
+
+import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
import java.util.Objects;
import java.util.regex.Pattern;
@@ -37,30 +38,38 @@
*
* @see ScanFilter
*/
+@DataClass(
+ genParcelable = true,
+ genAidl = false,
+ genBuilder = true,
+ genEqualsHashCode = true,
+ genHiddenGetters = true)
public final class WifiDeviceFilter implements DeviceFilter<ScanResult> {
- private final Pattern mNamePattern;
+ /**
+ * If set, only devices with {@link BluetoothDevice#getName name} matching the given regular
+ * expression will be shown
+ */
+ @DataClass.ParcelWith(Parcelling.BuiltIn.ForPattern.class)
+ private @Nullable Pattern mNamePattern = null;
- private WifiDeviceFilter(Pattern namePattern) {
- mNamePattern = namePattern;
- }
+ /**
+ * If set, only devices with BSSID matching the given one will be shown
+ */
+ private @Nullable MacAddress mBssid = null;
- @SuppressLint("ParcelClassLoader")
- private WifiDeviceFilter(Parcel in) {
- this(patternFromString(in.readString()));
- }
-
- /** @hide */
- @Nullable
- public Pattern getNamePattern() {
- return mNamePattern;
- }
-
+ /**
+ * If set, only bits at positions set in this mask, will be compared to the given
+ * {@link Builder#setBssid BSSID} filter.
+ */
+ private @NonNull MacAddress mBssidMask = MacAddress.BROADCAST_ADDRESS;
/** @hide */
@Override
public boolean matches(ScanResult device) {
- return BluetoothDeviceFilterUtils.matchesName(getNamePattern(), device);
+ return BluetoothDeviceFilterUtils.matchesName(getNamePattern(), device)
+ && (mBssid == null
+ || MacAddress.fromString(device.BSSID).matches(mBssid, mBssidMask));
}
/** @hide */
@@ -75,65 +84,249 @@
return MEDIUM_TYPE_WIFI;
}
+
+
+ // Code below generated by codegen v1.0.11.
+ //
+ // DO NOT MODIFY!
+ // CHECKSTYLE:OFF Generated code
+ //
+ // To regenerate run:
+ // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/companion/WifiDeviceFilter.java
+ //
+ // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+ // Settings > Editor > Code Style > Formatter Control
+ //@formatter:off
+
+
+ @DataClass.Generated.Member
+ /* package-private */ WifiDeviceFilter(
+ @Nullable Pattern namePattern,
+ @Nullable MacAddress bssid,
+ @NonNull MacAddress bssidMask) {
+ this.mNamePattern = namePattern;
+ this.mBssid = bssid;
+ this.mBssidMask = bssidMask;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBssidMask);
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ /**
+ * If set, only devices with {@link BluetoothDevice#getName name} matching the given regular
+ * expression will be shown
+ *
+ * @hide
+ */
+ @DataClass.Generated.Member
+ public @Nullable Pattern getNamePattern() {
+ return mNamePattern;
+ }
+
+ /**
+ * If set, only devices with BSSID matching the given one will be shown
+ *
+ * @hide
+ */
+ @DataClass.Generated.Member
+ public @Nullable MacAddress getBssid() {
+ return mBssid;
+ }
+
+ /**
+ * If set, only bits at positions set in this mask, will be compared to the given
+ * {@link Builder#setBssid BSSID} filter.
+ *
+ * @hide
+ */
+ @DataClass.Generated.Member
+ public @NonNull MacAddress getBssidMask() {
+ return mBssidMask;
+ }
+
@Override
- public boolean equals(Object o) {
+ @DataClass.Generated.Member
+ public boolean equals(@Nullable Object o) {
+ // You can override field equality logic by defining either of the methods like:
+ // boolean fieldNameEquals(WifiDeviceFilter other) { ... }
+ // boolean fieldNameEquals(FieldType otherValue) { ... }
+
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
+ @SuppressWarnings("unchecked")
WifiDeviceFilter that = (WifiDeviceFilter) o;
- return Objects.equals(mNamePattern, that.mNamePattern);
+ //noinspection PointlessBooleanExpression
+ return true
+ && Objects.equals(mNamePattern, that.mNamePattern)
+ && Objects.equals(mBssid, that.mBssid)
+ && Objects.equals(mBssidMask, that.mBssidMask);
}
@Override
+ @DataClass.Generated.Member
public int hashCode() {
- return Objects.hash(mNamePattern);
+ // You can override field hashCode logic by defining methods like:
+ // int fieldNameHashCode() { ... }
+
+ int _hash = 1;
+ _hash = 31 * _hash + Objects.hashCode(mNamePattern);
+ _hash = 31 * _hash + Objects.hashCode(mBssid);
+ _hash = 31 * _hash + Objects.hashCode(mBssidMask);
+ return _hash;
}
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeString(patternToString(getNamePattern()));
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- public static final @android.annotation.NonNull Creator<WifiDeviceFilter> CREATOR
- = new Creator<WifiDeviceFilter>() {
- @Override
- public WifiDeviceFilter createFromParcel(Parcel in) {
- return new WifiDeviceFilter(in);
+ @DataClass.Generated.Member
+ static Parcelling<Pattern> sParcellingForNamePattern =
+ Parcelling.Cache.get(
+ Parcelling.BuiltIn.ForPattern.class);
+ static {
+ if (sParcellingForNamePattern == null) {
+ sParcellingForNamePattern = Parcelling.Cache.put(
+ new Parcelling.BuiltIn.ForPattern());
}
+ }
+ @Override
+ @DataClass.Generated.Member
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ // You can override field parcelling by defining methods like:
+ // void parcelFieldName(Parcel dest, int flags) { ... }
+
+ byte flg = 0;
+ if (mNamePattern != null) flg |= 0x1;
+ if (mBssid != null) flg |= 0x2;
+ dest.writeByte(flg);
+ sParcellingForNamePattern.parcel(mNamePattern, dest, flags);
+ if (mBssid != null) dest.writeTypedObject(mBssid, flags);
+ dest.writeTypedObject(mBssidMask, flags);
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int describeContents() { return 0; }
+
+ /** @hide */
+ @SuppressWarnings({"unchecked", "RedundantCast"})
+ @DataClass.Generated.Member
+ /* package-private */ WifiDeviceFilter(@NonNull Parcel in) {
+ // You can override field unparcelling by defining methods like:
+ // static FieldType unparcelFieldName(Parcel in) { ... }
+
+ byte flg = in.readByte();
+ Pattern namePattern = sParcellingForNamePattern.unparcel(in);
+ MacAddress bssid = (flg & 0x2) == 0 ? null : (MacAddress) in.readTypedObject(MacAddress.CREATOR);
+ MacAddress bssidMask = (MacAddress) in.readTypedObject(MacAddress.CREATOR);
+
+ this.mNamePattern = namePattern;
+ this.mBssid = bssid;
+ this.mBssidMask = bssidMask;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBssidMask);
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ @DataClass.Generated.Member
+ public static final @NonNull Parcelable.Creator<WifiDeviceFilter> CREATOR
+ = new Parcelable.Creator<WifiDeviceFilter>() {
@Override
public WifiDeviceFilter[] newArray(int size) {
return new WifiDeviceFilter[size];
}
+
+ @Override
+ public WifiDeviceFilter createFromParcel(@NonNull Parcel in) {
+ return new WifiDeviceFilter(in);
+ }
};
/**
- * Builder for {@link WifiDeviceFilter}
+ * A builder for {@link WifiDeviceFilter}
*/
- public static final class Builder extends OneTimeUseBuilder<WifiDeviceFilter> {
- private Pattern mNamePattern;
+ @SuppressWarnings("WeakerAccess")
+ @DataClass.Generated.Member
+ public static final class Builder {
+
+ private @Nullable Pattern mNamePattern;
+ private @Nullable MacAddress mBssid;
+ private @NonNull MacAddress mBssidMask;
+
+ private long mBuilderFieldsSet = 0L;
+
+ public Builder() {
+ }
/**
- * @param regex if set, only devices with {@link BluetoothDevice#getName name} matching the
- * given regular expression will be shown
- * @return self for chaining
+ * If set, only devices with {@link BluetoothDevice#getName name} matching the given regular
+ * expression will be shown
*/
- public Builder setNamePattern(@Nullable Pattern regex) {
+ @DataClass.Generated.Member
+ public @NonNull Builder setNamePattern(@Nullable Pattern value) {
checkNotUsed();
- mNamePattern = regex;
+ mBuilderFieldsSet |= 0x1;
+ mNamePattern = value;
return this;
}
- /** @inheritDoc */
- @Override
- @NonNull
- public WifiDeviceFilter build() {
- markUsed();
- return new WifiDeviceFilter(mNamePattern);
+ /**
+ * If set, only devices with BSSID matching the given one will be shown
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setBssid(@Nullable MacAddress value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x2;
+ mBssid = value;
+ return this;
+ }
+
+ /**
+ * If set, only bits at positions set in this mask, will be compared to the given
+ * {@link Builder#setBssid BSSID} filter.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setBssidMask(@NonNull MacAddress value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x4;
+ mBssidMask = value;
+ return this;
+ }
+
+ /** Builds the instance. This builder should not be touched after calling this! */
+ public @NonNull WifiDeviceFilter build() {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x8; // Mark builder used
+
+ if ((mBuilderFieldsSet & 0x1) == 0) {
+ mNamePattern = null;
+ }
+ if ((mBuilderFieldsSet & 0x2) == 0) {
+ mBssid = null;
+ }
+ if ((mBuilderFieldsSet & 0x4) == 0) {
+ mBssidMask = MacAddress.BROADCAST_ADDRESS;
+ }
+ WifiDeviceFilter o = new WifiDeviceFilter(
+ mNamePattern,
+ mBssid,
+ mBssidMask);
+ return o;
+ }
+
+ private void checkNotUsed() {
+ if ((mBuilderFieldsSet & 0x8) != 0) {
+ throw new IllegalStateException(
+ "This Builder should not be reused. Use a new Builder instance instead");
+ }
}
}
+
+ @DataClass.Generated(
+ time = 1571960300742L,
+ codegenVersion = "1.0.11",
+ sourceFile = "frameworks/base/core/java/android/companion/WifiDeviceFilter.java",
+ inputSignatures = "private @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForPattern.class) @android.annotation.Nullable java.util.regex.Pattern mNamePattern\nprivate @android.annotation.Nullable android.net.MacAddress mBssid\nprivate @android.annotation.NonNull android.net.MacAddress mBssidMask\npublic @java.lang.Override boolean matches(android.net.wifi.ScanResult)\npublic @java.lang.Override java.lang.String getDeviceDisplayName(android.net.wifi.ScanResult)\npublic @java.lang.Override int getMediumType()\nclass WifiDeviceFilter extends java.lang.Object implements [android.companion.DeviceFilter<android.net.wifi.ScanResult>]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=false, genBuilder=true, genEqualsHashCode=true, genHiddenGetters=true)")
+ @Deprecated
+ private void __metadata() {}
+
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index aeed20d..b5580d4 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1722,6 +1722,20 @@
= "android.settings.ENTERPRISE_PRIVACY_SETTINGS";
/**
+ * Activity Action: Show Work Policy info.
+ * DPC apps can implement an activity that handles this intent in order to show device policies
+ * associated with the work profile or managed device.
+ * <p>
+ * Input: Nothing.
+ * <p>
+ * Output: Nothing.
+ *
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_SHOW_WORK_POLICY_INFO =
+ "android.settings.SHOW_WORK_POLICY_INFO";
+
+ /**
* Activity Action: Show screen that let user select its Autofill Service.
* <p>
* Input: Intent's data URI set with an application name, using the
diff --git a/core/java/android/service/textclassifier/ITextClassifierService.aidl b/core/java/android/service/textclassifier/ITextClassifierService.aidl
index 2f8d67b..da57506 100644
--- a/core/java/android/service/textclassifier/ITextClassifierService.aidl
+++ b/core/java/android/service/textclassifier/ITextClassifierService.aidl
@@ -74,4 +74,6 @@
in TextClassificationSessionId sessionId,
in ConversationActions.Request request,
in ITextClassifierCallback callback);
+
+ void onConnectedStateChanged(int connected);
}
diff --git a/core/java/android/service/textclassifier/TextClassifierService.java b/core/java/android/service/textclassifier/TextClassifierService.java
index 2470d19..4d58ae4 100644
--- a/core/java/android/service/textclassifier/TextClassifierService.java
+++ b/core/java/android/service/textclassifier/TextClassifierService.java
@@ -17,6 +17,7 @@
package android.service.textclassifier;
import android.Manifest;
+import android.annotation.IntDef;
import android.annotation.MainThread;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -51,6 +52,8 @@
import com.android.internal.util.Preconditions;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -99,6 +102,18 @@
"android.service.textclassifier.TextClassifierService";
/** @hide **/
+ public static final int CONNECTED = 0;
+ /** @hide **/
+ public static final int DISCONNECTED = 1;
+ /** @hide */
+ @IntDef(value = {
+ CONNECTED,
+ DISCONNECTED
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface ConnectionState{}
+
+ /** @hide **/
private static final String KEY_RESULT = "key_result";
private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper(), null, true);
@@ -195,6 +210,12 @@
mMainThreadHandler.post(
() -> TextClassifierService.this.onDestroyTextClassificationSession(sessionId));
}
+
+ @Override
+ public void onConnectedStateChanged(@ConnectionState int connected) {
+ mMainThreadHandler.post(connected == CONNECTED ? TextClassifierService.this::onConnected
+ : TextClassifierService.this::onDisconnected);
+ }
};
@Nullable
@@ -206,6 +227,26 @@
return null;
}
+ @Override
+ public boolean onUnbind(@NonNull Intent intent) {
+ onDisconnected();
+ return super.onUnbind(intent);
+ }
+
+ /**
+ * Called when the Android system connects to service.
+ */
+ public void onConnected() {
+ }
+
+ /**
+ * Called when the Android system disconnects from the service.
+ *
+ * <p> At this point this service may no longer be an active {@link TextClassifierService}.
+ */
+ public void onDisconnected() {
+ }
+
/**
* Returns suggested text selection start and end indices, recognized entity types, and their
* associated confidence scores. The entity types are ordered from highest to lowest scoring.
diff --git a/core/java/android/webkit/WebChromeClient.java b/core/java/android/webkit/WebChromeClient.java
index 4db6308..f8522ed 100644
--- a/core/java/android/webkit/WebChromeClient.java
+++ b/core/java/android/webkit/WebChromeClient.java
@@ -71,11 +71,24 @@
}
/**
- * Notify the host application that the current page has entered full
- * screen mode. The host application must show the custom View which
- * contains the web contents — video or other HTML content —
- * in full screen mode. Also see "Full screen support" documentation on
- * {@link WebView}.
+ * Notify the host application that the current page has entered full screen mode. After this
+ * call, web content will no longer be rendered in the WebView, but will instead be rendered
+ * in {@code view}. The host application should add this View to a Window which is configured
+ * with {@link android.view.WindowManager.LayoutParams#FLAG_FULLSCREEN} flag in order to
+ * actually display this web content full screen.
+ *
+ * <p>The application may explicitly exit fullscreen mode by invoking {@code callback} (ex. when
+ * the user presses the back button). However, this is generally not necessary as the web page
+ * will often show its own UI to close out of fullscreen. Regardless of how the WebView exits
+ * fullscreen mode, WebView will invoke {@link #onHideCustomView()}, signaling for the
+ * application to remove the custom View.
+ *
+ * <p>If this method is not overridden, WebView will report to the web page it does not support
+ * fullscreen mode and will not honor the web page's request to run in fullscreen mode.
+ *
+ * <p class="note"><b>Note:</b> if overriding this method, the application must also override
+ * {@link #onHideCustomView()}.
+ *
* @param view is the View object to be shown.
* @param callback invoke this callback to request the page to exit
* full screen mode.
@@ -98,10 +111,13 @@
CustomViewCallback callback) {};
/**
- * Notify the host application that the current page has exited full
- * screen mode. The host application must hide the custom View, ie. the
- * View passed to {@link #onShowCustomView} when the content entered fullscreen.
- * Also see "Full screen support" documentation on {@link WebView}.
+ * Notify the host application that the current page has exited full screen mode. The host
+ * application must hide the custom View (the View which was previously passed to {@link
+ * #onShowCustomView(View, CustomViewCallback) onShowCustomView()}). After this call, web
+ * content will render in the original WebView again.
+ *
+ * <p class="note"><b>Note:</b> if overriding this method, the application must also override
+ * {@link #onShowCustomView(View, CustomViewCallback) onShowCustomView()}.
*/
public void onHideCustomView() {}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index c365aae..11a5062 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -4511,9 +4511,9 @@
android:protectionLevel="signature" />
<!-- @SystemApi Allows an application to turn on / off quiet mode.
- @hide <p>Not for use by third-party applications. -->
+ @hide -->
<permission android:name="android.permission.MODIFY_QUIET_MODE"
- android:protectionLevel="signature|privileged" />
+ android:protectionLevel="signature|privileged|wellbeing" />
<!-- Allows internal management of the camera framework
@hide -->
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 4ca0df4..7f72a13 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> het geen internettoegang nie"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tik vir opsies"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Selnetwerk het nie internettoegang nie"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Netwerk het nie internettoegang nie"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Daar kan nie by private DNS-bediener ingegaan word nie"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Gekoppel"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> het beperkte konnektiwiteit"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Tik om in elk geval te koppel"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Stoor"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nee, dankie"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Dateer op"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Gaan voort"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"wagwoord"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adres"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredietkaart"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debietkaart"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"betaalkaart"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kaart"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"gebruikernaam"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-posadres"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Bly kalm en soek skuiling naby."</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index eb5265e..f576d04 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ምንም የበይነ መረብ መዳረሻ የለም"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ለአማራጮች መታ ያድርጉ"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"የተንቀሳቃሽ ስልክ አውታረ መረብ የበይነመረብ መዳረሻ የለውም"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"አውታረ መረብ የበይነመረብ መዳረሻ የለውም"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"የግል ዲኤንኤስ አገልጋይ ሊደረስበት አይችልም"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"ተገናኝቷል"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> የተገደበ ግንኙነት አለው"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"ለማንኛውም ለማገናኘት መታ ያድርጉ"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"አስቀምጥ"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"አይ፣ አመሰግናለሁ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"አዘምን"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"ቀጥል"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"የይለፍ ቃል"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"አድራሻ"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ክሬዲት ካርድ"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"ዴቢት ካርድ"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"የክፍያ ካርድ"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"ካርድ"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"የተጠቃሚ ስም"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"የኢሜይል አድራሻ"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"ረጋ ይበሉና በአቅራቢያ ያለ መጠለያ ይፈልጉ።"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index c9067e5..7974a08 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -1362,6 +1362,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"لا يتوفّر في <xliff:g id="NETWORK_SSID">%1$s</xliff:g> إمكانية الاتصال بالإنترنت."</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"انقر للحصول على الخيارات."</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"شبكة الجوّال هذه غير متصلة بالإنترنت"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"الشبكة غير متصلة بالإنترنت"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"لا يمكن الوصول إلى خادم أسماء نظام نطاقات خاص"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"تمّ الاتصال."</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"إمكانية اتصال <xliff:g id="NETWORK_SSID">%1$s</xliff:g> محدودة."</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"يمكنك النقر للاتصال على أي حال."</string>
@@ -2101,9 +2104,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"حفظ"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"لا، شكرًا"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"تعديل"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"متابعة"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"كلمة مرور"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"عنوان"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"بطاقة ائتمان"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"بطاقة السحب الآلي"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"بطاقة الدفع"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"بطاقة"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"اسم المستخدم"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"عنوان البريد الإلكتروني"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"يُرجى الثبات والبحث عن ملاذ بالجوار."</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 7a89b65..018ca7e 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -1274,6 +1274,12 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>ৰ ইণ্টাৰনেটৰ এক্সেছ নাই"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"অধিক বিকল্পৰ বাবে টিপক"</string>
+ <!-- no translation found for mobile_no_internet (1445208572588803493) -->
+ <skip />
+ <!-- no translation found for other_networks_no_internet (1553338015597653827) -->
+ <skip />
+ <!-- no translation found for private_dns_broken_detailed (4293356177543535578) -->
+ <skip />
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"সংযোগ কৰা হ’ল"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>ৰ সকলো সেৱাৰ এক্সেছ নাই"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"যিকোনো প্ৰকাৰে সংযোগ কৰিবলৈ টিপক"</string>
@@ -1961,9 +1967,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"ছেভ কৰক"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"নালাগে, ধন্যবাদ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"আপডে’ট কৰক"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"অব্যাহত ৰাখক"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"পাছৱৰ্ড"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ঠিকনা"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ক্ৰেডিট কাৰ্ড"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"ডেবিট কাৰ্ড"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"পৰিশোধৰ বাবে ব্যৱহাৰ কৰা কার্ড"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"কাৰ্ড"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"ব্যৱহাৰকাৰীৰ নাম"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ইমেইল ঠিকনা"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"শান্ত হৈ থাকক আৰু ওচৰৰ ক\'ৰবাত আশ্ৰয় বিচাৰক।"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index 21dbf03..5b135cf 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> üçün internet girişi əlçatan deyil"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Seçimlər üçün tıklayın"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobil şəbəkənin internetə girişi yoxdur"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Şəbəkənin internetə girişi yoxdur"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Özəl DNS serverinə giriş mümkün deyil"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Qoşuldu"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> bağlantını məhdudlaşdırdı"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"İstənilən halda klikləyin"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Yadda saxlayın"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Xeyr, çox sağ olun"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Yeniləyin"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Davam edin"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"parol"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ünvan"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredit kartı"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debet kart"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"ödəniş kartı"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kart"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"istifadəçi adı"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-poçt ünvanı"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Sakit qalın və yaxınlıqda sığınacaq axtarın."</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index dbb788d..02b098f 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -1296,6 +1296,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nema pristup internetu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Dodirnite za opcije"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobilna mreža nema pristup internetu"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Mreža nema pristup internetu"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Pristup privatnom DNS serveru nije uspeo"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Povezano je"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ima ograničenu vezu"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Dodirnite da biste se ipak povezali"</string>
@@ -1996,9 +1999,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Sačuvaj"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ne, hvala"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Ažuriraj"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Nastavi"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"lozinka"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresa"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditna kartica"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debitna kartica"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"platna kartica"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kartica"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"korisničko ime"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"imejl adresa"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Ostanite mirni i potražite sklonište u okolini."</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index bae2640..4060ed7 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -1318,6 +1318,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> не мае доступу ў інтэрнэт"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Дакраніцеся, каб убачыць параметры"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Мабільная сетка не мае доступу ў інтэрнэт"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Сетка не мае доступу ў інтэрнэт"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Не ўдалося атрымаць доступ да прыватнага DNS-сервера"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Падключана"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> мае абмежаваную магчымасць падключэння"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Націсніце, каб падключыцца"</string>
@@ -2031,9 +2034,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Захаваць"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Не, дзякуй"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Абнавіць"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Працягнуць"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"пароль"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"адрас"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"крэдытная картка"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"дэбетовая картка"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"плацежная картка"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"картка"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"карыстальнік"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"адрас электроннай пошты"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Заставайцеся спакойнымі і пашукайце прытулак паблізу."</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index e7b3090..b0cea11 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> няма достъп до интернет"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Докоснете за опции"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Мобилната мрежа няма достъп до интернет"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Мрежата няма достъп до интернет"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Не може да се осъществи достъп до частния DNS сървър"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Установена е връзка"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> има ограничена свързаност"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Докоснете, за да се свържете въпреки това"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Запазване"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Не, благодаря"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Актуализиране"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Напред"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"Паролата"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"Адресът"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"Кредитната карта"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"дебитна карта"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"карта за плащане"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"карта"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"потребителско име"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"имейл адрес"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Запазете спокойствие и потърсете убежище в района."</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index beb08b2..514a6ce 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-এর ইন্টারনেটে অ্যাক্সেস নেই"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"বিকল্পগুলির জন্য আলতো চাপুন"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"মোবাইল নেটওয়ার্কে কোনও ইন্টারনেট অ্যাক্সেস নেই"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"নেটওয়ার্কে কোনও ইন্টারনেট অ্যাক্সেস নেই"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"ব্যক্তিগত ডিএনএস সার্ভার অ্যাক্সেস করা যাবে না"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"কানেক্ট করা হয়েছে"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-এর সীমিত কানেক্টিভিটি আছে"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"তবুও কানেক্ট করতে ট্যাপ করুন"</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"সেভ করুন"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"না থাক"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"আপডেট করুন"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"চালিয়ে যান"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"পাসওয়ার্ড"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ঠিকানা"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ক্রেডিট কার্ড"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"ডেবিট কার্ড"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"পেমেন্টের কার্ড"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"কার্ড"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"ইউজারনেম"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ইমেল ঠিকানা"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"শান্ত থাকুন, আশেপাশে আশ্রয় খুঁজুন।"</string>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index 862beee..1ddc0e2 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -1298,6 +1298,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"Mreža <xliff:g id="NETWORK_SSID">%1$s</xliff:g> nema pristup internetu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Dodirnite za opcije"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobilna mreža nema pristup internetu"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Mreža nema pristup internetu"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Nije moguće pristupiti privatnom DNS serveru"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Povezano"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"Mreža <xliff:g id="NETWORK_SSID">%1$s</xliff:g> ima ograničenu povezivost"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Dodirnite da se ipak povežete"</string>
@@ -1998,9 +2001,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Sačuvaj"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ne, hvala"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Ažuriraj"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Nastavi"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"lozinka"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresa"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditna kartica"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debitna kartica"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"kartica za plaćanje"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kartica"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"korisničko ime"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"adresa e-pošte"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Ostanite smireni i potražite sklonište u blizini."</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 28b9a16..fe7f87c 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -532,21 +532,21 @@
<string name="biometric_not_recognized" msgid="5770511773560736082">"No s\'ha reconegut"</string>
<string name="biometric_error_canceled" msgid="349665227864885880">"S\'ha cancel·lat l\'autenticació"</string>
<string name="biometric_error_device_not_secured" msgid="6583143098363528349">"No s\'ha establert cap PIN, patró o contrasenya"</string>
- <string name="fingerprint_acquired_partial" msgid="735082772341716043">"S\'ha detectat una empremta dactilar parcial. Torna-ho a provar."</string>
- <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"No s\'ha pogut processar l\'empremta dactilar. Torna-ho a provar."</string>
+ <string name="fingerprint_acquired_partial" msgid="735082772341716043">"S\'ha detectat una empremta digital parcial. Torna-ho a provar."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"No s\'ha pogut processar l\'empremta digital. Torna-ho a provar."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"El sensor d\'empremtes dactilars està brut. Neteja\'l i torna-ho a provar."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"El dit s\'ha mogut massa ràpid. Torna-ho a provar."</string>
<string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"El dit s\'ha mogut massa lentament. Torna-ho a provar."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
- <string name="fingerprint_authenticated" msgid="5309333983002526448">"L\'empremta dactilar s\'ha autenticat"</string>
+ <string name="fingerprint_authenticated" msgid="5309333983002526448">"L\'empremta digital s\'ha autenticat"</string>
<string name="face_authenticated_no_confirmation_required" msgid="4018680978348659031">"Cara autenticada"</string>
<string name="face_authenticated_confirmation_required" msgid="8778347003507633610">"Cara autenticada; prem el botó per confirmar"</string>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"El maquinari per a empremtes dactilars no està disponible."</string>
- <string name="fingerprint_error_no_space" msgid="1055819001126053318">"L\'empremta dactilar no es pot desar. Suprimeix-ne una."</string>
- <string name="fingerprint_error_timeout" msgid="3927186043737732875">"S\'ha esgotat el temps d\'espera per a l\'empremta dactilar. Torna-ho a provar."</string>
- <string name="fingerprint_error_canceled" msgid="4402024612660774395">"S\'ha cancel·lat l\'operació d\'empremta dactilar."</string>
- <string name="fingerprint_error_user_canceled" msgid="7999639584615291494">"L\'usuari ha cancel·lat l\'operació d\'empremta dactilar."</string>
+ <string name="fingerprint_error_no_space" msgid="1055819001126053318">"L\'empremta digital no es pot desar. Suprimeix-ne una."</string>
+ <string name="fingerprint_error_timeout" msgid="3927186043737732875">"S\'ha esgotat el temps d\'espera per a l\'empremta digital. Torna-ho a provar."</string>
+ <string name="fingerprint_error_canceled" msgid="4402024612660774395">"S\'ha cancel·lat l\'operació d\'empremta digital."</string>
+ <string name="fingerprint_error_user_canceled" msgid="7999639584615291494">"L\'usuari ha cancel·lat l\'operació d\'empremta digital."</string>
<string name="fingerprint_error_lockout" msgid="5536934748136933450">"S\'han produït massa intents. Torna-ho a provar més tard."</string>
<string name="fingerprint_error_lockout_permanent" msgid="5033251797919508137">"S\'han fet massa intents. S\'ha desactivat el sensor d\'empremtes dactilars."</string>
<string name="fingerprint_error_unable_to_process" msgid="6107816084103552441">"Torna-ho a provar."</string>
@@ -555,7 +555,7 @@
<string name="fingerprint_name_template" msgid="5870957565512716938">"Dit <xliff:g id="FINGERID">%d</xliff:g>"</string>
<string-array name="fingerprint_error_vendor">
</string-array>
- <string name="fingerprint_icon_content_description" msgid="2340202869968465936">"Icona d\'empremta dactilar"</string>
+ <string name="fingerprint_icon_content_description" msgid="2340202869968465936">"Icona d\'empremta digital"</string>
<string name="permlab_manageFace" msgid="7262837876352591553">"gestiona el maquinari de desbloqueig facial"</string>
<string name="permdesc_manageFace" msgid="8919637120670185330">"Permet que l\'aplicació afegeixi i suprimeixi plantilles de cares que es puguin fer servir."</string>
<string name="permlab_useFaceAuthentication" msgid="2565716575739037572">"utilitza el maquinari de desbloqueig facial"</string>
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> no té accés a Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toca per veure les opcions"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"La xarxa mòbil no té accés a Internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"La xarxa no té accés a Internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"No es pot accedir al servidor DNS privat"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Connectat"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> té una connectivitat limitada"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Toca per connectar igualment"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Desa"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, gràcies"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Actualitza"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continua"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"contrasenya"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adreça"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"targeta de crèdit"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"targeta de dèbit"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"targeta de pagament"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"targeta"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nom d\'usuari"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"adreça electrònica"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Mantén la calma i busca refugi a prop."</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 8ba6f34..b684193 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1318,6 +1318,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"Síť <xliff:g id="NETWORK_SSID">%1$s</xliff:g> nemá přístup k internetu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Klepnutím zobrazíte možnosti"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobilní síť nemá přístup k internetu"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Síť nemá přístup k internetu"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Nelze získat přístup k soukromému serveru DNS"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Připojeno"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"Síť <xliff:g id="NETWORK_SSID">%1$s</xliff:g> umožňuje jen omezené připojení"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Klepnutím se i přesto připojíte"</string>
@@ -2031,9 +2034,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Uložit"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ne, děkuji"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Aktualizovat"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Pokračovat"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"heslo"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresa"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"platební karta"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debetní karta"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"platební karta"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"karta"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"uživatelské jméno"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-mailová adresa"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Zachovejte klid a přesuňte se na bezpečné místo v okolí."</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 0d40688..22f1e5d 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har ingen internetforbindelse"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tryk for at se valgmuligheder"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobilnetværket har ingen internetadgang"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Netværket har ingen internetadgang"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Der er ikke adgang til den private DNS-server"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Der er oprettet forbindelse"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har begrænset forbindelse"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Tryk for at oprette forbindelse alligevel"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Gem"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nej tak"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Opdater"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Fortsæt"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"adgangskode"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresse"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditkort"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"betalingskort"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"betalingskort"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kort"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"brugernavn"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"mailadresse"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Bevar roen, og søg ly i nærheden."</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index f051345..b74cd7e 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> hat keinen Internetzugriff"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Für Optionen tippen"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobiles Netzwerk hat keinen Internetzugriff"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Netzwerk hat keinen Internetzugriff"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Auf den privaten DNS-Server kann nicht zugegriffen werden"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Verbunden"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"Schlechte Verbindung mit <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Tippen, um die Verbindung trotzdem herzustellen"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Speichern"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nein danke"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Aktualisieren"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Fortsetzen"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"Passwort"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"Adresse"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"Kreditkarte"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"Debitkarte"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"Zahlungskarte"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"Karte"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"Nutzername"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"E-Mail-Adresse"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Bleibe ruhig und suche in der Nähe Schutz."</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index a360de0..4fb03d6 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"Η εφαρμογή <xliff:g id="NETWORK_SSID">%1$s</xliff:g> δεν έχει πρόσβαση στο διαδίκτυο"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Πατήστε για να δείτε τις επιλογές"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Το δίκτυο κινητής τηλεφωνίας δεν έχει πρόσβαση στο διαδίκτυο."</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Το δίκτυο δεν έχει πρόσβαση στο διαδίκτυο."</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Δεν είναι δυνατή η πρόσβαση στον ιδιωτικό διακομιστή DNS."</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Συνδέθηκε"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"Το δίκτυο <xliff:g id="NETWORK_SSID">%1$s</xliff:g> έχει περιορισμένη συνδεσιμότητα"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Πατήστε για σύνδεση ούτως ή άλλως"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Αποθήκευση"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Όχι, ευχαριστώ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Ενημέρωση"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Συνέχεια"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"κωδικός πρόσβασης"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"διεύθυνση"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"πιστωτική κάρτα"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"χρεωστική κάρτα"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"κάρτα πληρωμής"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"κάρτα"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"όνομα χρήστη"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"διεύθυνση email"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Μείνετε ψύχραιμοι και αναζητήστε κάποιο κοντινό καταφύγιο."</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 1e0e93a..88fb0fd 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no Internet access"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tap for options"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobile network has no Internet access"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Network has no Internet access"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Private DNS server cannot be accessed"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Connected"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Tap to connect anyway"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Save"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, thanks"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Update"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continue"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debit card"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"payment card"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"card"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"username"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"email address"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Stay calm and seek shelter nearby."</string>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 4deaf2e..8a1c2c4 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no Internet access"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tap for options"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobile network has no Internet access"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Network has no Internet access"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Private DNS server cannot be accessed"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Connected"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Tap to connect anyway"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Save"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, thanks"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Update"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continue"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debit card"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"payment card"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"card"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"username"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"email address"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Stay calm and seek shelter nearby."</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 1e0e93a..88fb0fd 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no Internet access"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tap for options"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobile network has no Internet access"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Network has no Internet access"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Private DNS server cannot be accessed"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Connected"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Tap to connect anyway"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Save"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, thanks"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Update"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continue"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debit card"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"payment card"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"card"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"username"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"email address"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Stay calm and seek shelter nearby."</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 1e0e93a..88fb0fd 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no Internet access"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tap for options"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobile network has no Internet access"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Network has no Internet access"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Private DNS server cannot be accessed"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Connected"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Tap to connect anyway"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Save"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, thanks"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Update"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continue"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debit card"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"payment card"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"card"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"username"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"email address"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Stay calm and seek shelter nearby."</string>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index 5fe1bb1..fbb1cc7 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no internet access"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tap for options"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobile network has no internet access"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Network has no internet access"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Private DNS server cannot be accessed"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Connected"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Tap to connect anyway"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Save"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No thanks"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Update"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continue"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debit card"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"payment card"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"card"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"username"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"email address"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Stay calm and seek shelter nearby."</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index feb4aee..7fe219e 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>no tiene acceso a Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Presiona para ver opciones"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"La red móvil no tiene acceso a Internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"La red no tiene acceso a Internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"No se puede acceder al servidor DNS privado"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Se estableció conexión"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tiene conectividad limitada"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Presiona para conectarte de todas formas"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Guardar"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, gracias"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Actualizar"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continuar"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"contraseña"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"dirección"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"tarjeta de crédito"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"tarjeta de débito"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"tarjeta de pago"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"tarjeta"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nombre de usuario"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"dirección de correo electrónico"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Mantén la calma y busca un refugio cercano."</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 75510b3..35e2c38 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> no tiene acceso a Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toca para ver opciones"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"La red móvil no tiene acceso a Internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"La red no tiene acceso a Internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"No se ha podido acceder al servidor DNS privado"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Conectado"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tiene una conectividad limitada"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Toca para conectarte de todas formas"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Guardar"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, gracias"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Actualizar"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continuar"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"contraseña"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"dirección"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"tarjeta de crédito"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"tarjeta de débito"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"tarjeta de pago"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"tarjeta"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nombre de usuario"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"dirección de correo electrónico"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Mantén la calma y busca refugio en algún lugar cercano."</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 0e7befd..a8f546d 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"Võrgul <xliff:g id="NETWORK_SSID">%1$s</xliff:g> puudub Interneti-ühendus"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Puudutage valikute nägemiseks"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobiilsidevõrgul puudub Interneti-ühendus"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Võrgul puudub Interneti-ühendus"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Privaatsele DNS-serverile ei pääse juurde"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Ühendatud"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"Võrgu <xliff:g id="NETWORK_SSID">%1$s</xliff:g> ühendus on piiratud"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Puudutage, kui soovite siiski ühenduse luua"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Salvesta"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Tänan, ei"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Värskenda"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Jätka"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"parool"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"aadress"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"krediitkaart"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"deebetkaart"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"maksekaart"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kaart"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"kasutajanimi"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-posti aadress"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Jääge rahulikuks ja otsige lähedusest peavarju."</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 22391dc..d87bdfb 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -861,7 +861,7 @@
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Eredua ahaztu zaizu?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Kontua desblokeatzea"</string>
<string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Eredua marrazteko saiakera gehiegi egin dira"</string>
- <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Desblokeatzeko, hasi saioa Google kontuarekin."</string>
+ <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Desblokeatzeko, hasi saioa Google-ko kontuarekin."</string>
<string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Erabiltzaile-izena (helbide elektronikoa)"</string>
<string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Pasahitza"</string>
<string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Hasi saioa"</string>
@@ -1133,7 +1133,7 @@
<string name="whichApplication" msgid="4533185947064773386">"Gauzatu ekintza hau erabilita:"</string>
<string name="whichApplicationNamed" msgid="8260158865936942783">"Osatu ekintza %1$s erabiliz"</string>
<string name="whichApplicationLabel" msgid="7425855495383818784">"Osatu ekintza"</string>
- <string name="whichViewApplication" msgid="3272778576700572102">"Ireki honekin:"</string>
+ <string name="whichViewApplication" msgid="3272778576700572102">"Ireki honekin"</string>
<string name="whichViewApplicationNamed" msgid="2286418824011249620">"Irekin %1$s aplikazioarekin"</string>
<string name="whichViewApplicationLabel" msgid="2666774233008808473">"Ireki"</string>
<string name="whichOpenHostLinksWith" msgid="3788174881117226583">"Ireki <xliff:g id="HOST">%1$s</xliff:g> ostalariko estekak honekin:"</string>
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"Ezin da konektatu Internetera <xliff:g id="NETWORK_SSID">%1$s</xliff:g> sarearen bidez"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Sakatu aukerak ikusteko"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Sare mugikorra ezin da konektatu Internetera"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Sarea ezin da konektatu Internetera"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Ezin da atzitu DNS zerbitzari pribatua"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Konektatuta"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> sareak konektagarritasun murriztua du"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Sakatu hala ere konektatzeko"</string>
@@ -1645,7 +1648,7 @@
<string name="kg_invalid_puk" msgid="3638289409676051243">"Idatzi berriro PUK kode zuzena. Hainbat saiakera oker eginez gero, betiko desgaituko da SIMa."</string>
<string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodeak ez datoz bat"</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Eredua marrazteko saiakera gehiegi egin dira"</string>
- <string name="kg_login_instructions" msgid="1100551261265506448">"Desblokeatzeko, hasi saioa Google kontuarekin."</string>
+ <string name="kg_login_instructions" msgid="1100551261265506448">"Desblokeatzeko, hasi saioa Google-ko kontuarekin."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Erabiltzaile-izena (helbide elektronikoa)"</string>
<string name="kg_login_password_hint" msgid="9057289103827298549">"Pasahitza"</string>
<string name="kg_login_submit_button" msgid="5355904582674054702">"Hasi saioa"</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Gorde"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ez, eskerrik asko"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Eguneratu"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Egin aurrera"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"pasahitza"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"helbidea"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditu-txartela"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"zordunketa-txartela"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"ordainketa-txartela"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"txartela"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"erabiltzaile-izena"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"helbide elektronikoa"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Ez larritu eta bilatu babesleku bat inguruan."</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 33421c0..16382638 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> به اینترنت دسترسی ندارد"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"برای گزینهها ضربه بزنید"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"شبکه تلفن همراه به اینترنت دسترسی ندارد"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"شبکه به اینترنت دسترسی ندارد"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"سرور DNS خصوصی قابل دسترسی نیست"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"متصل"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> اتصال محدودی دارد"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"بههرصورت، برای اتصال ضربه بزنید"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"ذخیره"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"نه سپاسگزارم"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"بهروزرسانی"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"ادامه"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"گذرواژه"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"نشانی"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"کارت اعتباری"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"کارت نقدی"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"کارت پرداخت"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"کارت"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"نام کاربری"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"نشانی ایمیل"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"آرام باشید و پناهگاهی در این اطراف پیدا کنید."</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 124a160..5b050c3 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ei ole yhteydessä internetiin"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Näytä vaihtoehdot napauttamalla."</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobiiliverkko ei ole yhteydessä internetiin"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Verkko ei ole yhteydessä internetiin"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Ei pääsyä yksityiselle DNS-palvelimelle"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Yhdistetty"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> toimii rajoitetulla yhteydellä"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Yhdistä napauttamalla"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Tallenna"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ei kiitos"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Muuta"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Jatka"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"salasana"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"osoite"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"luottokortti"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debit-kortti"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"maksukortti"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kortti"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"käyttäjänimi"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"sähköpostiosoite"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Pysy rauhallisena ja hakeudu lähimpään suojapaikkaan."</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index ecfdcd2..32530d3 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"Le réseau <xliff:g id="NETWORK_SSID">%1$s</xliff:g> n\'offre aucun accès à Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Touchez pour afficher les options"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Le réseau cellulaire n\'offre aucun accès à Internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Le réseau n\'offre aucun accès à Internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Impossible d\'accéder au serveur DNS privé"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Connecté"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"Le réseau <xliff:g id="NETWORK_SSID">%1$s</xliff:g> offre une connectivité limitée"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Touchez pour vous connecter quand même"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Enregistrer"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Non, merci"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Mettre à jour"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continuer"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"mot de passe"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresse"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"carte de crédit"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"carte de débit"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"carte de paiement"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"carte"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nom d\'utilisateur"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"adresse de courriel"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Restez calme et cherchez un abri à proximité."</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 1a44b79..b5b0a56 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"Aucune connexion à Internet pour <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Appuyez ici pour afficher des options."</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Le réseau mobile ne dispose d\'aucun accès à Internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Le réseau ne dispose d\'aucun accès à Internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Impossible d\'accéder au serveur DNS privé"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Connecté"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"La connectivité de <xliff:g id="NETWORK_SSID">%1$s</xliff:g> est limitée"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Appuyer pour se connecter quand même"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Enregistrer"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Non, merci"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Mettre à jour"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continuer"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"mot de passe"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresse"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"carte de paiement"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"carte de débit"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"carte de paiement"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"carte"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nom d\'utilisateur"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"adresse e-mail"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Restez calme et cherchez un abri à proximité."</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index 933fbab..bf3b3bd 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> non ten acceso a Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toca para ver opcións."</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"A rede de telefonía móbil non ten acceso a Internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"A rede non ten acceso a Internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Non se puido acceder ao servidor DNS privado"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Estableceuse conexión"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"A conectividade de <xliff:g id="NETWORK_SSID">%1$s</xliff:g> é limitada"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Toca para conectarte de todas formas"</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Gardar"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Non, grazas"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Actualizar"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continuar"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"contrasinal"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"enderezo"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"tarxeta de crédito"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"tarxeta de débito"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"tarxeta de pago"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"tarxeta"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nome de usuario"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"enderezo de correo electrónico"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Mantén a calma e busca refuxio cerca."</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index 05e5a4e..66bba23 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ઇન્ટરનેટ ઍક્સેસ ધરાવતું નથી"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"વિકલ્પો માટે ટૅપ કરો"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"મોબાઇલ નેટવર્ક કોઈ ઇન્ટરનેટ ઍક્સેસ ધરાવતું નથી"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"નેટવર્ક કોઈ ઇન્ટરનેટ ઍક્સેસ ધરાવતું નથી"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"ખાનગી DNS સર્વર ઍક્સેસ કરી શકાતા નથી"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"કનેક્ટેડ"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> મર્યાદિત કનેક્ટિવિટી ધરાવે છે"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"છતાં કનેક્ટ કરવા માટે ટૅપ કરો"</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"સાચવો"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ના, આભાર"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"અપડેટ કરો"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"ચાલુ રાખો"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"પાસવર્ડ"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"સરનામું"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ક્રેડિટ કાર્ડ"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"ડેબિટ કાર્ડ"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"ચુકવણી કાર્ડ"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"કાર્ડ"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"વપરાશકર્તાનામ"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ઇમેઇલ સરનામું"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"શાંત રહો અને નજીકમાં આશ્રય લો."</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index f16ad65..717c7ae 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> का इंटरनेट नहीं चल रहा है"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"विकल्पों के लिए टैप करें"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"मोबाइल नेटवर्क पर इंटरनेट ऐक्सेस नहीं है"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"इस नेटवर्क पर इंटरनेट ऐक्सेस नहीं है"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"निजी डीएनएस सर्वर को ऐक्सेस नहीं किया जा सकता"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"जुड़ गया है"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> की कनेक्टिविटी सीमित है"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"फिर भी कनेक्ट करने के लिए टैप करें"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"सेव करें"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"नहीं, धन्यवाद"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"अपडेट करें"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"जारी रखें"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"पासवर्ड"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"पता"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"क्रेडिट कार्ड"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"डेबिट कार्ड"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"भुगतान कार्ड"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"कार्ड"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"उपयोगकर्ता का नाम"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ईमेल पता"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"शांत रहें और आस-पास शरण लेने की जगह तलाशें."</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 45c39f2..00da024 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1296,6 +1296,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nema pristup internetu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Dodirnite za opcije"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobilna mreža nema pristup internetu"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Mreža nema pristup internetu"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Nije moguće pristupiti privatnom DNS poslužitelju"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Povezano"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ima ograničenu povezivost"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Dodirnite da biste se ipak povezali"</string>
@@ -1996,9 +1999,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Spremi"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ne, hvala"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Ažuriraj"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Nastavi"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"zaporku"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresu"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditnu karticu"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debitna kartica"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"kartica za plaćanje"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kartica"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"korisničko ime"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-adresa"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Ostanite mirni i potražite sklonište u blizini."</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index aac2d76..2958ca6 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"A(z) <xliff:g id="NETWORK_SSID">%1$s</xliff:g> hálózaton nincs internet-hozzáférés"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Koppintson a beállítások megjelenítéséhez"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"A mobilhálózaton nincs internet-hozzáférés"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"A hálózaton nincs internet-hozzáférés"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"A privát DNS-kiszolgálóhoz nem lehet hozzáférni"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Csatlakozva"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"A(z) <xliff:g id="NETWORK_SSID">%1$s</xliff:g> hálózat korlátozott kapcsolatot biztosít"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Koppintson, ha mindenképpen csatlakozni szeretne"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Mentés"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nem, köszönöm"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Frissítés"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Tovább"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"jelszó"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"cím"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"hitelkártya"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"bankkártya"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"fizetőkártya"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kártya"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"felhasználónév"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-mail-cím"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Őrizze meg nyugalmát, és keressen menedéket a közelben."</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index a5b4e30..73db059 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ցանցը չունի մուտք ինտերնետին"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Հպեք՝ ընտրանքները տեսնելու համար"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Բջջային ցանցում ինտերնետ կապ չկա"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Ցանցում ինտերնետ կապ չկա"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Մասնավոր DNS սերվերն անհասանելի է"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Միացված է"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ցանցի կապը սահմանափակ է"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Հպեք՝ միանալու համար"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Պահել"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ոչ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Թարմացնել"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Շարունակել"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"գաղտնաբառ"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"հասցե"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"վարկային քարտ"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"դեբետային քարտ"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"վճարային քարտ"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"քարտ"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"օգտանուն"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"էլ․ հասցե"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Պահպանեք հանգստությունը և մոտակայքում ապաստարան փնտրեք:"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 228da88..662a654 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tidak memiliki akses internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Ketuk untuk melihat opsi"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Jaringan seluler tidak memiliki akses internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Jaringan tidak memiliki akses internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Server DNS pribadi tidak dapat diakses"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Tersambung"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> memiliki konektivitas terbatas"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Ketuk untuk tetap menyambungkan"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Simpan"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Lain kali"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Update"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Lanjutkan"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"sandi"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"alamat"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kartu kredit"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"kartu debit"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"kartu pembayaran"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kartu"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nama pengguna"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"alamat email"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Tetap tenang dan cari tempat berlindung terdekat."</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index d0f8028..9ae165d 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> er ekki með internetaðgang"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Ýttu til að sjá valkosti"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Farsímakerfið er ekki tengt við internetið"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Netkerfið er ekki tengt við internetið"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Ekki næst í DNS-einkaþjón"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Tengt"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"Tengigeta <xliff:g id="NETWORK_SSID">%1$s</xliff:g> er takmörkuð"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Ýttu til að tengjast samt"</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Vista"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nei, takk"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Uppfæra"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Áfram"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"aðgangsorð"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"heimilisfang"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditkort"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debetkort"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"greiðslukort"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kort"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"notandanafn"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"netfang"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Sýndu stillingu og leitaðu skjóls."</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 747d918..77eafcc 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -283,7 +283,7 @@
<string name="permgrouprequest_contacts" msgid="6032805601881764300">"Consentire all\'app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere ai tuoi contatti?"</string>
<string name="permgrouplab_location" msgid="7275582855722310164">"Geolocalizz."</string>
<string name="permgroupdesc_location" msgid="1346617465127855033">"accedere alla posizione di questo dispositivo"</string>
- <string name="permgrouprequest_location" msgid="3788275734953323491">"Consentire all\'app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere alla posizione del dispositivo?"</string>
+ <string name="permgrouprequest_location" msgid="3788275734953323491">"Consentire a <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere alla posizione del dispositivo?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"L\'app avrà accesso alla posizione soltanto quando la usi"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Consentire a <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere <b>sempre</b> alla posizione di questo dispositivo?"</string>
<string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"L\'app al momento può accedere alla posizione soltanto mentre la usi"</string>
@@ -301,7 +301,7 @@
<string name="permgrouprequest_microphone" msgid="9167492350681916038">"Consentire all\'app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di registrare audio?"</string>
<string name="permgrouplab_activityRecognition" msgid="1565108047054378642">"Attività fisica"</string>
<string name="permgroupdesc_activityRecognition" msgid="6949472038320473478">"Consente di accedere all\'attività fisica"</string>
- <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"Vuoi consentire a <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere alla tua attività fisica?"</string>
+ <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"Consentire a <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere alla tua attività fisica?"</string>
<string name="permgrouplab_camera" msgid="4820372495894586615">"Fotocamera"</string>
<string name="permgroupdesc_camera" msgid="3250611594678347720">"scattare foto e registrare video"</string>
<string name="permgrouprequest_camera" msgid="1299833592069671756">"Consentire all\'app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di scattare foto e registrare video?"</string>
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> non ha accesso a Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tocca per le opzioni"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"La rete mobile non ha accesso a Internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"La rete non ha accesso a Internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Non è possibile accedere al server DNS privato"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Connesso"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ha una connettività limitata"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Tocca per connettere comunque"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Salva"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"No, grazie"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Aggiorna"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continua"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"indirizzo"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"carta di credito"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"carta di debito"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"carta di pagamento"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"carta"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nome utente"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"indirizzo email"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Mantieni la calma e cerca riparo nelle vicinanze."</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 4c12e43..462ee36 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1318,6 +1318,12 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"ל-<xliff:g id="NETWORK_SSID">%1$s</xliff:g> אין גישה לאינטרנט"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"הקש לקבלת אפשרויות"</string>
+ <!-- no translation found for mobile_no_internet (1445208572588803493) -->
+ <skip />
+ <!-- no translation found for other_networks_no_internet (1553338015597653827) -->
+ <skip />
+ <!-- no translation found for private_dns_broken_detailed (4293356177543535578) -->
+ <skip />
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"הרשת מחוברת"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"הקישוריות של <xliff:g id="NETWORK_SSID">%1$s</xliff:g> מוגבלת"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"כדי להתחבר למרות זאת יש להקיש"</string>
@@ -2031,9 +2037,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"שמירה"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"לא, תודה"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"עדכון"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"המשך"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"סיסמה"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"כתובת"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"כרטיס אשראי"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"כרטיס חיוב"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"כרטיס תשלום"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"כרטיס"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"שם משתמש"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"כתובת אימייל"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"הישאר רגוע וחפש מחסה בקרבת מקום."</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 98600b8..2a2b71b 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -301,7 +301,7 @@
<string name="permgrouprequest_microphone" msgid="9167492350681916038">"音声の録音を「<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>」に許可しますか?"</string>
<string name="permgrouplab_activityRecognition" msgid="1565108047054378642">"身体活動"</string>
<string name="permgroupdesc_activityRecognition" msgid="6949472038320473478">"身体活動にアクセス"</string>
- <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"身体活動へのアクセスを「<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>」に許可しますか?"</string>
+ <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"身体活動データへのアクセスを「<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>」に許可しますか?"</string>
<string name="permgrouplab_camera" msgid="4820372495894586615">"カメラ"</string>
<string name="permgroupdesc_camera" msgid="3250611594678347720">"写真と動画の撮影"</string>
<string name="permgrouprequest_camera" msgid="1299833592069671756">"写真と動画の撮影を「<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>」に許可しますか?"</string>
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> はインターネットにアクセスできません"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"タップしてその他のオプションを表示"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"モバイル ネットワークがインターネットに接続されていません"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"ネットワークがインターネットに接続されていません"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"プライベート DNS サーバーにアクセスできません"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"接続しました"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> の接続が制限されています"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"接続するにはタップしてください"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"はい"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"いいえ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"更新"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"続行"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"パスワード"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"住所"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"クレジット カード"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"デビットカード"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"支払いカード"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"カード"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"ユーザー名"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"メールアドレス"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"強い揺れに備えてください"</string>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index cc8ecc2..ebc7f2a 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-ს არ აქვს ინტერნეტზე წვდომა"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"შეეხეთ ვარიანტების სანახავად"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"მობილურ ქსელს არ აქვს ინტერნეტზე წვდომა"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"ქსელს არ აქვს ინტერნეტზე წვდომა"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"პირად DNS სერვერზე წვდომა შეუძლებელია"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"დაკავშირებულია"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-ის კავშირები შეზღუდულია"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"შეეხეთ, თუ მაინც გსურთ დაკავშირება"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"შენახვა"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"არა, გმადლობთ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"განახლება"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"გაგრძელება"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"პაროლი"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"მისამართი"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"საკრედიტო ბარათი"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"სადებეტო ბარათი"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"გადახდის ბარათი"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"ბარათი"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"მომხმარებლის სახელი"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ელფოსტის მისამართი"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"შეინარჩუნეთ სიმშვიდე და იპოვეთ ახლომდებარე თავშესაფარი."</string>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index db9fad2..281db7a 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> желісінің интернетті пайдалану мүмкіндігі шектеулі."</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Опциялар үшін түртіңіз"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Мобильдік желі интернетке қосылмаған."</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Желі интернетке қосылмаған."</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Жеке DNS серверіне кіру мүмкін емес."</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Жалғанды"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> желісінің қосылу мүмкіндігі шектеулі."</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Бәрібір жалғау үшін түртіңіз."</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Сақтау"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Жоқ, рақмет"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Жаңарту"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Жалғастыру"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"құпия сөз"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"мекенжай"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"несие картасы"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"дебеттік карта"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"төлем картасы"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"карта"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"пайдаланушы аты"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"электрондық пошта мекенжайы"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Сабыр сақтап, жақын жерден баспана іздеңіз."</string>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 021da3e..532e3c7 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -1276,6 +1276,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> មិនមានការតភ្ជាប់អ៊ីនធឺណិតទេ"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ប៉ះសម្រាប់ជម្រើស"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"បណ្ដាញទូរសព្ទចល័តមិនមានការតភ្ជាប់អ៊ីនធឺណិតទេ"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"បណ្ដាញមិនមានការតភ្ជាប់អ៊ីនធឺណិតទេ"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"មិនអាចចូលប្រើម៉ាស៊ីនមេ DNS ឯកជនបានទេ"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"បានភ្ជាប់"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> មានការតភ្ជាប់មានកម្រិត"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"មិនអីទេ ចុចភ្ជាប់ចុះ"</string>
@@ -1963,9 +1966,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"រក្សាទុក"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ទេ អរគុណ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"ធ្វើបច្ចុប្បន្នភាព"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"បន្ត"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"ពាក្យសម្ងាត់"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"អាសយដ្ឋាន"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"បណ្ណឥណទាន"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"បណ្ណឥណពន្ធ"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"កាតទូទាត់ប្រាក់"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"កាត"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"ឈ្មោះអ្នកប្រើប្រាស់"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"អាសយដ្ឋានអ៊ីមែល"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"សូមរក្សាភាពស្ងប់ស្ងាត់ ហើយស្វែងរកជម្រកសុវត្ថិភាពដែលនៅជិត។"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index edcb6d1..d1317e9 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -1274,6 +1274,12 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ಯಾವುದೇ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿಲ್ಲ"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ಆಯ್ಕೆಗಳಿಗೆ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <!-- no translation found for mobile_no_internet (1445208572588803493) -->
+ <skip />
+ <!-- no translation found for other_networks_no_internet (1553338015597653827) -->
+ <skip />
+ <!-- no translation found for private_dns_broken_detailed (4293356177543535578) -->
+ <skip />
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ಸೀಮಿತ ಸಂಪರ್ಕ ಕಲ್ಪಿಸುವಿಕೆಯನ್ನು ಹೊಂದಿದೆ"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"ಹೇಗಾದರೂ ಸಂಪರ್ಕಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
@@ -1962,9 +1968,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"ಉಳಿಸಿ"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ಬೇಡ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"ಅಪ್ಡೇಟ್"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"ಮುಂದುವರಿಯಿರಿ"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"ಪಾಸ್ವರ್ಡ್"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ವಿಳಾಸ"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"ಡೆಬಿಟ್ ಕಾರ್ಡ್"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"ಪಾವತಿ ಕಾರ್ಡ್"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"ಕಾರ್ಡ್"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"ಬಳಕೆದಾರರ ಹೆಸರು"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ಇಮೇಲ್ ವಿಳಾಸ"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"ಶಾಂತರಾಗಿರಿ ಮತ್ತು ಸಮೀಪದಲ್ಲೆಲ್ಲಾದರೂ ಆಶ್ರಯ ಪಡೆದುಕೊಳ್ಳಿ."</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 2f06bee..acc6e95 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>이(가) 인터넷에 액세스할 수 없습니다."</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"탭하여 옵션 보기"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"모바일 네트워크에 인터넷이 연결되어 있지 않습니다."</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"네트워크에 인터넷이 연결되어 있지 않습니다."</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"비공개 DNS 서버에 액세스할 수 없습니다."</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"연결되었습니다."</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>에서 연결을 제한했습니다."</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"계속 연결하려면 탭하세요."</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"저장"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"사용 안함"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"업데이트"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"계속"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"비밀번호"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"주소"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"신용카드"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"체크카드"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"결제 카드"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"카드"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"사용자 이름"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"이메일 주소"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"침착하게 가까운 대피소를 찾으세요."</string>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index 2353ed0..dcb766d 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> Интернетке туташуусу жок"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Параметрлерди ачуу үчүн таптап коюңуз"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Мобилдик Интернет жок"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Тармактын Интернет байланышы жок"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Жеке DNS сервери жеткиликсиз"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Туташты"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> байланышы чектелген"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Баары бир туташуу үчүн таптаңыз"</string>
@@ -1668,7 +1671,7 @@
<string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
<string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Алып салуу"</string>
<string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"Сунушталган деңгээлден да катуулатып уккуңуз келеби?\n\nМузыканы узакка чейин катуу уксаңыз, угууңуз начарлап кетиши мүмкүн."</string>
- <string name="accessibility_shortcut_warning_dialog_title" msgid="8404780875025725199">"Атайын мүмкүнчүлүктөр функциясынын кыска жолу колдонулсунбу?"</string>
+ <string name="accessibility_shortcut_warning_dialog_title" msgid="8404780875025725199">"Ыкчам иштетесизби?"</string>
<string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"Атайын мүмкүнчүлүктөр функциясын пайдалануу үчүн, ал күйгүзүлгөндө, үндү катуулатып/акырындаткан эки баскычты тең үч секунддай кое бербей басып туруңуз.\n\n Учурдагы атайын мүмкүнчүлүктөрдүн жөндөөлөрү:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\nЖөндөөлөр > Атайын мүмкүнчүлүктөр бөлүмүнөн өзгөртө аласыз."</string>
<string name="disable_accessibility_shortcut" msgid="627625354248453445">"Кыска жолду өчүрүү"</string>
<string name="leave_accessibility_shortcut_on" msgid="7653111894438512680">"Кыска жолду колдонуу"</string>
@@ -1963,9 +1966,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Сактоо"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Жок, рахмат"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Жаңыртуу"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Улантуу"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"сырсөз"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"дарек"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"насыя картасы"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"дебет картасы"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"төлөм картасы"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"карта"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"колдонуучунун аты"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"электрондук почта дареги"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Эс алып, жакын жерден калканч издеңиз."</string>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index a83fae1..6ef4cca 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດ"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ແຕະເພື່ອເບິ່ງຕົວເລືອກ"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"ເຄືອຂ່າຍມືຖືບໍ່ສາມາດເຂົ້າເຖິງອິນເຕີເນັດໄດ້"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"ເຄືອຂ່າຍບໍ່ສາມາດເຂົ້າເຖິງອິນເຕີເນັດໄດ້"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"ບໍ່ສາມາດເຂົ້າເຖິງເຊີບເວີ DNS ສ່ວນຕົວໄດ້"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"ເຊື່ອມຕໍ່ແລ້ວ"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ມີການເຊື່ອມຕໍ່ທີ່ຈຳກັດ"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"ແຕະເພື່ອຢືນຢັນການເຊື່ອມຕໍ່"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"ບັນທຶກ"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ບໍ່, ຂອບໃຈ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"ອັບເດດ"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"ສືບຕໍ່"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"ລະຫັດຜ່ານ"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ທີ່ຢູ່"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ບັດເຄຣດິດ"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"ບັດເດບິດ"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"ບັດຈ່າຍເງິນ"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"ບັດ"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"ຊື່ຜູ້ໃຊ້"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ທີ່ຢູ່ອີເມລ"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"ໃຈເຢັນໆ ແລະ ຊອກຫາບ່ອນພັກຢູ່ໃກ້ໆ."</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index fdd5d2a..f2c17c3 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1318,6 +1318,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"„<xliff:g id="NETWORK_SSID">%1$s</xliff:g>“ negali pasiekti interneto"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Palieskite, kad būtų rodomos parinktys."</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobiliojo ryšio tinkle nėra prieigos prie interneto"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Tinkle nėra prieigos prie interneto"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Privataus DNS serverio negalima pasiekti"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Prisijungta"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"„<xliff:g id="NETWORK_SSID">%1$s</xliff:g>“ ryšys apribotas"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Palieskite, jei vis tiek norite prisijungti"</string>
@@ -2031,9 +2034,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Išsaugoti"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ne, ačiū"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Atnaujinti"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Tęsti"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"slaptažodį"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresą"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredito kortelę"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debeto kortelė"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"mokėjimo kortelė"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kortelė"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"naudotojo vardas"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"el. pašto adresas"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Nesijaudinkite ir ieškokite prieglobsčio netoliese."</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index d1b7764..be8d5d1 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1296,6 +1296,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"Tīklā <xliff:g id="NETWORK_SSID">%1$s</xliff:g> nav piekļuves internetam"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Pieskarieties, lai skatītu iespējas."</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobilajā tīklā nav piekļuves internetam."</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Tīklā nav piekļuves internetam."</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Nevar piekļūt privātam DNS serverim."</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Izveidots savienojums"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"Tīklā <xliff:g id="NETWORK_SSID">%1$s</xliff:g> ir ierobežota savienojamība"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Lai tik un tā izveidotu savienojumu, pieskarieties"</string>
@@ -1996,9 +1999,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Saglabāt"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nē, paldies"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Atjaunināt"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Turpināt"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"paroli"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresi"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredītkartes informāciju"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debetkarte"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"maksājumu karte"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"karte"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"lietotājvārds"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-pasta adrese"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Saglabājiet mieru un meklējiet tuvumā patvērumu."</string>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index d30c8f2..ea9a6b4 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> нема интернет-пристап"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Допрете за опции"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Мобилната мрежа нема интернет-пристап"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Мрежата нема интернет-пристап"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Не може да се пристапи до приватниот DNS-сервер"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Поврзано"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> има ограничена поврзливост"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Допрете за да се поврзете и покрај тоа"</string>
@@ -1964,9 +1967,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Зачувај"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Не, фала"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Ажурирај"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Продолжи"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"лозинка"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"адреса"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"кредитна картичка"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"дебитна картичка"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"платежна картичка"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"картичка"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"корисничко име"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"адреса на е-пошта"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Бидете смирени и побарајте засолниште во близина."</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index 5a604fb..9d87652 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> എന്നതിന് ഇന്റർനെറ്റ് ആക്സസ് ഇല്ല"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ഓപ്ഷനുകൾക്ക് ടാപ്പുചെയ്യുക"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"മൊബെെൽ നെറ്റ്വർക്കിന് ഇന്റർനെറ്റ് ആക്സസ് ഇല്ല"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"നെറ്റ്വർക്കിന് ഇന്റർനെറ്റ് ആക്സസ് ഇല്ല"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"സ്വകാര്യ DNS സെർവർ ആക്സസ് ചെയ്യാനാവില്ല"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"കണക്റ്റ് ചെയ്തു"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> എന്നതിന് പരിമിതമായ കണക്റ്റിവിറ്റി ഉണ്ട്"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"ഏതുവിധേനയും കണക്റ്റ് ചെയ്യാൻ ടാപ്പ് ചെയ്യുക"</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"സംരക്ഷിക്കുക"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"വേണ്ട, നന്ദി"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"അപ്ഡേറ്റ് ചെയ്യുക"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"തുടരുക"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"പാസ്വേഡ്"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"വിലാസം"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ക്രെഡിറ്റ് കാർഡ്"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"ഡെബിറ്റ് കാർഡ്"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"പെയ്മെന്റ് കാർഡ്"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"കാർഡ്"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"ഉപയോക്തൃനാമം"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"വിലാസം നൽകുക"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"പരിഭ്രമിക്കാതിരിക്കുക, അടുത്തുള്ള അഭയകേന്ദ്രം തേടുക."</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index f4c6b60..9a4ffae 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-д интернэтийн хандалт алга"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Сонголт хийхийн тулд товшино уу"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Мобайл сүлжээнд интернэт хандалт байхгүй байна"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Сүлжээнд интернэт хандалт байхгүй байна"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Хувийн DNS серверт хандах боломжгүй байна"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Холбогдсон"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> зарим үйлчилгээнд хандах боломжгүй байна"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Ямар ч тохиолдолд холбогдохын тулд товших"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Хадгалах"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Үгүй, баярлалаа"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Шинэчлэх"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Үргэлжлүүлэх"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"нууц үг"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"хаяг"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"кредит карт"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"дебит карт"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"төлбөрийн карт"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"карт"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"хэрэглэгчийн нэр"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"имэйл хаяг"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Тайван байж, ойролцоох нуугдах газар хайна уу."</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 4fb2347..03b973b 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -345,7 +345,7 @@
<string name="permlab_receiveMms" msgid="1821317344668257098">"मजकूर मेसेज मिळवा (MMS)"</string>
<string name="permdesc_receiveMms" msgid="533019437263212260">"MMS मेसेज प्राप्त करण्यास आणि त्यावर प्रक्रिया करण्यास अॅप ला अनुमती देते. म्हणजेच अॅप आपल्या डिव्हाइसवर पाठविलेले मेसेज तुम्हाला न दर्शवता त्यांचे परीक्षण करू किंवा ते हटवू शकतो."</string>
<string name="permlab_bindCellBroadcastService" msgid="4468585041824555604">"सेल प्रसारण मेसेज फॉरवर्ड करा"</string>
- <string name="permdesc_bindCellBroadcastService" msgid="9073440260695196089">"सेल प्रसारण मेसेज मिळाल्यानंतर ते फॉरवर्ड करण्यासाठी अॅपला सेल प्रसारण मॉड्यूलमध्ये प्रतिबद्ध करण्याची अनुमती देते. काही स्थानांमध्ये तुम्हाला आणीबाणीच्या परिस्थीतींची चेतावणी देण्यासाठी सेल प्रसारण सूचना वितरित केल्या जातात. दुर्भावनापूर्ण अॅप्स आणीबाणी सेल प्रसारण मिळवतात तेव्हा ती तुमच्या डिव्हाइसच्या परफॉर्मन्समध्ये किंवा कामामध्ये कदाचित व्यत्यय आणू शकतात."</string>
+ <string name="permdesc_bindCellBroadcastService" msgid="9073440260695196089">"सेल प्रसारण मेसेज मिळाल्यानंतर ते फॉरवर्ड करण्यासाठी अॅपला सेल प्रसारण मॉड्यूलमध्ये प्रतिबद्ध करण्याची अनुमती देते. काही स्थानांमध्ये तुम्हाला आणीबाणीच्या परिस्थीतींची चेतावणी देण्यासाठी सेल प्रसारण सूचना वितरित केल्या जातात. दुर्भावनापूर्ण अॅप्स आणीबाणी सेल प्रसारण मिळवतात तेव्हा ती तुमच्या डिव्हाइसच्या परफॉर्मन्समध्ये किंवा कामामध्ये कदाचित व्यत्यय आणू शकतात."</string>
<string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"सेल प्रसारण मेसेज वाचा"</string>
<string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"आपल्या डिव्हाइसद्वारे प्राप्त केलेले सेल प्रसारण मेसेज वाचण्यासाठी अॅप ला अनुमती देते. काही स्थानांमध्ये तुम्हाला आणीबाणीच्या परिस्थितीची चेतावणी देण्यासाठी सेल प्रसारण सूचना वितरीत केल्या जातात. आणीबाणी सेल प्रसारण प्राप्त होते तेव्हा आपल्या डिव्हाइसच्या कार्यप्रदर्शनात किंवा कार्यात दुर्भावनापूर्ण अॅप्स व्यत्यय आणू शकतात."</string>
<string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"सदस्यता घेतलेली फीड वाचा"</string>
@@ -394,7 +394,7 @@
<string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"रोचक प्रसारणे पाठविण्यासाठी अॅप ला अनुमती देते, जे प्रसारण समाप्त झाल्यानंतर देखील तसेच राहते. अत्याधिक वापरामुळे बरीच मेमरी वापरली जाऊन तो फोनला धीमा किंवा अस्थिर करू शकतो."</string>
<string name="permlab_readContacts" msgid="8348481131899886131">"तुमचे संपर्क वाचा"</string>
<string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"तुम्ही कॉल केलेल्या, ईमेल केलेल्या किंवा विशिष्ट लोकांशी अन्य मार्गांनी संवाद प्रस्थापित केलेल्या लोकांच्या फ्रिक्वेन्सीसह, आपल्या टॅब्लेटवर स्टोअर केलेल्या आपल्या संपर्कांविषयीचा डेटा वाचण्यासाठी अॅप ला अनुमती देते. ही परवानगी तुमचा संपर्क डेटा सेव्ह करण्याची अॅप्स ला अनुमती देते आणि दुर्भावनापूर्ण अॅप्स आपल्या माहितीशिवाय संपर्क डेटा शेअर करू शकतात."</string>
- <string name="permdesc_readContacts" product="tv" msgid="3890061004911027912">"तुम्ही केलेले कॉल, केलेले ईमेल किंवा विशिष्ट संपर्कांसह अन्य मार्गांनी केलेले कम्युनिकेशन यांची वारंवारता, यासह तुमच्या Android TV डिव्हाइसवर स्टोअर केलेल्या तुमच्या संपर्कांविषयीचा डेटा वाचण्याची अॅपला अनुमती देते. ही परवानगी अॅप्सना तुमचा संपर्क डेटा सेव्ह करण्याची अनुमती देते आणि ही दुर्भावनापूर्ण अॅप्स तुम्हाला न कळवता संपर्क डेटा शेअर करू शकतात."</string>
+ <string name="permdesc_readContacts" product="tv" msgid="3890061004911027912">"तुम्ही केलेले कॉल, केलेले ईमेल किंवा विशिष्ट संपर्कांसह अन्य मार्गांनी केलेले कम्युनिकेशन यांची वारंवारता, यासह तुमच्या Android TV डिव्हाइसवर स्टोअर केलेल्या तुमच्या संपर्कांविषयीचा डेटा वाचण्याची अॅपला अनुमती देते. ही परवानगी अॅप्सना तुमचा संपर्क डेटा सेव्ह करण्याची अनुमती देते आणि ही दुर्भावनापूर्ण अॅप्स तुम्हाला न कळवता संपर्क डेटा शेअर करू शकतात."</string>
<string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"तुम्ही कॉल केलेल्या, ईमेल केलेल्या किंवा विशिष्ट लोकांशी अन्य मार्गांनी संवाद प्रस्थापित केलेल्या लोकांच्या फ्रिक्वेन्सीसह, आपल्या फोनवर स्टोअर केलेल्या आपल्या संपर्कांविषयीचा डेटा वाचण्यासाठी अॅप ला अनुमती देते. ही परवानगी तुमचा संपर्क डेटा सेव्ह करण्याची अॅप्स ला अनुमती देते आणि दुर्भावनापूर्ण अॅप्स आपल्या माहितीशिवाय संपर्क डेटा शेअर करू शकतात."</string>
<string name="permlab_writeContacts" msgid="5107492086416793544">"तुमचे संपर्क सुधारित करा"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"तुम्ही विशिष्ट संपर्कांशी अन्य मार्गांनी कॉल केलेल्या, ईमेल केलेल्या किंवा संवाद प्रस्थापित केलेल्या फ्रिक्वेन्सीसह, आपल्या टॅब्लेटवर स्टोअर केलेल्या आपल्या संपर्कांविषयीचा डेटा सुधारित करण्यासाठी अॅप ला अनुमती देते. ही परवानगी संपर्क डेटा हटविण्यासाठी अॅप ला अनुमती देते."</string>
@@ -404,7 +404,7 @@
<string name="permdesc_readCallLog" msgid="3204122446463552146">"हा अॅप तुमचा कॉल इतिहास वाचू शकता."</string>
<string name="permlab_writeCallLog" msgid="8552045664743499354">"कॉल लॉग लिहा"</string>
<string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"येणार्या आणि केल्या जाणार्या कॉलविषयीच्या डेटासह, आपल्या टॅब्लेटचा कॉल लॉग सुधारित करण्यासाठी अॅप ला अनुमती देते. दुर्भावनापूर्ण अॅप्स तुमचा कॉल लॉग मिटवण्यासाठी किंवा सुधारित करण्यासाठी याचा वापर करू शकतात."</string>
- <string name="permdesc_writeCallLog" product="tv" msgid="7939219462637746280">"येणार्या आणि केल्या जाणार्या कॉलविषयीच्या डेटासह, तुमच्या Android TV डिव्हाइसचा कॉल लॉग सुधारित करण्यासाठी अॅपला अनुमती देते. दुर्भावनापूर्ण अॅप्स तुमचा कॉल लॉग मिटवण्यासाठी किंवा सुधारित करण्यासाठी याचा वापर करू शकतात."</string>
+ <string name="permdesc_writeCallLog" product="tv" msgid="7939219462637746280">"येणार्या आणि केल्या जाणार्या कॉलविषयीच्या डेटासह, तुमच्या Android TV डिव्हाइसचा कॉल लॉग सुधारित करण्यासाठी अॅपला अनुमती देते. दुर्भावनापूर्ण अॅप्स तुमचा कॉल लॉग मिटवण्यासाठी किंवा सुधारित करण्यासाठी याचा वापर करू शकतात."</string>
<string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"येणार्या आणि केल्या जाणार्या कॉलविषयीच्या डेटासह, आपल्या फोनचा कॉल लॉग सुधारित करण्यासाठी अॅप ला अनुमती देते. दुर्भावनापूर्ण अॅप्स तुमचा कॉल लॉग मिटवण्यासाठी किंवा सुधारित करण्यासाठी याचा वापर करू शकतात."</string>
<string name="permlab_bodySensors" msgid="4683341291818520277">"शरीर सेंसर (हृदय गती मॉनिटरसारखे) अॅक्सेस करा"</string>
<string name="permdesc_bodySensors" product="default" msgid="4380015021754180431">"हृदय गती सारख्या, आपल्या शारीरिक स्थितीचे नियंत्रण करणार्या सेन्सरवरून डेटामध्ये प्रवेश करण्यासाठी अॅपला अनुमती देते."</string>
@@ -1274,6 +1274,12 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ला इंटरनेट अॅक्सेस नाही"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"पर्यायांसाठी टॅप करा"</string>
+ <!-- no translation found for mobile_no_internet (1445208572588803493) -->
+ <skip />
+ <!-- no translation found for other_networks_no_internet (1553338015597653827) -->
+ <skip />
+ <!-- no translation found for private_dns_broken_detailed (4293356177543535578) -->
+ <skip />
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"कनेक्ट केले"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ला मर्यादित कनेक्टिव्हिटी आहे"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"तरीही कनेक्ट करण्यासाठी टॅप करा"</string>
@@ -1962,9 +1968,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"सेव्ह करा"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"नाही, नको"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"अपडेट करा"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"पुढे सुरू ठेवा"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"पासवर्ड"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"पत्ता"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"क्रेडिट कार्ड"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"डेबिट कार्ड"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"पेमेंट कार्ड"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"कार्ड"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"वापरकर्तानाव"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ईमेल अॅड्रेस"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"शांत रहा आणि जवळपास निवारा शोधा."</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 4c811fd..bfe6f2b 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tiada akses Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Ketik untuk mendapatkan pilihan"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Rangkaian mudah alih tiada akses Internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Rangkaian tiada akses Internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Pelayan DNS peribadi tidak boleh diakses"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Disambungkan"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> mempunyai kesambungan terhad"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Ketik untuk menyambung juga"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Simpan"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Tidak, terima kasih"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Kemas kini"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Teruskan"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"kata laluan"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"alamat"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kad kredit"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"kad debit"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"kad pembayaran"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kad"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nama pengguna"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"alamat e-mel"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Bertenang dan cari perlindungan di kawasan yang berdekatan."</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 38a33bf..d7375e2 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> တွင် အင်တာနက်အသုံးပြုခွင့် မရှိပါ"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"အခြားရွေးချယ်စရာများကိုကြည့်ရန် တို့ပါ"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"မိုဘိုင်းကွန်ရက်တွင် အင်တာနက်ချိတ်ဆက်မှု မရှိပါ"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"ကွန်ရက်တွင် အင်တာနက်အသုံးပြုခွင့် မရှိပါ"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"သီးသန့် ဒီအန်အက်စ် (DNS) ဆာဗာကို သုံး၍မရပါ။"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"ချိတ်ဆက်ထားသည်"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> တွင် ချိတ်ဆက်မှုကို ကန့်သတ်ထားသည်"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"မည်သို့ပင်ဖြစ်စေ ချိတ်ဆက်ရန် တို့ပါ"</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"သိမ်းရန်"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"မလိုပါ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"အပ်ဒိတ်လုပ်ရန်"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"ရှေ့ဆက်ရန်"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"စကားဝှက်"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"လိပ်စာ"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ခရက်တစ်ကတ်"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"ဒက်ဘစ် ကတ်"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"ငွေပေးချေမှုကတ်"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"ကတ်"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"အသုံးပြုသူအမည်"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"အီးမေးလ်လိပ်စာ"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"စိတ်ငြိမ်ငြိမ်ထားပြီး အနီးအနားတဝိုက်တွင် ခိုနားစရာ နေရာရှာပါ။"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 2d4a5f5..3a78f79 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har ingen internettilkobling"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Trykk for å få alternativer"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobilnettverket har ingen internettilgang"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Nettverket har ingen internettilgang"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Den private DNS-tjeneren kan ikke nås"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Tilkoblet"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har begrenset tilkobling"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Trykk for å koble til likevel"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Lagre"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nei takk"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Oppdater"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Fortsett"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"passord"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresse"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredittkort"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debetkort"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"betalingskort"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kort"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"brukernavn"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-postadresse"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Hold deg rolig og søk ly i nærheten."</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index dc44d2a..d3eb0c3 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -1280,6 +1280,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> को इन्टरनेटमाथि पहुँच छैन"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"विकल्पहरूका लागि ट्याप गर्नुहोस्"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"मोबाइल नेटवर्कको इन्टरनेटमाथि पहुँच छैन"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"नेटवर्कको इन्टरनेटमाथि पहुँच छैन"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"निजी DNS सर्भरमाथि पहुँच प्राप्त गर्न सकिँदैन"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"जोडियो"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> को जडान सीमित छ"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"जसरी भए पनि जडान गर्न ट्याप गर्नुहोस्"</string>
@@ -1967,9 +1970,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"सुरक्षित गर्नुहोस्"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"पर्दैन, धन्यवाद"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"अद्यावधिक गर्नुहोस्"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"जारी राख्नुहोस्"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"पासवर्ड"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ठेगाना"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"क्रेडिट कार्ड"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"डेबिट कार्ड"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"भुक्तानी कार्ड"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"कार्ड"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"प्रयोगकर्ताको नाम"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"इमेल ठेगाना"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"शान्त रहनुहोस् र नजिकै आश्रयस्थल खोज्नुहोस्।"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 5c30c41..9300f74 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> heeft geen internettoegang"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tik voor opties"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobiel netwerk heeft geen internettoegang"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Netwerk heeft geen internettoegang"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Geen toegang tot privé-DNS-server"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Verbonden"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> heeft beperkte connectiviteit"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Tik om toch verbinding te maken"</string>
@@ -1666,14 +1669,14 @@
<string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
<string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Verwijderen"</string>
<string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"Volume verhogen tot boven het aanbevolen niveau?\n\nAls je langere tijd op hoog volume naar muziek luistert, raakt je gehoor mogelijk beschadigd."</string>
- <string name="accessibility_shortcut_warning_dialog_title" msgid="8404780875025725199">"Sneltoets voor toegankelijkheid gebruiken?"</string>
+ <string name="accessibility_shortcut_warning_dialog_title" msgid="8404780875025725199">"Snelkoppeling toegankelijkheid gebruiken?"</string>
<string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"Wanneer de snelkoppeling is ingeschakeld, kun je drie seconden op beide volumeknoppen drukken om een toegankelijkheidsfunctie te starten.\n\n Huidige toegankelijkheidsfunctie:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Je kunt de functie wijzigen in Instellingen > Toegankelijkheid."</string>
<string name="disable_accessibility_shortcut" msgid="627625354248453445">"Sneltoets uitschakelen"</string>
<string name="leave_accessibility_shortcut_on" msgid="7653111894438512680">"Sneltoets gebruiken"</string>
<string name="color_inversion_feature_name" msgid="4231186527799958644">"Kleurinversie"</string>
<string name="color_correction_feature_name" msgid="6779391426096954933">"Kleurcorrectie"</string>
- <string name="accessibility_shortcut_enabling_service" msgid="7771852911861522636">"\'Snelle link voor toegankelijkheid\' heeft <xliff:g id="SERVICE_NAME">%1$s</xliff:g> ingeschakeld"</string>
- <string name="accessibility_shortcut_disabling_service" msgid="2747243438223109821">"\'Snelle link voor toegankelijkheid\' heeft <xliff:g id="SERVICE_NAME">%1$s</xliff:g> uitgeschakeld"</string>
+ <string name="accessibility_shortcut_enabling_service" msgid="7771852911861522636">"\'Snelkoppeling toegankelijkheid\' heeft <xliff:g id="SERVICE_NAME">%1$s</xliff:g> ingeschakeld"</string>
+ <string name="accessibility_shortcut_disabling_service" msgid="2747243438223109821">"\'Snelkoppeling toegankelijkheid\' heeft <xliff:g id="SERVICE_NAME">%1$s</xliff:g> uitgeschakeld"</string>
<string name="accessibility_shortcut_spoken_feedback" msgid="8376923232350078434">"Houd beide volumetoetsen drie seconden ingedrukt om <xliff:g id="SERVICE_NAME">%1$s</xliff:g> te gebruiken"</string>
<string name="accessibility_button_prompt_text" msgid="1176658502969738564">"Kies een service om te gebruiken wanneer je op de toegankelijkheidsknop tikt:"</string>
<string name="accessibility_gesture_prompt_text" msgid="8259145549733019401">"Kies een service om te gebruiken met het toegankelijkheidsgebaar (veeg met twee vingers omhoog vanaf de onderkant van het scherm):"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Opslaan"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nee, bedankt"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Updaten"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Doorgaan"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"Wachtwoord"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"Adres"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"Creditcard"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"pinpas"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"betaalkaart"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kaart"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"gebruikersnaam"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-mailadres"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Blijf kalm en zoek onderdak in de buurt."</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index ac85a40..b4079ef 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -1274,6 +1274,12 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>ର ଇଣ୍ଟର୍ନେଟ୍ ଆକ୍ସେସ୍ ନାହିଁ"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ବିକଳ୍ପ ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
+ <!-- no translation found for mobile_no_internet (1445208572588803493) -->
+ <skip />
+ <!-- no translation found for other_networks_no_internet (1553338015597653827) -->
+ <skip />
+ <!-- no translation found for private_dns_broken_detailed (4293356177543535578) -->
+ <skip />
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"ସଂଯୁକ୍ତ ହୋଇଛି"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>ର ସୀମିତ ସଂଯୋଗ ଅଛି"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"ତଥାପି ଯୋଗାଯୋଗ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ"</string>
@@ -1961,9 +1967,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"ସେଭ୍ କରନ୍ତୁ"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ନାଁ, ପଚାରିଥିବାରୁ ଧନ୍ୟବାଦ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"ଅପ୍ଡେଟ୍ କରନ୍ତୁ"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"ଜାରି ରଖନ୍ତୁ"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"ପାସୱର୍ଡ୍"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ଠିକଣା"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"କ୍ରେଡିଟ୍ କାର୍ଡ"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"ଡେବିଟ୍ କାର୍ଡ"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"ପେମେଣ୍ଟ କାର୍ଡ"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"କାର୍ଡ"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"ୟୁଜରଙ୍କ ନାମ"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ଇମେଲ୍ ଠିକଣା"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"ଶାନ୍ତ ରୁହନ୍ତୁ ଓ ନିକଟର କୌଣସି ଏକ ଆଶ୍ରୟସ୍ଥଳ ଖୋଜନ୍ତୁ"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 177c7bc..68cfc5f 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ਕੋਲ ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਨਹੀਂ ਹੈ"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ਵਿਕਲਪਾਂ ਲਈ ਟੈਪ ਕਰੋ"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਕੋਲ ਇੰਟਰਨੈੱਟ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਹੈ"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"ਨੈੱਟਵਰਕ ਕੋਲ ਇੰਟਰਨੈੱਟ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਹੈ"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"ਨਿੱਜੀ ਡੋਮੇਨ ਨਾਮ ਪ੍ਰਣਾਲੀ (DNS) ਸਰਵਰ \'ਤੇ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"ਕਨੈਕਟ ਹੋਏ"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ਕੋਲ ਸੀਮਤ ਕਨੈਕਟੀਵਿਟੀ ਹੈ"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"ਫਿਰ ਵੀ ਕਨੈਕਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"ਰੱਖਿਅਤ ਕਰੋ"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ਨਹੀਂ ਧੰਨਵਾਦ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"ਅੱਪਡੇਟ ਕਰੋ"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"ਜਾਰੀ ਰੱਖੋ"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"ਪਾਸਵਰਡ"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ਪਤਾ"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ਕ੍ਰੈਡਿਟ ਕਾਰਡ"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"ਡੈਬਿਟ ਕਾਰਡ"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"ਭੁਗਤਾਨ ਕਾਰਡ"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"ਕਾਰਡ"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"ਵਰਤੋਂਕਾਰ ਨਾਮ"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ਈਮੇਲ ਪਤਾ"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"ਸ਼ਾਂਤ ਰਹੋ ਅਤੇ ਆਸ-ਪਾਸ ਪਨਾਹ ਮੰਗੋ।"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 1f2430c..b238d4f 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -307,7 +307,7 @@
<string name="permgrouprequest_microphone" msgid="9167492350681916038">"Zezwolić aplikacji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na nagrywanie dźwięku?"</string>
<string name="permgrouplab_activityRecognition" msgid="1565108047054378642">"Aktywność fizyczna"</string>
<string name="permgroupdesc_activityRecognition" msgid="6949472038320473478">"dostęp do aktywności fizycznej"</string>
- <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"Zezwolić aplikacji „<xliff:g id="APP_NAME">%1$s</xliff:g>” na dostęp do aktywności fizycznej?"</string>
+ <string name="permgrouprequest_activityRecognition" msgid="7626438016904799383">"Zezwolić aplikacji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na dostęp do aktywności fizycznej?"</string>
<string name="permgrouplab_camera" msgid="4820372495894586615">"Aparat"</string>
<string name="permgroupdesc_camera" msgid="3250611594678347720">"robienie zdjęć i nagrywanie filmów"</string>
<string name="permgrouprequest_camera" msgid="1299833592069671756">"Zezwolić aplikacji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na robienie zdjęć i nagrywanie filmów?"</string>
@@ -1318,6 +1318,12 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nie ma dostępu do internetu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Kliknij, by wyświetlić opcje"</string>
+ <!-- no translation found for mobile_no_internet (1445208572588803493) -->
+ <skip />
+ <!-- no translation found for other_networks_no_internet (1553338015597653827) -->
+ <skip />
+ <!-- no translation found for private_dns_broken_detailed (4293356177543535578) -->
+ <skip />
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Połączono"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ma ograniczoną łączność"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Kliknij, by mimo to nawiązać połączenie"</string>
@@ -2031,9 +2037,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Zapisz"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nie, dziękuję"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Zaktualizuj"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Dalej"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"hasło"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adres"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"karta kredytowa"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"karta debetowa"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"karta płatnicza"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"karta"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nazwa użytkownika"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"adres e-mail"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Zachowaj spokój i poszukaj schronienia w pobliżu."</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 05967af..7442703 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> não tem acesso à Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toque para ver opções"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"A rede móvel não tem acesso à Internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"A rede não tem acesso à Internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Não é possível acessar o servidor DNS privado"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Conectado"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tem conectividade limitada"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Toque para conectar mesmo assim"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Salvar"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Não, obrigado"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Atualizar"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continuar"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"senha"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"endereço"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"cartão de crédito"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"cartão de débito"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"cartão de pagamento"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"cartão"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nome de usuário"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"endereço de e-mail"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Fique calmo e procure um abrigo por perto."</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 400d576..add12d9 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> não tem acesso à Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toque para obter mais opções"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"A rede móvel não tem acesso à Internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"A rede não tem acesso à Internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Não é possível aceder ao servidor DNS."</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Ligado"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tem conetividade limitada."</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Toque para ligar mesmo assim."</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Guardar"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Não, obrigado"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Atualizar"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continuar"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"palavra-passe"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"endereço"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"cartão de crédito"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"cartão de débito"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"cartão de pagamento"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"cartão"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nome de utilizador"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"endereço de email"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Mantenha a calma e procure abrigo nas proximidades."</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 05967af..7442703 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> não tem acesso à Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toque para ver opções"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"A rede móvel não tem acesso à Internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"A rede não tem acesso à Internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Não é possível acessar o servidor DNS privado"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Conectado"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tem conectividade limitada"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Toque para conectar mesmo assim"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Salvar"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Não, obrigado"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Atualizar"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continuar"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"senha"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"endereço"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"cartão de crédito"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"cartão de débito"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"cartão de pagamento"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"cartão"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nome de usuário"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"endereço de e-mail"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Fique calmo e procure um abrigo por perto."</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 27e6ec0..f1a6136 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1296,6 +1296,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nu are acces la internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Atingeți pentru opțiuni"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Rețeaua mobilă nu are acces la internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Rețeaua nu are acces la internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Serverul DNS privat nu poate fi accesat"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Conectat"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> are conectivitate limitată"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Atingeți pentru a vă conecta oricum"</string>
@@ -1996,9 +1999,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Salvați"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nu, mulțumesc"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Actualizați"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Continuați"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"parolă"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresă"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"card de credit"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"card de debit"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"card de plată"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"card"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"nume de utilizator"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"adresă de e-mail"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Păstrați-vă calmul și căutați un adăpost în apropiere."</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 6390b95..f01de36 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1318,6 +1318,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"Сеть \"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>\" не подключена к Интернету"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Нажмите, чтобы показать варианты."</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Мобильная сеть не подключена к Интернету"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Сеть не подключена к Интернету"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Доступа к частному DNS-серверу нет."</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Подключено"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"Подключение к сети \"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>\" ограничено"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Нажмите, чтобы подключиться"</string>
@@ -2031,9 +2034,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Сохранить"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Нет, спасибо"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Обновить"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Продолжить"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"Пароль"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"Адрес"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"Банковская карта"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"дебетовая карта"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"платежная карта"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"карта"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"имя пользователя"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"адрес электронной почты"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Сохраняйте спокойствие и поищите укрытие поблизости."</string>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index fc69d0e..6dbf502 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -1276,6 +1276,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> හට අන්තර්ජාල ප්රවේශය නැත"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"විකල්ප සඳහා තට්ටු කරන්න"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"ජංගම ජාලවලට අන්තර්ජාල ප්රවේශය නැත"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"ජාලයට අන්තර්ජාල ප්රවේශය නැත"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"පුද්ගලික DNS සේවාදායකයට ප්රවේශ වීමට නොහැකිය"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"සම්බන්ධයි"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> හට සීමිත සබැඳුම් හැකියාවක් ඇත"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"කෙසේ වෙතත් ඉදිරියට යාමට තට්ටු කරන්න"</string>
@@ -1963,9 +1966,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"සුරකින්න"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"එපා ස්තූතියි"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"යාවත්කාලීන කරන්න"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"ඉදිරියට යන්න"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"මුරපදය"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ලිපිනය"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ණය කාඩ්පත"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"හර කාඩ්පත"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"ගෙවීම් කාඩ්පත"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"කාඩ්පත"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"පරිශීලක නාමය"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ඊ-තැපැල් ලිපිනය"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"සන්සුන්ව ඉන්න සහ අවට ඇති නවාතැන් පහසුකම් බලන්න."</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 59e8b5e..1549f4d 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1318,6 +1318,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nemá prístup k internetu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Klepnutím získate možnosti"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobilná sieť nemá prístup k internetu"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Sieť nemá prístup k internetu"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"K súkromnému serveru DNS sa nepodarilo získať prístup"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Pripojené"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> má obmedzené pripojenie"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Ak sa chcete aj napriek tomu pripojiť, klepnite"</string>
@@ -2031,9 +2034,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Uložiť"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nie, vďaka"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Aktualizovať"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Pokračovať"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"heslo"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresa"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditná karta"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debetná karta"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"platobná karta"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"karta"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"používateľské meno"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-mailová adresa"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Zachovajte pokoj a vyhľadajte úkryt v okolí."</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index c49d5ff..40d0dde 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1318,6 +1318,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"Omrežje <xliff:g id="NETWORK_SSID">%1$s</xliff:g> nima dostopa do interneta"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Dotaknite se za možnosti"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobilno omrežje nima dostopa do interneta"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Omrežje nima dostopa do interneta"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Do zasebnega strežnika DNS ni mogoče dostopati"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Povezava je vzpostavljena"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"Povezljivost omrežja <xliff:g id="NETWORK_SSID">%1$s</xliff:g> je omejena"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Dotaknite se, da kljub temu vzpostavite povezavo"</string>
@@ -2031,9 +2034,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Shrani"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ne, hvala"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Posodobi"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Naprej"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"geslo"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"naslov"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditno kartico"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debetna kartica"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"plačilna kartica"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kartica"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"uporabniško ime"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-poštni naslov"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Ostanite mirni in poiščite zavetje v bližini."</string>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index 045c7d5..ee46d3b 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nuk ka qasje në internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Trokit për opsionet"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Rrjeti celular nuk ka qasje në internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Rrjeti nuk ka qasje në internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Serveri privat DNS nuk mund të qaset"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Lidhur"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ka lidhshmëri të kufizuar"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Trokit për t\'u lidhur gjithsesi"</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Ruaj"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Jo, faleminderit"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Përditëso"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Vazhdo"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"fjalëkalimi"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adresa"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"karta e kreditit"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"kartë debiti"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"kartë pagese"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kartë"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"emri i përdoruesit"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"adresa e mail-it"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Qëndro i qetë dhe kërko strehim në afërsi."</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 0d8acc6..7fd7353 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1296,6 +1296,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> нема приступ интернету"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Додирните за опције"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Мобилна мрежа нема приступ интернету"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Мрежа нема приступ интернету"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Приступ приватном DNS серверу није успео"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Повезано је"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> има ограничену везу"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Додирните да бисте се ипак повезали"</string>
@@ -1996,9 +1999,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Сачувај"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Не, хвала"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Ажурирај"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Настави"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"лозинка"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"адреса"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"кредитна картица"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"дебитна картица"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"платна картица"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"картица"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"корисничко име"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"имејл адреса"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Останите мирни и потражите склониште у околини."</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index dba5ebb..b8da1b6 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har ingen internetanslutning"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tryck för alternativ"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobilnätverket har ingen internetanslutning"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Nätverket har ingen internetanslutning"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Det går inte att komma åt den privata DNS-servern."</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Ansluten"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har begränsad anslutning"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Tryck för att ansluta ändå"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Spara"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Nej tack"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Uppdatera"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Fortsätt"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"lösenordet"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adressen"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kreditkortet"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"bankkort"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"kontokort"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kort"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"användarnamn"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-postadress"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Håll dig lugn och sök skydd i närheten."</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 89e3231..88221b6 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> haina uwezo wa kufikia intaneti"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Gusa ili upate chaguo"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mtandao wa simu hauna uwezo wa kufikia intaneti"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Mtandao hauna uwezo wa kufikia intaneti"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Seva ya faragha ya DNS haiwezi kufikiwa"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Imeunganisha"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ina muunganisho unaofikia huduma chache."</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Gusa ili uunganishe tu"</string>
@@ -1349,7 +1352,7 @@
<string name="dlg_ok" msgid="7376953167039865701">"Sawa"</string>
<string name="usb_charging_notification_title" msgid="1595122345358177163">"Unachaji kifaa hiki kupitia USB"</string>
<string name="usb_supplying_notification_title" msgid="4631045789893086181">"Inachaji kifaa kilichounganishwa kupitia USB"</string>
- <string name="usb_mtp_notification_title" msgid="4238227258391151029">"Umewasha hali ya uhamishaji wa faili kupitia USB"</string>
+ <string name="usb_mtp_notification_title" msgid="4238227258391151029">"Umewasha uhamishaji wa faili kupitia USB"</string>
<string name="usb_ptp_notification_title" msgid="5425857879922006878">"Umewasha hali ya PTP kupitia USB"</string>
<string name="usb_tether_notification_title" msgid="3716143122035802501">"Umewasha hali ya kusambaza mtandao ukitumia USB"</string>
<string name="usb_midi_notification_title" msgid="5356040379749154805">"Umewasha hali ya MIDI kupitia USB"</string>
@@ -1666,14 +1669,14 @@
<string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
<string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Ondoa"</string>
<string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"Ungependa kupandisha sauti zaidi ya kiwango kinachopendekezwa?\n\nKusikiliza kwa sauti ya juu kwa muda mrefu kunaweza kuharibu uwezo wako wa kusikia."</string>
- <string name="accessibility_shortcut_warning_dialog_title" msgid="8404780875025725199">"Ungependa Kutumia Njia ya Mkato ya Zana za walio na matatizo ya kuona au kusikia?"</string>
- <string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"Unapowasha kipengele cha njia ya mkato, hatua ya kubonyeza vitufe vyote viwili vya sauti kwa dakika 3 itafungua kipengele cha zana za walio na matatizo ya kuona au kusikia.\n\n Kipengele kilichopo cha zana za walio na matatizo ya kuona au kusikia:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Unaweza kubadilisha kipengele hiki katika Mipangilio > Zana za walio na matatizo ya kuona au kusikia."</string>
+ <string name="accessibility_shortcut_warning_dialog_title" msgid="8404780875025725199">"Ungependa kutumia njia ya mkato ya ufikivu?"</string>
+ <string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"Unapowasha kipengele cha njia ya mkato, hatua ya kubonyeza vitufe vyote viwili vya sauti kwa dakika 3 itafungua kipengele cha ufikivu.\n\n Kipengele cha ufikivu kilichopo kwa sasa:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Unaweza kubadilisha kipengele hiki katika Mipangilio > Zana za ufikivu."</string>
<string name="disable_accessibility_shortcut" msgid="627625354248453445">"Zima kipengele cha Njia ya Mkato"</string>
<string name="leave_accessibility_shortcut_on" msgid="7653111894438512680">"Tumia Njia ya Mkato"</string>
<string name="color_inversion_feature_name" msgid="4231186527799958644">"Ugeuzaji rangi"</string>
<string name="color_correction_feature_name" msgid="6779391426096954933">"Usahihishaji wa rangi"</string>
- <string name="accessibility_shortcut_enabling_service" msgid="7771852911861522636">"Njia ya mkato ya zana za walio na matatizo ya kuona au kusikia imewasha <xliff:g id="SERVICE_NAME">%1$s</xliff:g>"</string>
- <string name="accessibility_shortcut_disabling_service" msgid="2747243438223109821">"Njia ya mkato ya zana za walio na matatizo ya kuona au kusikia imezima <xliff:g id="SERVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="accessibility_shortcut_enabling_service" msgid="7771852911861522636">"Njia ya mkato ya ufikivu imewasha <xliff:g id="SERVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="accessibility_shortcut_disabling_service" msgid="2747243438223109821">"Njia ya mkato ya ufikivu imezima <xliff:g id="SERVICE_NAME">%1$s</xliff:g>"</string>
<string name="accessibility_shortcut_spoken_feedback" msgid="8376923232350078434">"Bonyeza na ushikilie vitufe vyote viwili vya sauti kwa sekunde tatu ili utumie <xliff:g id="SERVICE_NAME">%1$s</xliff:g>"</string>
<string name="accessibility_button_prompt_text" msgid="1176658502969738564">"Chagua huduma ya kutumia unapogusa kitufe cha ufikivu:"</string>
<string name="accessibility_gesture_prompt_text" msgid="8259145549733019401">"Chagua huduma ya kutumia pamoja na ishara ya ufikivu (telezesha vidole viwili kutoka chini kwenda juu kwenye skrini):"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Hifadhi"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Hapana, asante"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Sasisha"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Endelea"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"nenosiri"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"anwani"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kadi ya mikopo"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"kadi ya malipo"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"kadi ya malipo"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kadi"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"jina la mtumiaji"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"anwani ya barua pepe"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Tulia na utafute hifadhi ya karibu."</string>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 0ed1421..6c35423 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> நெட்வொர்க்கிற்கு இணைய அணுகல் இல்லை"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"விருப்பங்களுக்கு, தட்டவும்"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"மொபைல் நெட்வொர்க்கிற்கு இணைய அணுகல் இல்லை"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"நெட்வொர்க்கிற்கு இணைய அணுகல் இல்லை"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"தனிப்பட்ட DNS சேவையகத்தை அணுக இயலாது"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"இணைக்கப்பட்டது"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> வரம்பிற்கு உட்பட்ட இணைப்புநிலையைக் கொண்டுள்ளது"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"எப்படியேனும் இணைப்பதற்குத் தட்டவும்"</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"சேமி"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"வேண்டாம்"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"புதுப்பி"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"தொடர்க"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"கடவுச்சொல்"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"முகவரி"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"கிரெடிட் கார்டு"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"டெபிட் கார்டு"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"பேமெண்ட் கார்டு"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"கார்டு"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"பயனர்பெயர்"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"மின்னஞ்சல் முகவரி"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"பதட்டப்படாதீர்கள், அருகில் ஏதேனும் பாதுகாப்பான இடம் உள்ளதா எனப் பாருங்கள்."</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 72b83c4..7e91460 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>కి ఇంటర్నెట్ యాక్సెస్ లేదు"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ఎంపికల కోసం నొక్కండి"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"మొబైల్ నెట్వర్క్కు ఇంటర్నెట్ యాక్సెస్ లేదు"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"నెట్వర్క్కు ఇంటర్నెట్ యాక్సెస్ లేదు"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"ప్రైవేట్ DNS సర్వర్ను యాక్సెస్ చేయడం సాధ్యపడదు"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"కనెక్ట్ చేయబడింది"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> పరిమిత కనెక్టివిటీని కలిగి ఉంది"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"ఏదేమైనా కనెక్ట్ చేయడానికి నొక్కండి"</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"సేవ్ చేయి"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"వద్దు, ధన్యవాదాలు"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"అప్డేట్ చేయి"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"కొనసాగించు"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"పాస్వర్డ్"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"చిరునామా"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"క్రెడిట్ కార్డ్"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"డెబిట్ కార్డ్"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"చెల్లింపు కార్డ్"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"కార్డ్"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"వినియోగదారు పేరు"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ఇమెయిల్ చిరునామా"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"ప్రశాంతంగా ఉండండి మరియు దగ్గర్లో తలదాచుకోండి."</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index caaa32d..5431796 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> เข้าถึงอินเทอร์เน็ตไม่ได้"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"แตะเพื่อดูตัวเลือก"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"เครือข่ายมือถือไม่มีการเข้าถึงอินเทอร์เน็ต"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"เครือข่ายไม่มีการเข้าถึงอินเทอร์เน็ต"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"เข้าถึงเซิร์ฟเวอร์ DNS ไม่ได้"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"เชื่อมต่อแล้ว"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> มีการเชื่อมต่อจำกัด"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"แตะเพื่อเชื่อมต่อ"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"บันทึก"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"ไม่เป็นไร"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"อัปเดต"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"ทำต่อ"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"รหัสผ่าน"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ที่อยู่"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"บัตรเครดิต"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"บัตรเดบิต"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"บัตรสำหรับชำระเงิน"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"บัตร"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"ชื่อผู้ใช้"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ที่อยู่อีเมล"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"ทำใจให้สงบและหาที่กำบังในบริเวณใกล้เคียง"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 01cf28f..3e71d77 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"Walang access sa internet ang <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"I-tap para sa mga opsyon"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Walang access sa internet ang mobile network"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Walang access sa internet ang network"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Hindi ma-access ang pribadong DNS server"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Nakakonekta"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"Limitado ang koneksyon ng <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"I-tap para kumonekta pa rin"</string>
@@ -1666,8 +1669,8 @@
<string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
<string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Alisin"</string>
<string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"Lakasan ang volume nang lagpas sa inirerekomendang antas?\n\nMaaaring mapinsala ng pakikinig sa malakas na volume sa loob ng mahahabang panahon ang iyong pandinig."</string>
- <string name="accessibility_shortcut_warning_dialog_title" msgid="8404780875025725199">"Gagamitin ang Shortcut sa Pagiging Naa-access?"</string>
- <string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"Kapag naka-on ang shortcut, magsisimula ang isang feature ng pagiging naa-access kapag pinindot ang parehong button ng volume sa loob ng 3 segundo.\n\n Kasalukuyang feature ng pagiging naa-access:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Maaari mong baguhin ang feature sa Mga Setting > Pagiging Naa-access."</string>
+ <string name="accessibility_shortcut_warning_dialog_title" msgid="8404780875025725199">"Gagamitin ang Shortcut sa Pagiging Accessible?"</string>
+ <string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"Kapag naka-on ang shortcut, magsisimula ang isang feature ng pagiging naa-access kapag pinindot ang parehong button ng volume sa loob ng 3 segundo.\n\n Kasalukuyang feature ng pagiging naa-access:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Maaari mong baguhin ang feature sa Mga Setting > Pagiging Accessible."</string>
<string name="disable_accessibility_shortcut" msgid="627625354248453445">"I-off ang Shortcut"</string>
<string name="leave_accessibility_shortcut_on" msgid="7653111894438512680">"Gamitin ang Shortcut"</string>
<string name="color_inversion_feature_name" msgid="4231186527799958644">"Pag-invert ng Kulay"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"I-save"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Hindi, salamat na lang"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"I-update"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Magpatuloy"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debit card"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"card sa pagbabayad"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"card"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"username"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"email address"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Manatiling kalmado at maghanap ng matutuluyan sa malapit."</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index d3e9d93..8a63348 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ağının internet bağlantısı yok"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Seçenekler için dokunun"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobil ağın internet bağlantısı yok"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Ağın internet bağlantısı yok"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Gizli DNS sunucusuna erişilemiyor"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Bağlandı"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> sınırlı bağlantıya sahip"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Yine de bağlanmak için dokunun"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Kaydet"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Hayır, teşekkürler"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Güncelle"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Devam"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"şifre"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"adres"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredi kartı"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"banka kartı"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"ödeme kartı"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"kart"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"kullanıcı adı"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"e-posta adresi"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Sakin olun ve yakınlarda sığınabileceğiniz bir yer bulun."</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 88350a2..3d7358e 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1318,6 +1318,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"Мережа <xliff:g id="NETWORK_SSID">%1$s</xliff:g> не має доступу до Інтернету"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Торкніться, щоб відкрити опції"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Мобільна мережа не має доступу до Інтернету"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Мережа не має доступу до Інтернету"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Немає доступу до приватного DNS-сервера"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Підключено"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"Підключення до мережі <xliff:g id="NETWORK_SSID">%1$s</xliff:g> обмежено"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Натисніть, щоб усе одно підключитися"</string>
@@ -1714,14 +1717,14 @@
<string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
<string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Вилучити"</string>
<string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"Збільшити гучність понад рекомендований рівень?\n\nЯкщо слухати надто гучну музику тривалий час, можна пошкодити слух."</string>
- <string name="accessibility_shortcut_warning_dialog_title" msgid="8404780875025725199">"Використовувати ярлик спеціальних можливостей?"</string>
+ <string name="accessibility_shortcut_warning_dialog_title" msgid="8404780875025725199">"Використовувати швидке ввімкнення?"</string>
<string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"Коли ярлик увімкнено, після натискання обох клавіш гучності й утримування їх протягом 3 секунд увімкнеться функція спеціальних можливостей.\n\n Поточна функція спеціальних можливостей:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Цю функцію можна змінити в меню \"Налаштування\" > \"Спеціальні можливості\"."</string>
<string name="disable_accessibility_shortcut" msgid="627625354248453445">"Вимкнути ярлик"</string>
<string name="leave_accessibility_shortcut_on" msgid="7653111894438512680">"Використовувати ярлик"</string>
<string name="color_inversion_feature_name" msgid="4231186527799958644">"Інверсія кольорів"</string>
<string name="color_correction_feature_name" msgid="6779391426096954933">"Корекція кольорів"</string>
- <string name="accessibility_shortcut_enabling_service" msgid="7771852911861522636">"Ярлик спеціальних можливостей увімкнув <xliff:g id="SERVICE_NAME">%1$s</xliff:g>"</string>
- <string name="accessibility_shortcut_disabling_service" msgid="2747243438223109821">"Ярлик спеціальних можливостей вимкнув <xliff:g id="SERVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="accessibility_shortcut_enabling_service" msgid="7771852911861522636">"Сервіс <xliff:g id="SERVICE_NAME">%1$s</xliff:g> увімкнено"</string>
+ <string name="accessibility_shortcut_disabling_service" msgid="2747243438223109821">"Сервіс <xliff:g id="SERVICE_NAME">%1$s</xliff:g> вимкнено"</string>
<string name="accessibility_shortcut_spoken_feedback" msgid="8376923232350078434">"Щоб скористатися службою <xliff:g id="SERVICE_NAME">%1$s</xliff:g>, утримуйте обидві клавіші гучності впродовж трьох секунд"</string>
<string name="accessibility_button_prompt_text" msgid="1176658502969738564">"Виберіть сервіс для кнопки спеціальних можливостей:"</string>
<string name="accessibility_gesture_prompt_text" msgid="8259145549733019401">"Виберіть сервіс для жесту спеціальних можливостей (проведення двома пальцями знизу вгору):"</string>
@@ -2031,9 +2034,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Зберегти"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Ні, дякую"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Оновити"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Продовжити"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"пароль"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"адреса"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"кредитна картка"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"дебетова картка"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"платіжна картка"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"картка"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"ім’я користувача"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"електронна адреса"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Не хвилюйтеся та знайдіть прихисток поблизу."</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index e5015ea..776595f 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -1274,6 +1274,12 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> کو انٹرنیٹ تک رسائی حاصل نہیں ہے"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"اختیارات کیلئے تھپتھپائیں"</string>
+ <!-- no translation found for mobile_no_internet (1445208572588803493) -->
+ <skip />
+ <!-- no translation found for other_networks_no_internet (1553338015597653827) -->
+ <skip />
+ <!-- no translation found for private_dns_broken_detailed (4293356177543535578) -->
+ <skip />
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"منسلک ہے"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> کی کنیکٹوٹی محدود ہے"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"بہر حال منسلک کرنے کے لیے تھپتھپائیں"</string>
@@ -1962,9 +1968,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"محفوظ کریں"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"نہیں، شکریہ"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"اپ ڈیٹ کریں"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"جاری رکھیں"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"پاس ورڈ"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"پتہ"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"کریڈٹ کارڈ"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"ڈیبٹ کارڈ"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"ادائیگی کارڈ"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"کارڈ"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"صارف نام"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ای میل پتہ"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"پُرسکون رہیں اور قریبی پناہ حاصل کریں۔"</string>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index 8899747..1f70155 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nomli tarmoqda internetga ruxsati yoʻq"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Variantlarni ko‘rsatish uchun bosing"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mobil tarmoq internetga ulanmagan"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Tarmoq internetga ulanmagan"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Xususiy DNS server ishlamayapti"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Ulandi"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nomli tarmoqda aloqa cheklangan"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Baribir ulash uchun bosing"</string>
@@ -1962,9 +1965,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Saqlash"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Kerak emas"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Yangilash"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Davom etish"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"parol"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"manzil"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"kredit karta"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"debet karta"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"toʻlov kartasi"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"bildirgi"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"foydalanuvchi nomi"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"email manzili"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Tinchlaning va yaqin-atrofdan boshpana qidiring."</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index fc8994e..dc9076f 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> không có quyền truy cập Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Nhấn để biết tùy chọn"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Mạng di động không có quyền truy cập Internet"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Mạng không có quyền truy cập Internet"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Không thể truy cập máy chủ DNS riêng tư"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Đã kết nối"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> có khả năng kết nối giới hạn"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Nhấn để tiếp tục kết nối"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Lưu"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Không, cảm ơn"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Cập nhật"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Tiếp tục"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"mật khẩu"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"địa chỉ"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"thẻ tín dụng"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"thẻ ghi nợ"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"thẻ thanh toán"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"thẻ"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"tên người dùng"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"địa chỉ email"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Hãy bình tĩnh và tìm kiếm nơi trú ẩn gần đó."</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 56d8153..8ab182e 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> 无法访问互联网"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"点按即可查看相关选项"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"此移动网络无法访问互联网"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"此网络无法访问互联网"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"无法访问私人 DNS 服务器"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"已连接"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> 的连接受限"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"点按即可继续连接"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"保存"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"不用了"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"更新"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"继续"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"密码"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"地址"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"信用卡"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"借记卡"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"支付卡"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"卡片"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"用户名"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"电子邮件地址"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"请保持冷静,并寻找附近的避难地点。"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index c8360aa..d318764 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>未有連接至互聯網"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"輕按即可查看選項"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"流動網絡並未連接互聯網"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"網絡並未連接互聯網"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"無法存取私人 DNS 伺服器"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"已連接"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>連線受限"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"仍要輕按以連結至此網絡"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"儲存"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"不用了,謝謝"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"更新"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"繼續"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"密碼"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"地址"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"信用卡"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"扣帳卡"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"付款卡"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"卡"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"使用者名稱"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"電郵地址"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"請保持冷靜,並尋找附近的避難所。"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 23b68e1..cd787c0 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> 沒有網際網路連線"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"輕觸即可查看選項"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"這個行動網路沒有網際網路連線"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"這個網路沒有網際網路連線"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"無法存取私人 DNS 伺服器"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"已連線"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> 的連線能力受限"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"輕觸即可繼續連線"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"儲存"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"不用了,謝謝"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"更新"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"繼續"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"密碼"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"地址"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"信用卡"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"簽帳金融卡"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"付款卡"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"卡片"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"使用者名稱"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"電子郵件地址"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"請保持冷靜並尋找附近的避難地點。"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index dac7c10..45bda9e 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1274,6 +1274,9 @@
<skip />
<string name="wifi_no_internet" msgid="5198100389964214865">"I-<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ayinakho ukufinyelela kwe-inthanethi"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Thepha ukuze uthole izinketho"</string>
+ <string name="mobile_no_internet" msgid="1445208572588803493">"Inethiwekhi yeselula ayinakho ukufinyelela kwe-inthanethi"</string>
+ <string name="other_networks_no_internet" msgid="1553338015597653827">"Inethiwekhi ayinakho ukufinyelela kwenethiwekhi"</string>
+ <string name="private_dns_broken_detailed" msgid="4293356177543535578">"Iseva eyimfihlo ye-DNS ayikwazi ukufinyelelwa"</string>
<string name="captive_portal_logged_in_detailed" msgid="8489345381637456021">"Kuxhunyiwe"</string>
<string name="network_partial_connectivity" msgid="7774883385494762741">"I-<xliff:g id="NETWORK_SSID">%1$s</xliff:g> inokuxhumeka okukhawulelwe"</string>
<string name="network_partial_connectivity_detailed" msgid="1959697814165325217">"Thepha ukuze uxhume noma kunjalo"</string>
@@ -1961,9 +1964,13 @@
<string name="autofill_save_yes" msgid="6398026094049005921">"Londoloza"</string>
<string name="autofill_save_no" msgid="2625132258725581787">"Cha ngiyabonga"</string>
<string name="autofill_update_yes" msgid="310358413273276958">"Buyekeza"</string>
+ <string name="autofill_continue_yes" msgid="7473570809545975068">"Qhubeka"</string>
<string name="autofill_save_type_password" msgid="5288448918465971568">"iphasiwedi"</string>
<string name="autofill_save_type_address" msgid="4936707762193009542">"ikheli"</string>
<string name="autofill_save_type_credit_card" msgid="7127694776265563071">"ikhadi lesikweletu"</string>
+ <string name="autofill_save_type_debit_card" msgid="177366134636469277">"ikhaddi lasebhange"</string>
+ <string name="autofill_save_type_payment_card" msgid="446631844461198737">"ikhadi lokukhokha"</string>
+ <string name="autofill_save_type_generic_card" msgid="5898375974937018019">"ikhadi"</string>
<string name="autofill_save_type_username" msgid="239040540379769562">"igama lomsebenzisi"</string>
<string name="autofill_save_type_email_address" msgid="5752949432129262174">"ikheli le-imeyili"</string>
<string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Hlala ubeke umoya phansi uphinde ufune ukukhuselwa eduze."</string>
diff --git a/core/tests/coretests/src/android/app/NotificationHistoryTest.java b/core/tests/coretests/src/android/app/NotificationHistoryTest.java
new file mode 100644
index 0000000..08595bb
--- /dev/null
+++ b/core/tests/coretests/src/android/app/NotificationHistoryTest.java
@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2019 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;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.NotificationHistory.HistoricalNotification;
+import android.graphics.drawable.Icon;
+import android.os.Parcel;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class NotificationHistoryTest {
+
+ private HistoricalNotification getHistoricalNotification(int index) {
+ return getHistoricalNotification("package" + index, index);
+ }
+
+ private HistoricalNotification getHistoricalNotification(String packageName, int index) {
+ String expectedChannelName = "channelName" + index;
+ String expectedChannelId = "channelId" + index;
+ int expectedUid = 1123456 + index;
+ int expectedUserId = 11 + index;
+ long expectedPostTime = 987654321 + index;
+ String expectedTitle = "title" + index;
+ String expectedText = "text" + index;
+ Icon expectedIcon = Icon.createWithResource(InstrumentationRegistry.getContext(),
+ index);
+
+ return new HistoricalNotification.Builder()
+ .setPackage(packageName)
+ .setChannelName(expectedChannelName)
+ .setChannelId(expectedChannelId)
+ .setUid(expectedUid)
+ .setUserId(expectedUserId)
+ .setPostedTimeMs(expectedPostTime)
+ .setTitle(expectedTitle)
+ .setText(expectedText)
+ .setIcon(expectedIcon)
+ .build();
+ }
+
+ @Test
+ public void testHistoricalNotificationBuilder() {
+ String expectedPackage = "package";
+ String expectedChannelName = "channelName";
+ String expectedChannelId = "channelId";
+ int expectedUid = 1123456;
+ int expectedUserId = 11;
+ long expectedPostTime = 987654321;
+ String expectedTitle = "title";
+ String expectedText = "text";
+ Icon expectedIcon = Icon.createWithResource(InstrumentationRegistry.getContext(),
+ android.R.drawable.btn_star);
+
+ HistoricalNotification n = new HistoricalNotification.Builder()
+ .setPackage(expectedPackage)
+ .setChannelName(expectedChannelName)
+ .setChannelId(expectedChannelId)
+ .setUid(expectedUid)
+ .setUserId(expectedUserId)
+ .setPostedTimeMs(expectedPostTime)
+ .setTitle(expectedTitle)
+ .setText(expectedText)
+ .setIcon(expectedIcon)
+ .build();
+
+ assertThat(n.getPackage()).isEqualTo(expectedPackage);
+ assertThat(n.getChannelName()).isEqualTo(expectedChannelName);
+ assertThat(n.getChannelId()).isEqualTo(expectedChannelId);
+ assertThat(n.getUid()).isEqualTo(expectedUid);
+ assertThat(n.getUserId()).isEqualTo(expectedUserId);
+ assertThat(n.getPostedTimeMs()).isEqualTo(expectedPostTime);
+ assertThat(n.getTitle()).isEqualTo(expectedTitle);
+ assertThat(n.getText()).isEqualTo(expectedText);
+ assertThat(expectedIcon.sameAs(n.getIcon())).isTrue();
+ }
+
+ @Test
+ public void testAddNotificationToWrite() {
+ NotificationHistory history = new NotificationHistory();
+ HistoricalNotification n = getHistoricalNotification(0);
+ HistoricalNotification n2 = getHistoricalNotification(1);
+
+ history.addNotificationToWrite(n2);
+ history.addNotificationToWrite(n);
+
+ assertThat(history.getNotificationsToWrite().size()).isEqualTo(2);
+ assertThat(history.getNotificationsToWrite().get(0)).isSameAs(n2);
+ assertThat(history.getNotificationsToWrite().get(1)).isSameAs(n);
+ assertThat(history.getHistoryCount()).isEqualTo(2);
+ }
+
+ @Test
+ public void testPoolStringsFromNotifications() {
+ NotificationHistory history = new NotificationHistory();
+
+ List<String> expectedStrings = new ArrayList<>();
+ for (int i = 1; i <= 10; i++) {
+ HistoricalNotification n = getHistoricalNotification(i);
+ expectedStrings.add(n.getPackage());
+ expectedStrings.add(n.getChannelName());
+ expectedStrings.add(n.getChannelId());
+ history.addNotificationToWrite(n);
+ }
+
+ history.poolStringsFromNotifications();
+
+ assertThat(history.getPooledStringsToWrite().length).isEqualTo(expectedStrings.size());
+ String previous = null;
+ for (String actual : history.getPooledStringsToWrite()) {
+ assertThat(expectedStrings).contains(actual);
+
+ if (previous != null) {
+ assertThat(actual).isGreaterThan(previous);
+ }
+ previous = actual;
+ }
+ }
+
+ @Test
+ public void testAddPooledStrings() {
+ NotificationHistory history = new NotificationHistory();
+
+ List<String> expectedStrings = new ArrayList<>();
+ for (int i = 1; i <= 10; i++) {
+ HistoricalNotification n = getHistoricalNotification(i);
+ expectedStrings.add(n.getPackage());
+ expectedStrings.add(n.getChannelName());
+ expectedStrings.add(n.getChannelId());
+ history.addNotificationToWrite(n);
+ }
+
+ history.addPooledStrings(expectedStrings);
+
+ String[] actualStrings = history.getPooledStringsToWrite();
+ assertThat(actualStrings.length).isEqualTo(expectedStrings.size());
+ String previous = null;
+ for (String actual : actualStrings) {
+ assertThat(expectedStrings).contains(actual);
+
+ if (previous != null) {
+ assertThat(actual).isGreaterThan(previous);
+ }
+ previous = actual;
+ }
+ }
+
+ @Test
+ public void testRemoveNotificationsFromWrite() {
+ NotificationHistory history = new NotificationHistory();
+
+ List<HistoricalNotification> postRemoveExpectedEntries = new ArrayList<>();
+ List<String> postRemoveExpectedStrings = new ArrayList<>();
+ for (int i = 1; i <= 10; i++) {
+ HistoricalNotification n =
+ getHistoricalNotification((i % 2 == 0) ? "pkgEven" : "pkgOdd", i);
+
+ if (i % 2 == 0) {
+ postRemoveExpectedStrings.add(n.getPackage());
+ postRemoveExpectedStrings.add(n.getChannelName());
+ postRemoveExpectedStrings.add(n.getChannelId());
+ postRemoveExpectedEntries.add(n);
+ }
+
+ history.addNotificationToWrite(n);
+ }
+
+ history.poolStringsFromNotifications();
+
+ assertThat(history.getNotificationsToWrite().size()).isEqualTo(10);
+ // 2 package names and 10 * 2 unique channel names and ids
+ assertThat(history.getPooledStringsToWrite().length).isEqualTo(22);
+
+ history.removeNotificationsFromWrite("pkgOdd");
+
+
+ // 1 package names and 5 * 2 unique channel names and ids
+ assertThat(history.getPooledStringsToWrite().length).isEqualTo(11);
+ assertThat(history.getNotificationsToWrite())
+ .containsExactlyElementsIn(postRemoveExpectedEntries);
+ }
+
+ @Test
+ public void testParceling() {
+ NotificationHistory history = new NotificationHistory();
+
+ List<HistoricalNotification> expectedEntries = new ArrayList<>();
+ for (int i = 10; i >= 1; i--) {
+ HistoricalNotification n = getHistoricalNotification(i);
+ expectedEntries.add(n);
+ history.addNotificationToWrite(n);
+ }
+ history.poolStringsFromNotifications();
+
+ Parcel parcel = Parcel.obtain();
+ history.writeToParcel(parcel, 0);
+ parcel.setDataPosition(0);
+ NotificationHistory parceledHistory = NotificationHistory.CREATOR.createFromParcel(parcel);
+
+ assertThat(parceledHistory.getHistoryCount()).isEqualTo(expectedEntries.size());
+
+ for (int i = 0; i < expectedEntries.size(); i++) {
+ assertThat(parceledHistory.hasNextNotification()).isTrue();
+
+ HistoricalNotification postParcelNotification = parceledHistory.getNextNotification();
+ assertThat(postParcelNotification).isEqualTo(expectedEntries.get(i));
+ }
+ }
+}
diff --git a/core/tests/coretests/src/android/provider/DeviceConfigTest.java b/core/tests/coretests/src/android/provider/DeviceConfigTest.java
index 77b7f2a..1f2dfe0 100644
--- a/core/tests/coretests/src/android/provider/DeviceConfigTest.java
+++ b/core/tests/coretests/src/android/provider/DeviceConfigTest.java
@@ -16,12 +16,10 @@
package android.provider;
-import static android.provider.DeviceConfig.OnPropertiesChangedListener;
import static android.provider.DeviceConfig.Properties;
import static com.google.common.truth.Truth.assertThat;
-import android.app.ActivityThread;
import android.content.ContentResolver;
import android.os.Bundle;
import android.platform.test.annotations.Presubmit;
@@ -35,9 +33,6 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
/** Tests that ensure appropriate settings are backed up. */
@Presubmit
@RunWith(AndroidJUnit4.class)
@@ -482,29 +477,30 @@
assertThat(properties.getString(KEY3, DEFAULT_VALUE)).isEqualTo(DEFAULT_VALUE);
}
- @Test
- public void testOnPropertiesChangedListener() throws InterruptedException {
- final CountDownLatch countDownLatch = new CountDownLatch(1);
-
- OnPropertiesChangedListener changeListener = (properties) -> {
- assertThat(properties.getNamespace()).isEqualTo(NAMESPACE);
- assertThat(properties.getKeyset()).contains(KEY);
- assertThat(properties.getString(KEY, "default_value")).isEqualTo(VALUE);
- countDownLatch.countDown();
- };
-
- try {
- DeviceConfig.addOnPropertiesChangedListener(NAMESPACE,
- ActivityThread.currentApplication().getMainExecutor(), changeListener);
- DeviceConfig.setProperty(NAMESPACE, KEY, VALUE, false);
- assertThat(countDownLatch.await(
- WAIT_FOR_PROPERTY_CHANGE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue();
- } catch (InterruptedException e) {
- Assert.fail(e.getMessage());
- } finally {
- DeviceConfig.removeOnPropertiesChangedListener(changeListener);
- }
- }
+ // TODO(mpape): resolve b/142727848 and re-enable this test
+// @Test
+// public void testOnPropertiesChangedListener() throws InterruptedException {
+// final CountDownLatch countDownLatch = new CountDownLatch(1);
+//
+// OnPropertiesChangedListener changeListener = (properties) -> {
+// assertThat(properties.getNamespace()).isEqualTo(NAMESPACE);
+// assertThat(properties.getKeyset()).contains(KEY);
+// assertThat(properties.getString(KEY, "default_value")).isEqualTo(VALUE);
+// countDownLatch.countDown();
+// };
+//
+// try {
+// DeviceConfig.addOnPropertiesChangedListener(NAMESPACE,
+// ActivityThread.currentApplication().getMainExecutor(), changeListener);
+// DeviceConfig.setProperty(NAMESPACE, KEY, VALUE, false);
+// assertThat(countDownLatch.await(
+// WAIT_FOR_PROPERTY_CHANGE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue();
+// } catch (InterruptedException e) {
+// Assert.fail(e.getMessage());
+// } finally {
+// DeviceConfig.removeOnPropertiesChangedListener(changeListener);
+// }
+// }
private static boolean deleteViaContentProvider(String namespace, String key) {
ContentResolver resolver = InstrumentationRegistry.getContext().getContentResolver();
diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java
index 254456c..538319c 100644
--- a/keystore/java/android/security/KeyChain.java
+++ b/keystore/java/android/security/KeyChain.java
@@ -763,28 +763,33 @@
* @see KeyChain#bind
*/
public static class KeyChainConnection implements Closeable {
- private final Context context;
- private final ServiceConnection serviceConnection;
- private final IKeyChainService service;
+ private final Context mContext;
+ private final ServiceConnection mServiceConnection;
+ private final IKeyChainService mService;
protected KeyChainConnection(Context context,
ServiceConnection serviceConnection,
IKeyChainService service) {
- this.context = context;
- this.serviceConnection = serviceConnection;
- this.service = service;
+ this.mContext = context;
+ this.mServiceConnection = serviceConnection;
+ this.mService = service;
}
@Override public void close() {
- context.unbindService(serviceConnection);
+ mContext.unbindService(mServiceConnection);
}
+
+ /** returns the service binder. */
public IKeyChainService getService() {
- return service;
+ return mService;
}
}
/**
- * @hide for reuse by CertInstaller and Settings.
- *
+ * Bind to KeyChainService in the current user.
* Caller should call unbindService on the result when finished.
+ *
+ *@throws InterruptedException if interrupted during binding.
+ *@throws AssertionError if unable to bind to KeyChainService.
+ * @hide for reuse by CertInstaller and Settings.
*/
@WorkerThread
public static KeyChainConnection bind(@NonNull Context context) throws InterruptedException {
@@ -792,6 +797,11 @@
}
/**
+ * Bind to KeyChainService in the target user.
+ * Caller should call unbindService on the result when finished.
+ *
+ * @throws InterruptedException if interrupted during binding.
+ * @throws AssertionError if unable to bind to KeyChainService.
* @hide
*/
@WorkerThread
@@ -814,6 +824,16 @@
}
}
}
+ @Override public void onBindingDied(ComponentName name) {
+ if (!mConnectedAtLeastOnce) {
+ mConnectedAtLeastOnce = true;
+ try {
+ q.put(null);
+ } catch (InterruptedException e) {
+ // will never happen, since the queue starts with one available slot
+ }
+ }
+ }
@Override public void onServiceDisconnected(ComponentName name) {}
};
Intent intent = new Intent(IKeyChainService.class.getName());
@@ -823,7 +843,13 @@
intent, keyChainServiceConnection, Context.BIND_AUTO_CREATE, user)) {
throw new AssertionError("could not bind to KeyChainService");
}
- return new KeyChainConnection(context, keyChainServiceConnection, q.take());
+ IKeyChainService service = q.take();
+ if (service != null) {
+ return new KeyChainConnection(context, keyChainServiceConnection, service);
+ } else {
+ context.unbindService(keyChainServiceConnection);
+ throw new AssertionError("KeyChainService died while binding");
+ }
}
private static void ensureNotOnMainThread(@NonNull Context context) {
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index b41bdf6..e5c502c 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -564,8 +564,8 @@
ReliableSurface* surface = mNativeSurface.get();
if (surface) {
SkISize size;
- surface->query(NATIVE_WINDOW_WIDTH, &size.fWidth);
- surface->query(NATIVE_WINDOW_HEIGHT, &size.fHeight);
+ size.fWidth = ANativeWindow_getWidth(surface);
+ size.fHeight = ANativeWindow_getHeight(surface);
return size;
}
return {INT32_MAX, INT32_MAX};
diff --git a/libs/hwui/tests/unit/SkiaDisplayListTests.cpp b/libs/hwui/tests/unit/SkiaDisplayListTests.cpp
index 6fb164a..7d999c4 100644
--- a/libs/hwui/tests/unit/SkiaDisplayListTests.cpp
+++ b/libs/hwui/tests/unit/SkiaDisplayListTests.cpp
@@ -208,9 +208,8 @@
test::TestContext testContext;
testContext.setRenderOffscreen(true);
auto surface = testContext.surface();
- int width, height;
- surface->query(NATIVE_WINDOW_WIDTH, &width);
- surface->query(NATIVE_WINDOW_HEIGHT, &height);
+ int width = ANativeWindow_getWidth(surface.get());
+ int height = ANativeWindow_getHeight(surface.get());
canvasContext->setSurface(std::move(surface));
TreeInfo info(TreeInfo::MODE_FULL, *canvasContext.get());
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index 33ddfa7..d6a4ea7 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -39,6 +39,7 @@
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.EOFException;
@@ -68,6 +69,7 @@
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.zip.CRC32;
/**
* This is a class for reading and writing Exif tags in a JPEG file or a RAW image file.
@@ -502,11 +504,22 @@
// 3.7. eXIf Exchangeable Image File (Exif) Profile
private static final byte[] PNG_CHUNK_TYPE_EXIF = new byte[]{(byte) 0x65, (byte) 0x58,
(byte) 0x49, (byte) 0x66};
+ private static final byte[] PNG_CHUNK_TYPE_IHDR = new byte[]{(byte) 0x49, (byte) 0x48,
+ (byte) 0x44, (byte) 0x52};
private static final byte[] PNG_CHUNK_TYPE_IEND = new byte[]{(byte) 0x49, (byte) 0x45,
(byte) 0x4e, (byte) 0x44};
- private static final int PNG_CHUNK_LENGTH_BYTE_LENGTH = 4;
+ private static final int PNG_CHUNK_TYPE_BYTE_LENGTH = 4;
private static final int PNG_CHUNK_CRC_BYTE_LENGTH = 4;
+ // See https://developers.google.com/speed/webp/docs/riff_container, Section "WebP File Header"
+ private static final byte[] WEBP_SIGNATURE_1 = new byte[] {'R', 'I', 'F', 'F'};
+ private static final byte[] WEBP_SIGNATURE_2 = new byte[] {'W', 'E', 'B', 'P'};
+ private static final int WEBP_FILE_SIZE_BYTE_LENGTH = 4;
+ private static final byte[] WEBP_CHUNK_TYPE_EXIF = new byte[]{(byte) 0x45, (byte) 0x58,
+ (byte) 0x49, (byte) 0x46};
+ private static final int WEBP_CHUNK_TYPE_BYTE_LENGTH = 4;
+ private static final int WEBP_CHUNK_SIZE_BYTE_LENGTH = 4;
+
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private static SimpleDateFormat sFormatter;
private static SimpleDateFormat sFormatterTz;
@@ -1325,6 +1338,7 @@
private static final int IMAGE_TYPE_SRW = 11;
private static final int IMAGE_TYPE_HEIF = 12;
private static final int IMAGE_TYPE_PNG = 13;
+ private static final int IMAGE_TYPE_WEBP = 14;
static {
sFormatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
@@ -1869,6 +1883,10 @@
getPngAttributes(inputStream);
break;
}
+ case IMAGE_TYPE_WEBP: {
+ getWebpAttributes(inputStream);
+ break;
+ }
case IMAGE_TYPE_ARW:
case IMAGE_TYPE_CR2:
case IMAGE_TYPE_DNG:
@@ -1934,7 +1952,7 @@
* {@link #setAttribute(String,String)} to set all attributes to write and
* make a single call rather than multiple calls for each attribute.
* <p>
- * This method is only supported for JPEG files.
+ * This method is only supported for JPEG and PNG files.
* <p class="note">
* Note: after calling this method, any attempts to obtain range information
* from {@link #getAttributeRange(String)} or {@link #getThumbnailRange()}
@@ -1943,8 +1961,9 @@
* </p>
*/
public void saveAttributes() throws IOException {
- if (!mIsSupportedFile || mMimeType != IMAGE_TYPE_JPEG) {
- throw new IOException("ExifInterface only supports saving attributes on JPEG formats.");
+ if (!mIsSupportedFile || (mMimeType != IMAGE_TYPE_JPEG && mMimeType != IMAGE_TYPE_PNG)) {
+ throw new IOException("ExifInterface only supports saving attributes on JPEG or PNG "
+ + "formats.");
}
if (mIsInputStream || (mSeekableFileDescriptor == null && mFilename == null)) {
throw new IOException(
@@ -1973,7 +1992,11 @@
throw new IOException("Couldn't rename to " + tempFile.getAbsolutePath());
}
} else if (mSeekableFileDescriptor != null) {
- tempFile = File.createTempFile("temp", "jpg");
+ if (mMimeType == IMAGE_TYPE_JPEG) {
+ tempFile = File.createTempFile("temp", "jpg");
+ } else if (mMimeType == IMAGE_TYPE_PNG) {
+ tempFile = File.createTempFile("temp", "png");
+ }
Os.lseek(mSeekableFileDescriptor, 0, OsConstants.SEEK_SET);
in = new FileInputStream(mSeekableFileDescriptor);
out = new FileOutputStream(tempFile);
@@ -1999,7 +2022,11 @@
}
try (BufferedInputStream bufferedIn = new BufferedInputStream(in);
BufferedOutputStream bufferedOut = new BufferedOutputStream(out)) {
- saveJpegAttributes(bufferedIn, bufferedOut);
+ if (mMimeType == IMAGE_TYPE_JPEG) {
+ saveJpegAttributes(bufferedIn, bufferedOut);
+ } else if (mMimeType == IMAGE_TYPE_PNG) {
+ savePngAttributes(bufferedIn, bufferedOut);
+ }
}
} catch (Exception e) {
if (mFilename != null) {
@@ -2431,6 +2458,8 @@
return IMAGE_TYPE_RW2;
} else if (isPngFormat(signatureCheckBytes)) {
return IMAGE_TYPE_PNG;
+ } else if (isWebpFormat(signatureCheckBytes)) {
+ return IMAGE_TYPE_WEBP;
}
// Certain file formats (PEF) are identified in readImageFileDirectory()
return IMAGE_TYPE_UNKNOWN;
@@ -2609,6 +2638,26 @@
return true;
}
+ /**
+ * WebP's file signature is composed of 12 bytes:
+ * 'RIFF' (4 bytes) + file length value (4 bytes) + 'WEBP' (4 bytes)
+ * See https://developers.google.com/speed/webp/docs/riff_container, Section "WebP File Header"
+ */
+ private boolean isWebpFormat(byte[] signatureCheckBytes) throws IOException {
+ for (int i = 0; i < WEBP_SIGNATURE_1.length; i++) {
+ if (signatureCheckBytes[i] != WEBP_SIGNATURE_1[i]) {
+ return false;
+ }
+ }
+ for (int i = 0; i < WEBP_SIGNATURE_2.length; i++) {
+ if (signatureCheckBytes[i + WEBP_SIGNATURE_1.length + WEBP_FILE_SIZE_BYTE_LENGTH]
+ != WEBP_SIGNATURE_2[i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
private static boolean isStandalone(InputStream inputStream) throws IOException {
byte[] signatureCheckBytes = new byte[IDENTIFIER_EXIF_APP1.length];
inputStream.read(signatureCheckBytes);
@@ -3146,30 +3195,36 @@
int bytesRead = 0;
// Skip the signature bytes
- in.seek(PNG_SIGNATURE.length);
+ in.skipBytes(PNG_SIGNATURE.length);
bytesRead += PNG_SIGNATURE.length;
+ // Each chunk is made up of four parts:
+ // 1) Length: 4-byte unsigned integer indicating the number of bytes in the
+ // Chunk Data field. Excludes Chunk Type and CRC bytes.
+ // 2) Chunk Type: 4-byte chunk type code.
+ // 3) Chunk Data: The data bytes. Can be zero-length.
+ // 4) CRC: 4-byte data calculated on the preceding bytes in the chunk. Always
+ // present.
+ // --> 4 (length bytes) + 4 (type bytes) + X (data bytes) + 4 (CRC bytes)
+ // See PNG (Portable Network Graphics) Specification, Version 1.2,
+ // 3.2. Chunk layout
try {
while (true) {
- // Each chunk is made up of four parts:
- // 1) Length: 4-byte unsigned integer indicating the number of bytes in the
- // Chunk Data field. Excludes Chunk Type and CRC bytes.
- // 2) Chunk Type: 4-byte chunk type code.
- // 3) Chunk Data: The data bytes. Can be zero-length.
- // 4) CRC: 4-byte data calculated on the preceding bytes in the chunk. Always
- // present.
- // --> 4 (length bytes) + 4 (type bytes) + X (data bytes) + 4 (CRC bytes)
- // See PNG (Portable Network Graphics) Specification, Version 1.2,
- // 3.2. Chunk layout
int length = in.readInt();
bytesRead += 4;
- byte[] type = new byte[PNG_CHUNK_LENGTH_BYTE_LENGTH];
+ byte[] type = new byte[PNG_CHUNK_TYPE_BYTE_LENGTH];
if (in.read(type) != type.length) {
throw new IOException("Encountered invalid length while parsing PNG chunk"
+ "type");
}
- bytesRead += PNG_CHUNK_LENGTH_BYTE_LENGTH;
+ bytesRead += PNG_CHUNK_TYPE_BYTE_LENGTH;
+
+ // The first chunk must be the IHDR chunk
+ if (bytesRead == 16 && !Arrays.equals(type, PNG_CHUNK_TYPE_IHDR)) {
+ throw new IOException("Encountered invalid PNG file--IHDR chunk should appear"
+ + "as the first chunk");
+ }
if (Arrays.equals(type, PNG_CHUNK_TYPE_IEND)) {
// IEND marks the end of the image.
@@ -3181,9 +3236,25 @@
throw new IOException("Failed to read given length for given PNG chunk "
+ "type: " + byteArrayToHexString(type));
}
+
+ // Compare CRC values for potential data corruption.
+ int dataCrcValue = in.readInt();
+ // Cyclic Redundancy Code used to check for corruption of the data
+ CRC32 crc = new CRC32();
+ crc.update(type);
+ crc.update(data);
+ if ((int) crc.getValue() != dataCrcValue) {
+ throw new IOException("Encountered invalid CRC value for PNG-EXIF chunk."
+ + "\n recorded CRC value: " + dataCrcValue + ", calculated CRC "
+ + "value: " + crc.getValue());
+ }
+
readExifSegment(data, IFD_TYPE_PRIMARY);
validateImages();
+
+ // Save offset values for handleThumbnailFromJfif() function
+ mExifOffset = bytesRead;
break;
} else {
// Skip to next chunk
@@ -3191,8 +3262,6 @@
bytesRead += length + PNG_CHUNK_CRC_BYTE_LENGTH;
}
}
- // Save offset values for handleThumbnailFromJfif() function
- mExifOffset = bytesRead;
} catch (EOFException e) {
// Should not reach here. Will only reach here if the file is corrupted or
// does not follow the PNG specifications
@@ -3200,6 +3269,75 @@
}
}
+ // WebP contains EXIF data as a RIFF File Format Chunk
+ // All references below can be found in the following link.
+ // https://developers.google.com/speed/webp/docs/riff_container
+ private void getWebpAttributes(ByteOrderedDataInputStream in) throws IOException {
+ if (DEBUG) {
+ Log.d(TAG, "getWebpAttributes starting with: " + in);
+ }
+ // WebP uses little-endian by default.
+ // See Section "Terminology & Basics"
+ in.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+ in.skipBytes(WEBP_SIGNATURE_1.length);
+ // File size corresponds to the size of the entire file from offset 8.
+ // See Section "WebP File Header"
+ int fileSize = in.readInt() + 8;
+ int bytesRead = 8;
+ bytesRead += in.skipBytes(WEBP_SIGNATURE_2.length);
+ try {
+ while (true) {
+ // Each chunk is made up of three parts:
+ // 1) Chunk FourCC: 4-byte concatenating four ASCII characters.
+ // 2) Chunk Size: 4-byte unsigned integer indicating the size of the chunk.
+ // Excludes Chunk FourCC and Chunk Size bytes.
+ // 3) Chunk Payload: data payload. A single padding byte ('0') is added if
+ // Chunk Size is odd.
+ // See Section "RIFF File Format"
+ byte[] code = new byte[WEBP_CHUNK_TYPE_BYTE_LENGTH];
+ if (in.read(code) != code.length) {
+ throw new IOException("Encountered invalid length while parsing WebP chunk"
+ + "type");
+ }
+ bytesRead += 4;
+ int chunkSize = in.readInt();
+ bytesRead += 4;
+ if (Arrays.equals(WEBP_CHUNK_TYPE_EXIF, code)) {
+ // TODO: Need to handle potential OutOfMemoryError
+ byte[] payload = new byte[chunkSize];
+ if (in.read(payload) != chunkSize) {
+ throw new IOException("Failed to read given length for given PNG chunk "
+ + "type: " + byteArrayToHexString(code));
+ }
+ readExifSegment(payload, IFD_TYPE_PRIMARY);
+ break;
+ } else {
+ // Add a single padding byte at end if chunk size is odd
+ chunkSize = (chunkSize % 2 == 1) ? chunkSize + 1 : chunkSize;
+ // Check if skipping to next chunk is necessary
+ if (bytesRead + chunkSize == fileSize) {
+ // Reached end of file
+ break;
+ } else if (bytesRead + chunkSize > fileSize) {
+ throw new IOException("Encountered WebP file with invalid chunk size");
+ }
+ // Skip to next chunk
+ int skipped = in.skipBytes(chunkSize);
+ if (skipped != chunkSize) {
+ throw new IOException("Encountered WebP file with invalid chunk size");
+ }
+ bytesRead += skipped;
+ }
+ }
+ // Save offset values for handleThumbnailFromJfif() function
+ mExifOffset = bytesRead;
+ } catch (EOFException e) {
+ // Should not reach here. Will only reach here if the file is corrupted or
+ // does not follow the WebP specifications
+ throw new IOException("Encountered corrupt WebP file.");
+ }
+ }
+
// Stores a new JPEG image with EXIF attributes into a given output stream.
private void saveJpegAttributes(InputStream inputStream, OutputStream outputStream)
throws IOException {
@@ -3298,6 +3436,62 @@
}
}
+ private void savePngAttributes(InputStream inputStream, OutputStream outputStream)
+ throws IOException {
+ if (DEBUG) {
+ Log.d(TAG, "savePngAttributes starting with (inputStream: " + inputStream
+ + ", outputStream: " + outputStream + ")");
+ }
+ DataInputStream dataInputStream = new DataInputStream(inputStream);
+ ByteOrderedDataOutputStream dataOutputStream =
+ new ByteOrderedDataOutputStream(outputStream, ByteOrder.BIG_ENDIAN);
+ // Copy PNG signature bytes
+ copy(dataInputStream, dataOutputStream, PNG_SIGNATURE.length);
+ // EXIF chunk can appear anywhere between the first (IHDR) and last (IEND) chunks, except
+ // between IDAT chunks.
+ // Adhering to these rules,
+ // 1) if EXIF chunk did not exist in the original file, it will be stored right after the
+ // first chunk,
+ // 2) if EXIF chunk existed in the original file, it will be stored in the same location.
+ if (mExifOffset == 0) {
+ // Copy IHDR chunk bytes
+ int ihdrChunkLength = dataInputStream.readInt();
+ dataOutputStream.writeInt(ihdrChunkLength);
+ copy(dataInputStream, dataOutputStream, PNG_CHUNK_TYPE_BYTE_LENGTH
+ + ihdrChunkLength + PNG_CHUNK_CRC_BYTE_LENGTH);
+ } else {
+ // Copy up until the point where EXIF chunk length information is stored.
+ int copyLength = mExifOffset - PNG_SIGNATURE.length
+ - 4 /* PNG EXIF chunk length bytes */
+ - PNG_CHUNK_TYPE_BYTE_LENGTH;
+ copy(dataInputStream, dataOutputStream, copyLength);
+ // Skip to the start of the chunk after the EXIF chunk
+ int exifChunkLength = dataInputStream.readInt();
+ dataInputStream.skipBytes(PNG_CHUNK_TYPE_BYTE_LENGTH + exifChunkLength
+ + PNG_CHUNK_CRC_BYTE_LENGTH);
+ }
+ // Write EXIF data
+ try (ByteArrayOutputStream exifByteArrayOutputStream = new ByteArrayOutputStream()) {
+ // A byte array is needed to calculate the CRC value of this chunk which requires
+ // the chunk type bytes and the chunk data bytes.
+ ByteOrderedDataOutputStream exifDataOutputStream =
+ new ByteOrderedDataOutputStream(exifByteArrayOutputStream,
+ ByteOrder.BIG_ENDIAN);
+ // Store Exif data in separate byte array
+ writeExifSegment(exifDataOutputStream, 0);
+ byte[] exifBytes =
+ ((ByteArrayOutputStream) exifDataOutputStream.mOutputStream).toByteArray();
+ // Write EXIF chunk data
+ dataOutputStream.write(exifBytes);
+ // Write EXIF chunk CRC
+ CRC32 crc = new CRC32();
+ crc.update(exifBytes, 4 /* skip length bytes */, exifBytes.length - 4);
+ dataOutputStream.writeInt((int) crc.getValue());
+ }
+ // Copy the rest of the file
+ Streams.copy(dataInputStream, dataOutputStream);
+ }
+
// Reads the given EXIF byte area and save its tag data into attributes.
private void readExifSegment(byte[] exifBytes, int imageType) throws IOException {
ByteOrderedDataInputStream dataInputStream =
@@ -3684,12 +3878,18 @@
int thumbnailOffset = jpegInterchangeFormatAttribute.getIntValue(mExifByteOrder);
int thumbnailLength = jpegInterchangeFormatLengthAttribute.getIntValue(mExifByteOrder);
- if (mMimeType == IMAGE_TYPE_JPEG || mMimeType == IMAGE_TYPE_RAF
- || mMimeType == IMAGE_TYPE_RW2 || mMimeType == IMAGE_TYPE_PNG) {
- thumbnailOffset += mExifOffset;
- } else if (mMimeType == IMAGE_TYPE_ORF) {
- // Update offset value since RAF files have IFD data preceding MakerNote data.
- thumbnailOffset += mOrfMakerNoteOffset;
+ switch (mMimeType) {
+ case IMAGE_TYPE_JPEG:
+ case IMAGE_TYPE_RAF:
+ case IMAGE_TYPE_RW2:
+ case IMAGE_TYPE_PNG:
+ case IMAGE_TYPE_WEBP:
+ thumbnailOffset += mExifOffset;
+ break;
+ case IMAGE_TYPE_ORF:
+ // Update offset value since RAF files have IFD data preceding MakerNote data.
+ thumbnailOffset += mOrfMakerNoteOffset;
+ break;
}
// The following code limits the size of thumbnail size not to overflow EXIF data area.
thumbnailLength = Math.min(thumbnailLength, in.getLength() - thumbnailOffset);
@@ -3991,7 +4191,7 @@
}
// Calculate IFD offsets.
- int position = 8;
+ int position = 8; // 8 bytes are for TIFF headers
for (int ifdType = 0; ifdType < EXIF_TAGS.length; ++ifdType) {
if (!mAttributes[ifdType].isEmpty()) {
ifdOffsets[ifdType] = position;
@@ -4006,13 +4206,16 @@
position += mThumbnailLength;
}
- // Calculate the total size
- int totalSize = position + 8; // eight bytes is for header part.
+ int totalSize = position;
+ if (mMimeType == IMAGE_TYPE_JPEG) {
+ // Add 8 bytes for APP1 size and identifier data
+ totalSize += 8;
+ }
if (DEBUG) {
- Log.d(TAG, "totalSize length: " + totalSize);
for (int i = 0; i < EXIF_TAGS.length; ++i) {
- Log.d(TAG, String.format("index: %d, offsets: %d, tag count: %d, data sizes: %d",
- i, ifdOffsets[i], mAttributes[i].size(), ifdDataSizes[i]));
+ Log.d(TAG, String.format("index: %d, offsets: %d, tag count: %d, data sizes: %d, "
+ + "total size: %d", i, ifdOffsets[i], mAttributes[i].size(),
+ ifdDataSizes[i], totalSize));
}
}
@@ -4030,9 +4233,17 @@
ifdOffsets[IFD_TYPE_INTEROPERABILITY], mExifByteOrder));
}
+ if (mMimeType == IMAGE_TYPE_JPEG) {
+ // Write JPEG specific data (APP1 size, APP1 identifier)
+ dataOutputStream.writeUnsignedShort(totalSize);
+ dataOutputStream.write(IDENTIFIER_EXIF_APP1);
+ } else if (mMimeType == IMAGE_TYPE_PNG) {
+ // Write PNG specific data (chunk size, chunk type)
+ dataOutputStream.writeInt(totalSize);
+ dataOutputStream.write(PNG_CHUNK_TYPE_EXIF);
+ }
+
// Write TIFF Headers. See JEITA CP-3451C Section 4.5.2. Table 1.
- dataOutputStream.writeUnsignedShort(totalSize);
- dataOutputStream.write(IDENTIFIER_EXIF_APP1);
dataOutputStream.writeShort(mExifByteOrder == ByteOrder.BIG_ENDIAN
? BYTE_ALIGN_MM : BYTE_ALIGN_II);
dataOutputStream.setByteOrder(mExifByteOrder);
@@ -4108,7 +4319,7 @@
* Determines the data format of EXIF entry value.
*
* @param entryValue The value to be determined.
- * @return Returns two data formats gussed as a pair in integer. If there is no two candidate
+ * @return Returns two data formats guessed as a pair in integer. If there is no two candidate
data formats for the given entry value, returns {@code -1} in the second of the pair.
*/
private static Pair<Integer, Integer> guessDataFormat(String entryValue) {
@@ -4430,7 +4641,7 @@
// An output stream to write EXIF data area, which can be written in either little or big endian
// order.
private static class ByteOrderedDataOutputStream extends FilterOutputStream {
- private final OutputStream mOutputStream;
+ final OutputStream mOutputStream;
private ByteOrder mByteOrder;
public ByteOrderedDataOutputStream(OutputStream out, ByteOrder byteOrder) {
@@ -4546,6 +4757,25 @@
}
/**
+ * Copies the given number of the bytes from {@code in} to {@code out}. Neither stream is
+ * closed.
+ */
+ private static void copy(InputStream in, OutputStream out, int numBytes) throws IOException {
+ int remainder = numBytes;
+ byte[] buffer = new byte[8192];
+ while (remainder > 0) {
+ int bytesToRead = Math.min(remainder, 8192);
+ int bytesRead = in.read(buffer, 0, bytesToRead);
+ if (bytesRead != bytesToRead) {
+ throw new IOException("Failed to copy the given amount of bytes from the input"
+ + "stream to the output stream.");
+ }
+ remainder -= bytesRead;
+ out.write(buffer, 0, bytesRead);
+ }
+ }
+
+ /**
* Convert given int[] to long[]. If long[] is given, just return it.
* Return null for other types of input.
*/
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index bf7da23..9723652 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -337,9 +337,14 @@
/**
* Audio source for capturing broadcast radio tuner output.
+ * Capturing the radio tuner output requires the
+ * {@link android.Manifest.permission#CAPTURE_AUDIO_OUTPUT} permission.
+ * This permission is reserved for use by system components and is not available to
+ * third-party applications.
* @hide
*/
@SystemApi
+ @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT)
public static final int RADIO_TUNER = 1998;
/**
diff --git a/media/jni/audioeffect/Visualizer.h b/media/jni/audioeffect/Visualizer.h
index 8078e36..d4672a9 100644
--- a/media/jni/audioeffect/Visualizer.h
+++ b/media/jni/audioeffect/Visualizer.h
@@ -73,7 +73,8 @@
~Visualizer();
- virtual status_t setEnabled(bool enabled);
+ // Declared 'final' because we call this in ~Visualizer().
+ status_t setEnabled(bool enabled) final;
// maximum capture size in samples
static uint32_t getMaxCaptureSize() { return VISUALIZER_CAPTURE_SIZE_MAX; }
diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
index aebb62d..faf6ee4 100644
--- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
+++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
@@ -137,12 +137,14 @@
import javax.inject.Inject;
import javax.inject.Named;
+import javax.inject.Singleton;
import dagger.Lazy;
/**
* A status bar tailored for the automotive use case.
*/
+@Singleton
public class CarStatusBar extends StatusBar implements CarBatteryController.BatteryViewHandler {
private static final String TAG = "CarStatusBar";
// used to calculate how fast to open or close the window
diff --git a/packages/CtsShim/Android.bp b/packages/CtsShim/Android.bp
new file mode 100644
index 0000000..7728464
--- /dev/null
+++ b/packages/CtsShim/Android.bp
@@ -0,0 +1,74 @@
+//
+// Copyright (C) 2016 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.
+//
+
+//##########################################################
+// Variant: Privileged app
+
+android_app_import {
+ name: "CtsShimPrivPrebuilt",
+
+ // this needs to be a privileged application
+ privileged: true,
+
+ // Make sure the build system doesn't try to resign the APK
+ dex_preopt: {
+ enabled: false,
+ },
+
+ arch: {
+ arm: {
+ apk: "apk/arm/CtsShimPriv.apk",
+ },
+ arm64: {
+ apk: "apk/arm/CtsShimPriv.apk",
+ },
+ x86: {
+ apk: "apk/x86/CtsShimPriv.apk",
+ },
+ x86_64: {
+ apk: "apk/x86/CtsShimPriv.apk",
+ },
+ },
+ presigned: true,
+}
+
+//##########################################################
+// Variant: System app
+
+android_app_import {
+ name: "CtsShimPrebuilt",
+
+ // Make sure the build system doesn't try to resign the APK
+ dex_preopt: {
+ enabled: false,
+ },
+
+ arch: {
+ arm: {
+ apk: "apk/arm/CtsShim.apk",
+ },
+ arm64: {
+ apk: "apk/arm/CtsShim.apk",
+ },
+ x86: {
+ apk: "apk/x86/CtsShim.apk",
+ },
+ x86_64: {
+ apk: "apk/x86/CtsShim.apk",
+ },
+ },
+ presigned: true,
+}
diff --git a/packages/CtsShim/Android.mk b/packages/CtsShim/Android.mk
deleted file mode 100644
index 12972f1..0000000
--- a/packages/CtsShim/Android.mk
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright (C) 2016 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-###########################################################
-# Variant: Privileged app
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := CtsShimPrivPrebuilt
-LOCAL_MODULE_TAGS := optional
-# this needs to be a privileged application
-LOCAL_PRIVILEGED_MODULE := true
-LOCAL_MODULE_CLASS := APPS
-LOCAL_BUILT_MODULE_STEM := package.apk
-# Make sure the build system doesn't try to resign the APK
-LOCAL_CERTIFICATE := PRESIGNED
-LOCAL_DEX_PREOPT := false
-LOCAL_MODULE_TARGET_ARCH := arm arm64 x86 x86_64
-
-LOCAL_SRC_FILES_arm := apk/arm/CtsShimPriv.apk
-LOCAL_SRC_FILES_arm64 := apk/arm/CtsShimPriv.apk
-LOCAL_SRC_FILES_x86 := apk/x86/CtsShimPriv.apk
-LOCAL_SRC_FILES_x86_64 := apk/x86/CtsShimPriv.apk
-
-include $(BUILD_PREBUILT)
-
-
-###########################################################
-# Variant: System app
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := CtsShimPrebuilt
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := APPS
-LOCAL_BUILT_MODULE_STEM := package.apk
-# Make sure the build system doesn't try to resign the APK
-LOCAL_CERTIFICATE := PRESIGNED
-LOCAL_DEX_PREOPT := false
-LOCAL_MODULE_TARGET_ARCH := arm arm64 x86 x86_64
-
-LOCAL_SRC_FILES_arm := apk/arm/CtsShim.apk
-LOCAL_SRC_FILES_arm64 := apk/arm/CtsShim.apk
-LOCAL_SRC_FILES_x86 := apk/x86/CtsShim.apk
-LOCAL_SRC_FILES_x86_64 := apk/x86/CtsShim.apk
-
-include $(BUILD_PREBUILT)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/packages/CtsShim/build/Android.bp b/packages/CtsShim/build/Android.bp
new file mode 100644
index 0000000..ede1fab
--- /dev/null
+++ b/packages/CtsShim/build/Android.bp
@@ -0,0 +1,117 @@
+// Copyright (C) 2019 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.
+
+// Build rules to build shim apks.
+
+//##########################################################
+// Variant: Privileged app upgrade
+
+android_app {
+ name: "CtsShimPrivUpgrade",
+ // this needs to be a privileged application
+ privileged: true,
+
+ sdk_version: "current",
+ optimize: {
+ enabled: false,
+ },
+ dex_preopt: {
+ enabled: false,
+ },
+
+ manifest: "shim_priv_upgrade/AndroidManifest.xml",
+
+ compile_multilib: "both",
+ jni_libs: ["libshim_jni"],
+}
+
+genrule {
+ name: "generate_priv_manifest",
+ srcs: [
+ "shim_priv/AndroidManifest.xml",
+ ":CtsShimPrivUpgrade"
+ ],
+ out: ["AndroidManifest.xml"],
+ cmd: "sed -e s/__HASH__/`sha512sum -b $(location :CtsShimPrivUpgrade) | cut -d' ' -f1`/ $(location shim_priv/AndroidManifest.xml) > $(out)",
+}
+
+//##########################################################
+// Variant: Privileged app
+
+android_app {
+ name: "CtsShimPriv",
+ // this needs to be a privileged application
+ privileged: true,
+
+ sdk_version: "current",
+ optimize: {
+ enabled: false,
+ },
+ dex_preopt: {
+ enabled: false,
+ },
+
+ manifest: ":generate_priv_manifest",
+
+ compile_multilib: "both",
+ jni_libs: ["libshim_jni"],
+ // Explicitly uncompress native libs rather than letting the build system doing it and destroy the
+ // v2/v3 signature.
+ use_embedded_native_libs: true,
+}
+
+//##########################################################
+// Variant: Privileged app upgrade w/ the wrong SHA
+
+android_app {
+ name: "CtsShimPrivUpgradeWrongSHA",
+ // this needs to be a privileged application
+ privileged: true,
+
+ sdk_version: "current",
+ optimize: {
+ enabled: false,
+ },
+ dex_preopt: {
+ enabled: false,
+ },
+ // anything to make this package's SHA different from CtsShimPrivUpgrade
+ aaptflags: [
+ "--version-name",
+ "WrongSHA",
+ ],
+
+ manifest: "shim_priv_upgrade/AndroidManifest.xml",
+
+ compile_multilib: "both",
+ jni_libs: ["libshim_jni"],
+
+}
+
+//##########################################################
+// Variant: System app
+
+android_app {
+ name: "CtsShim",
+
+ sdk_version: "current",
+ optimize: {
+ enabled: false,
+ },
+ dex_preopt: {
+ enabled: false,
+ },
+
+ manifest: "shim/AndroidManifest.xml",
+}
diff --git a/packages/CtsShim/build/Android.mk b/packages/CtsShim/build/Android.mk
deleted file mode 100644
index 0ef4654..0000000
--- a/packages/CtsShim/build/Android.mk
+++ /dev/null
@@ -1,119 +0,0 @@
-#
-# Copyright (C) 2016 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.
-#
-
-LOCAL_PATH := $(my-dir)
-
-###########################################################
-# Variant: Privileged app upgrade
-
-include $(CLEAR_VARS)
-# this needs to be a privileged application
-LOCAL_PRIVILEGED_MODULE := true
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_SDK_VERSION := current
-LOCAL_PROGUARD_ENABLED := disabled
-LOCAL_DEX_PREOPT := false
-
-LOCAL_PACKAGE_NAME := CtsShimPrivUpgrade
-
-LOCAL_MANIFEST_FILE := shim_priv_upgrade/AndroidManifest.xml
-
-LOCAL_MULTILIB := both
-LOCAL_JNI_SHARED_LIBRARIES := libshim_jni
-
-include $(BUILD_PACKAGE)
-my_shim_priv_upgrade_apk := $(LOCAL_BUILT_MODULE)
-
-###########################################################
-# Variant: Privileged app
-
-include $(CLEAR_VARS)
-# this needs to be a privileged application
-LOCAL_PRIVILEGED_MODULE := true
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_SDK_VERSION := current
-LOCAL_PROGUARD_ENABLED := disabled
-LOCAL_DEX_PREOPT := false
-
-LOCAL_PACKAGE_NAME := CtsShimPriv
-
-# Generate the upgrade key by taking the hash of the built CtsShimPrivUpgrade apk
-gen := $(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),,true)/AndroidManifest.xml
-$(gen): PRIVATE_CUSTOM_TOOL = sed -e "s/__HASH__/`sha512sum $(PRIVATE_INPUT_APK) | cut -d' ' -f1`/" $< >$@
-$(gen): PRIVATE_INPUT_APK := $(my_shim_priv_upgrade_apk)
-$(gen): $(LOCAL_PATH)/shim_priv/AndroidManifest.xml $(my_shim_priv_upgrade_apk)
- $(transform-generated-source)
-
-my_shim_priv_upgrade_apk :=
-
-LOCAL_FULL_MANIFEST_FILE := $(gen)
-
-LOCAL_MULTILIB := both
-LOCAL_JNI_SHARED_LIBRARIES := libshim_jni
-# Explicitly uncompress native libs rather than letting the build system doing it and destroy the
-# v2/v3 signature.
-LOCAL_USE_EMBEDDED_NATIVE_LIBS := true
-
-LOCAL_USE_AAPT2 := true
-
-include $(BUILD_PACKAGE)
-
-###########################################################
-# Variant: Privileged app upgrade w/ the wrong SHA
-
-include $(CLEAR_VARS)
-# this needs to be a privileged application
-LOCAL_PRIVILEGED_MODULE := true
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_SDK_VERSION := current
-LOCAL_PROGUARD_ENABLED := disabled
-LOCAL_DEX_PREOPT := false
-# anything to make this package's SHA different from CtsShimPrivUpgrade
-LOCAL_AAPT_FLAGS := --version-name WrongSHA
-
-LOCAL_PACKAGE_NAME := CtsShimPrivUpgradeWrongSHA
-
-LOCAL_MANIFEST_FILE := shim_priv_upgrade/AndroidManifest.xml
-
-LOCAL_MULTILIB := both
-LOCAL_JNI_SHARED_LIBRARIES := libshim_jni
-
-include $(BUILD_PACKAGE)
-
-
-###########################################################
-# Variant: System app
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_SDK_VERSION := current
-LOCAL_PROGUARD_ENABLED := disabled
-LOCAL_DEX_PREOPT := false
-
-LOCAL_PACKAGE_NAME := CtsShim
-
-LOCAL_MANIFEST_FILE := shim/AndroidManifest.xml
-
-LOCAL_USE_AAPT2 := true
-
-include $(BUILD_PACKAGE)
-
-###########################################################
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index a855741..66e8923 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -171,6 +171,9 @@
<!-- Speed label for very fast network speed -->
<string name="speed_label_very_fast">Very Fast</string>
+ <!-- Passpoint summary for an expired passpoint [CHAR LIMIT=40] -->
+ <string name="wifi_passpoint_expired">Expired</string>
+
<!-- Summary text separator for preferences including a short description (eg. "Fast / Connected"). -->
<string name="preference_summary_default_combination"><xliff:g id="state" example="ON">%1$s</xliff:g> / <xliff:g id="description" example="High accuracy mode">%2$s</xliff:g></string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index 16fd51f..ab274b5 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -143,6 +143,16 @@
int VERY_FAST = 30;
}
+ @IntDef({PasspointConfigurationVersion.INVALID,
+ PasspointConfigurationVersion.NO_OSU_PROVISIONED,
+ PasspointConfigurationVersion.OSU_PROVISIONED})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface PasspointConfigurationVersion {
+ int INVALID = 0;
+ int NO_OSU_PROVISIONED = 1; // R1.
+ int OSU_PROVISIONED = 2; // R2 or R3.
+ }
+
/** The underlying set of scan results comprising this AccessPoint. */
@GuardedBy("mLock")
private final ArraySet<ScanResult> mScanResults = new ArraySet<>();
@@ -177,6 +187,9 @@
static final String KEY_CARRIER_AP_EAP_TYPE = "key_carrier_ap_eap_type";
static final String KEY_CARRIER_NAME = "key_carrier_name";
static final String KEY_EAPTYPE = "eap_psktype";
+ static final String KEY_SUBSCRIPTION_EXPIRATION_TIME_IN_MILLIS =
+ "key_subscription_expiration_time_in_millis";
+ static final String KEY_PASSPOINT_CONFIGURATION_VERSION = "key_passpoint_configuration_version";
static final AtomicInteger sLastId = new AtomicInteger(0);
/*
@@ -251,6 +264,9 @@
private String mFqdn;
private String mProviderFriendlyName;
private boolean mIsRoaming = false;
+ private long mSubscriptionExpirationTimeInMillis;
+ @PasspointConfigurationVersion private int mPasspointConfigurationVersion =
+ PasspointConfigurationVersion.INVALID;
private boolean mIsCarrierAp = false;
@@ -323,6 +339,13 @@
if (savedState.containsKey(KEY_CARRIER_NAME)) {
mCarrierName = savedState.getString(KEY_CARRIER_NAME);
}
+ if (savedState.containsKey(KEY_SUBSCRIPTION_EXPIRATION_TIME_IN_MILLIS)) {
+ mSubscriptionExpirationTimeInMillis =
+ savedState.getLong(KEY_SUBSCRIPTION_EXPIRATION_TIME_IN_MILLIS);
+ }
+ if (savedState.containsKey(KEY_PASSPOINT_CONFIGURATION_VERSION)) {
+ mPasspointConfigurationVersion = savedState.getInt(KEY_PASSPOINT_CONFIGURATION_VERSION);
+ }
update(mConfig, mInfo, mNetworkInfo);
// Calculate required fields
@@ -348,6 +371,12 @@
mContext = context;
mFqdn = config.getHomeSp().getFqdn();
mProviderFriendlyName = config.getHomeSp().getFriendlyName();
+ mSubscriptionExpirationTimeInMillis = config.getSubscriptionExpirationTimeInMillis();
+ if (config.isOsuProvisioned()) {
+ mPasspointConfigurationVersion = PasspointConfigurationVersion.OSU_PROVISIONED;
+ } else {
+ mPasspointConfigurationVersion = PasspointConfigurationVersion.NO_OSU_PROVISIONED;
+ }
updateKey();
}
@@ -991,6 +1020,10 @@
return mContext.getString(R.string.saved_network, appInfo.loadLabel(pm));
}
}
+
+ if (isPasspointConfigurationR1() && isExpired()) {
+ return mContext.getString(R.string.wifi_passpoint_expired);
+ }
return "";
}
@@ -1021,6 +1054,10 @@
* Returns the summary for the AccessPoint.
*/
public String getSettingsSummary(boolean convertSavedAsDisconnected) {
+ if (isPasspointConfigurationR1() && isExpired()) {
+ return mContext.getString(R.string.wifi_passpoint_expired);
+ }
+
// Update to new summary
StringBuilder summary = new StringBuilder();
@@ -1167,6 +1204,30 @@
}
/**
+ * Return true if this AccessPoint is expired.
+ */
+ public boolean isExpired() {
+ if (mSubscriptionExpirationTimeInMillis <= 0) {
+ // Expiration time not specified.
+ return false;
+ } else {
+ return System.currentTimeMillis() >= mSubscriptionExpirationTimeInMillis;
+ }
+ }
+
+ public boolean isPasspointConfigurationR1() {
+ return mPasspointConfigurationVersion == PasspointConfigurationVersion.NO_OSU_PROVISIONED;
+ }
+
+ /**
+ * Return true if {@link PasspointConfiguration#isOsuProvisioned} is true, this may refer to R2
+ * or R3.
+ */
+ public boolean isPasspointConfigurationOsuProvisioned() {
+ return mPasspointConfigurationVersion == PasspointConfigurationVersion.OSU_PROVISIONED;
+ }
+
+ /**
* Starts the OSU Provisioning flow.
*/
public void startOsuProvisioning(@Nullable WifiManager.ActionListener connectListener) {
@@ -1264,6 +1325,9 @@
savedState.putBoolean(KEY_IS_CARRIER_AP, mIsCarrierAp);
savedState.putInt(KEY_CARRIER_AP_EAP_TYPE, mCarrierApEapType);
savedState.putString(KEY_CARRIER_NAME, mCarrierName);
+ savedState.putLong(KEY_SUBSCRIPTION_EXPIRATION_TIME_IN_MILLIS,
+ mSubscriptionExpirationTimeInMillis);
+ savedState.putInt(KEY_PASSPOINT_CONFIGURATION_VERSION, mPasspointConfigurationVersion);
}
public void setListener(AccessPointListener listener) {
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index e86fb70..66a8ade 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Swerwing"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index fed9b05..3f02c95 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5ጂ"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5ጂ+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"በማዛወር ላይ"</string>
<string name="data_connection_edge" msgid="871835227939216682">"ኤጅ"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index b04df54..8c765ac 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"شبكة الجيل الرابع أو أحدث"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"شبكة 5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"شبكة 5G والأحدث"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"التجوال"</string>
<string name="data_connection_edge" msgid="871835227939216682">"شبكة EDGE"</string>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 7efb03c..87be3eb 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -50,8 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"<xliff:g id="APPLICATION">%1$s</xliff:g>ক <xliff:g id="USB_DEVICE">%2$s</xliff:g> এক্সেছ কৰিবলৈ অনুমতি দিবনে?\nএই এপ্টোক ৰেকর্ড কৰাৰ অনুমতি দিয়া হোৱা নাই কিন্তু ই এই ইউএছবি ডিভাইচটোৰ জৰিয়তে অডিঅ\' ৰেকর্ড কৰিব পাৰে।"</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"<xliff:g id="APPLICATION">%1$s</xliff:g>ক <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>ত প্ৰৱেশ কৰিবলৈ অনুমতি দিবনে?"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"<xliff:g id="USB_DEVICE">%2$s</xliff:g>ক ব্যৱহাৰ কৰিবলৈ <xliff:g id="APPLICATION">%1$s</xliff:g>ক খোলেনে?"</string>
- <!-- no translation found for usb_device_confirm_prompt_warn (210658281376801521) -->
- <skip />
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> ব্যৱহাৰ কৰিবলৈ <xliff:g id="APPLICATION">%1$s</xliff:g>ক খুলিবনে?\nএই এপ্টোক ৰেকর্ড কৰাৰ অনুমতি দিয়া হোৱা নাই কিন্তু ই এই ইউএছবি ডিভাইচটোৰ জৰিয়তে অডিঅ\' ৰেকর্ড কৰিব পাৰে।"</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"<xliff:g id="USB_ACCESSORY">%2$s</xliff:g>ক ব্যৱহাৰ কৰিবলৈ <xliff:g id="APPLICATION">%1$s</xliff:g>ক খোলেনে?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ইনষ্টল হৈ থকা কোনো এপে ইউএছবি সহায়ক সামগ্ৰীটো চলাব নোৱাৰে। এই সহায়ক সামগ্ৰীৰ বিষয়ে <xliff:g id="URL">%1$s</xliff:g>ৰ জৰিয়তে অধিক জানক৷"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"ইউএছবিৰ সহায়ক সামগ্ৰী"</string>
@@ -189,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"এলটিই"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"এলটিই+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"ৰ\'মিং"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 9d85126..a756ac0 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Rominq"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index 07c321d6..a3232e1 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index ec73200..f97d1ec 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Роўмінг"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 6eeae8f..856c020 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Роуминг"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 8e4e9a1..7c3f250f 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"রোমিং"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index c5f94bd..62cb309 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 2ae91dd..18dbd2c 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -50,8 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"Vols permetre que <xliff:g id="APPLICATION">%1$s</xliff:g> accedeixi a <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nAquesta aplicació no té permís de gravació, però pot capturar àudio a través d\'aquest dispositiu USB."</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"Vols permetre que <xliff:g id="APPLICATION">%1$s</xliff:g> accedeixi a <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"Vols obrir <xliff:g id="APPLICATION">%1$s</xliff:g> per gestionar <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
- <!-- no translation found for usb_device_confirm_prompt_warn (210658281376801521) -->
- <skip />
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"Vols permetre que <xliff:g id="APPLICATION">%1$s</xliff:g> accedeixi a <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nAquesta aplicació no té permís de gravació, però pot capturar àudio a través d\'aquest dispositiu USB."</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"Vols obrir <xliff:g id="APPLICATION">%1$s</xliff:g> per gestionar <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Les aplicacions instal·lades no funcionen amb l\'accessori USB. Més informació: <xliff:g id="URL">%1$s</xliff:g>"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"Accessori USB"</string>
@@ -111,8 +110,8 @@
<string name="accessibility_phone_button" msgid="6738112589538563574">"Telèfon"</string>
<string name="accessibility_voice_assist_button" msgid="487611083884852965">"Assistència per veu"</string>
<string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloqueja"</string>
- <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"S\'està esperant l\'empremta dactilar"</string>
- <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Desbloqueja sense utilitzar l\'empremta dactilar"</string>
+ <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"S\'està esperant l\'empremta digital"</string>
+ <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Desbloqueja sense utilitzar l\'empremta digital"</string>
<string name="accessibility_scanning_face" msgid="769545173211758586">"S\'està escanejant la cara"</string>
<string name="accessibility_send_smart_reply" msgid="7766727839703044493">"Envia"</string>
<string name="accessibility_manage_notification" msgid="2026361503393549753">"Gestiona les notificacions"</string>
@@ -137,7 +136,7 @@
<string name="biometric_dialog_wrong_password" msgid="2343518162282889518">"Contrasenya incorrecta"</string>
<string name="biometric_dialog_credential_too_many_attempts" msgid="1556206869468265728">"Has superat el nombre d\'intents incorrectes permesos.\nTorna-ho a provar d\'aquí a <xliff:g id="NUMBER">%d</xliff:g> segons."</string>
<string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Toca el sensor d\'empremtes dactilars"</string>
- <string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Icona d\'empremta dactilar"</string>
+ <string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Icona d\'empremta digital"</string>
<string name="face_dialog_looking_for_face" msgid="7049276266074494689">"S\'està cercant la teva cara…"</string>
<string name="accessibility_face_dialog_face_icon" msgid="2658119009870383490">"Icona facial"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botó de zoom de compatibilitat."</string>
@@ -189,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Itinerància"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
@@ -536,7 +532,7 @@
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"El dispositiu continuarà bloquejat fins que no el desbloquegis manualment."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Rep notificacions més ràpidament"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Mostra-les abans de desbloquejar"</string>
- <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No"</string>
+ <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No, gràcies"</string>
<string name="hidden_notifications_setup" msgid="41079514801976810">"Configura"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Desactiva ara"</string>
@@ -916,7 +912,7 @@
<string name="slice_permission_deny" msgid="7683681514008048807">"Denega"</string>
<string name="auto_saver_title" msgid="1217959994732964228">"Toca per programar l\'estalvi de bateria"</string>
<string name="auto_saver_text" msgid="2563289953551438248">"Activa\'l quan sigui probable que et quedis sense bateria"</string>
- <string name="no_auto_saver_action" msgid="8086002101711328500">"No"</string>
+ <string name="no_auto_saver_action" msgid="8086002101711328500">"No, gràcies"</string>
<string name="auto_saver_enabled_title" msgid="6726474226058316862">"S\'ha activat la programació de l\'estalvi de bateria"</string>
<string name="auto_saver_enabled_text" msgid="874711029884777579">"L\'estalvi de bateria s\'activarà automàticament quan el nivell de bateria sigui inferior al <xliff:g id="PERCENTAGE">%d</xliff:g>%%."</string>
<string name="open_saver_setting_action" msgid="8314624730997322529">"Configuració"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 916986f..68800f0 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 99fa80e..d3dbc6e 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index aced5d7..15f7876 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 044d396..d30aec9 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Περιαγωγή"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 5bf1b0f..1e50b5a 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index a327151..b2a6e6a 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 5bf1b0f..1e50b5a 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 5bf1b0f..1e50b5a 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index 15617b3..568fdb5 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index a69de3b..46b402e 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index f96f7b9..d45bf9f 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -50,8 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"¿Quieres que <xliff:g id="APPLICATION">%1$s</xliff:g> pueda acceder a <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nEsta aplicación no tiene permisos para grabar, pero podría captar audio a través de este dispositivo USB."</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"¿Quieres permitir que <xliff:g id="APPLICATION">%1$s</xliff:g> acceda a <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"¿Quieres abrir <xliff:g id="APPLICATION">%1$s</xliff:g> para utilizar <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
- <!-- no translation found for usb_device_confirm_prompt_warn (210658281376801521) -->
- <skip />
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"¿Quieres abrir <xliff:g id="APPLICATION">%1$s</xliff:g> para gestionar <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nEsta aplicación no tiene permisos para grabar, pero puede capturar audio mediante este dispositivo USB."</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"¿Quieres abrir <xliff:g id="APPLICATION">%1$s</xliff:g> para utilizar <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Ninguna aplicación instalada funciona con este accesorio USB. Más información: <xliff:g id="URL">%1$s</xliff:g>"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"Accesorio USB"</string>
@@ -189,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5G E"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Itinerancia"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index b106a01..3f7c835 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Rändlus"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 4e9fe245..b6730cf 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -62,7 +62,7 @@
<string name="usb_debugging_always" msgid="303335496705863070">"Eman beti ordenagailu honetatik arazteko baimena"</string>
<string name="usb_debugging_allow" msgid="2272145052073254852">"Baimendu"</string>
<string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Ez da onartzen USB arazketa"</string>
- <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Gailu honetan saioa hasita duen erabiltzaileak ezin du aktibatu USB arazketa. Eginbide hori erabiltzeko, aldatu erabiltzaile nagusira."</string>
+ <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Gailu honetan saioa hasita daukan erabiltzaileak ezin du aktibatu USB arazketa. Eginbide hori erabiltzeko, aldatu erabiltzaile nagusira."</string>
<string name="usb_contaminant_title" msgid="206854874263058490">"Desgaitu egin da USB ataka"</string>
<string name="usb_contaminant_message" msgid="7379089091591609111">"USB ataka desgaitu egin da gailua likido edo zikinkeriengandik babesteko, eta ez du hautemango osagarririk.\n\nJakinarazpen bat jasoko duzu USB ataka berriz erabiltzeko moduan dagoenean."</string>
<string name="usb_port_enabled" msgid="7906141351687694867">"USB ataka gaitu da kargagailuak eta osagarriak hautemateko"</string>
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Ibiltaritza"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 1751cc9..4f04220 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"فراگردی"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index c6c90b3..63bc925 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 01427c9..df8b8e4 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Itinérance"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 852bd11..12e06fd0 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Itinérance"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 885302e..85f8cf4 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Itinerancia"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index b3ec665..95d7f41 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"રોમિંગ"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 56117ed..c32ec38 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -50,8 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"आप <xliff:g id="APPLICATION">%1$s</xliff:g> को <xliff:g id="USB_DEVICE">%2$s</xliff:g> ऐक्सेस करने की अनुमति देना चाहते हैं?\nइस ऐप्लिकेशन को रिकॉर्ड करने की अनुमति नहीं दी गई है. हालांकि, ऐप्लिकेशन इस यूएसबी डिवाइस से ऑडियो कैप्चर कर सकता है."</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"<xliff:g id="APPLICATION">%1$s</xliff:g> को <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> के ऐक्सेस की अनुमति दें?"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> के लिए <xliff:g id="APPLICATION">%1$s</xliff:g> खोलें?"</string>
- <!-- no translation found for usb_device_confirm_prompt_warn (210658281376801521) -->
- <skip />
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> का इस्तेमाल करने के लिए <xliff:g id="APPLICATION">%1$s</xliff:g> को खोलना चाहते हैं?\n इस ऐप्लिकेशन को रिकॉर्ड करने की अनुमति नहीं दी गई है. हालांकि, ऐप्लिकेशन इस यूएसबी डिवाइस से ऑडियो कैप्चर कर सकता है."</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"<xliff:g id="USB_ACCESSORY">%2$s</xliff:g> के लिए <xliff:g id="APPLICATION">%1$s</xliff:g> खोलें?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"इस USB सहायक डिवाइस के साथ कोई भी इंस्टॉल ऐप्स काम नहीं करता. इस सहायक डिवाइस के बारे में यहां ज़्यादा जानें: <xliff:g id="URL">%1$s</xliff:g>"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"USB सहायक साधन"</string>
@@ -189,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"एलटीई"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"रोमिंग"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 96b1623..e633878 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G i više"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index bd23d4d..299e318 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Barangolás"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index 2647f2f..6291d5d 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Ռոումինգ"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index d0b1045..cf9c4e0 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index 8985d27..f98b943 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Reiki"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 68169ab..c08cdd3 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index d059489..fc0c640 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -50,8 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"האם לאפשר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> גישה אל <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nאפליקציה זו לא קיבלה הרשאה להקליט אך יכולה לתעד אודיו באמצעות מכשיר USB זה."</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"האם לתת לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> גישה אל <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"האם לפתוח את <xliff:g id="APPLICATION">%1$s</xliff:g> כדי לעבוד עם <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
- <!-- no translation found for usb_device_confirm_prompt_warn (210658281376801521) -->
- <skip />
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"לפתוח את <xliff:g id="APPLICATION">%1$s</xliff:g> לטיפול במכשיר <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nאפליקציה זו לא קיבלה הרשאה להקליט אך יכולה לתעד אודיו באמצעות מכשיר USB זה."</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"האם לפתוח את <xliff:g id="APPLICATION">%1$s</xliff:g> כדי לעבוד עם <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"אין אפליקציות מותקנות הפועלות עם אביזר ה-USB. למידע נוסף על אביזר זה היכנס לכתובת <xliff:g id="URL">%1$s</xliff:g>"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"אביזר USB"</string>
@@ -189,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"+4G"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"+LTE"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"+G5"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"נדידה"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index e89ae5b..5759e4b 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"ローミング"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index 50006dd..8c10ea4 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"როუმინგი"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 05e521c..c646715 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Роуминг"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index a628383..4f87cf1 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"រ៉ូមីង"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index dc4674a..f208298 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"ರೋಮಿಂಗ್"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 714af0c..c57d98f 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G 이상"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"로밍"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 820c6b3..b712d62 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Роуминг"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index 89d3779..7440be7 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"ໂຣມມິງ"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 208f49b..4a2281d 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5GE"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Tarptinklinis ryšys"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index a96fc3b..2505636 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Viesabonēšana"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index f8dea79..d2eab61 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Роаминг"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index 66265cb..ca79e12 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -50,8 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> ആക്സസ് ചെയ്യാൻ <xliff:g id="APPLICATION">%1$s</xliff:g> എന്നതിനെ അനുവദിക്കണോ?\nഈ ആപ്പിന് റെക്കോർഡ് അനുമതി നൽകിയിട്ടില്ല, എന്നാൽ ഈ USB ഉപകരണത്തിലൂടെ ഓഡിയോ ക്യാപ്ചർ ചെയ്യാനാവും."</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"<xliff:g id="USB_ACCESSORY">%2$s</xliff:g> ആക്സസ് ചെയ്യാൻ <xliff:g id="APPLICATION">%1$s</xliff:g>-നെ അനുവദിക്കണോ?"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> കൈകാര്യം ചെയ്യാൻ <xliff:g id="APPLICATION">%1$s</xliff:g> തുറക്കണോ?"</string>
- <!-- no translation found for usb_device_confirm_prompt_warn (210658281376801521) -->
- <skip />
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"<xliff:g id="APPLICATION">%1$s</xliff:g> തുറന്ന് <xliff:g id="USB_DEVICE">%2$s</xliff:g> കൈകാര്യം ചെയ്യണോ?\nഈ ആപ്പിന് റെക്കോർഡ് അനുമതി നൽകിയിട്ടില്ല, എന്നാൽ ഈ USB ഉപകരണത്തിലൂടെ ഓഡിയോ ക്യാപ്ചർ ചെയ്യാനാവും."</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"<xliff:g id="USB_ACCESSORY">%2$s</xliff:g> കൈകാര്യം ചെയ്യാൻ <xliff:g id="APPLICATION">%1$s</xliff:g> തുറക്കണോ?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ഈ USB ആക്സസ്സറിയിൽ ഇൻസ്റ്റാളുചെയ്തവയൊന്നും പ്രവർത്തിക്കുന്നില്ല. <xliff:g id="URL">%1$s</xliff:g>-ൽ ഇതേക്കുറിച്ച് കൂടുതലറിയുക"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"USB ആക്സസ്സറി"</string>
@@ -189,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"റോമിംഗ്"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDG"</string>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 00e6dcb..50bb578 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Роуминг"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 671060b..7324c51 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -50,8 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"<xliff:g id="APPLICATION">%1$s</xliff:g> ला <xliff:g id="USB_DEVICE">%2$s</xliff:g> अॅक्सेस करण्याची अनुमती द्यायची का?\nया अॅपला रेकॉर्ड करण्याची परवानगी दिलेली नाही पण या USB डिव्हाइसद्वारे ऑडिओ कॅप्चर केला जाऊ शकतो."</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"<xliff:g id="APPLICATION">%1$s</xliff:g> ला <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> अॅक्सेस करण्याची अनुमती द्यायची का?"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> हाताळण्यासाठी <xliff:g id="APPLICATION">%1$s</xliff:g> उघडायचे का?"</string>
- <!-- no translation found for usb_device_confirm_prompt_warn (210658281376801521) -->
- <skip />
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> हँडल करण्यासाठी <xliff:g id="APPLICATION">%1$s</xliff:g> उघडायचे आहे का? \n या अॅपला रेकॉर्ड करण्याची परवानगी दिलेली नाही पण या USB डिव्हाइसद्वारे ऑडिओ कॅप्चर केला जाऊ शकतो."</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"<xliff:g id="USB_ACCESSORY">%2$s</xliff:g> हाताळण्यासाठी <xliff:g id="APPLICATION">%1$s</xliff:g> उघडायचे का?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"इंस्टॉल केलेली अॅप्स या USB उपसाधनासह कार्य करत नाहीत. <xliff:g id="URL">%1$s</xliff:g> येथे या उपसाधनाविषयी अधिक जाणून घ्या"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"USB उपसाधन"</string>
@@ -189,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"४G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"५Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"१X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"रोमिंग"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 265f161..0faaa5f 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Perayauan"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index c06bb8c..566dc66 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"ပြင်ပကွန်ရက်နှင့် ချိတ်ဆက်ခြင်း"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index c213b10..aabdd8b9 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index 8006279..ebffa2f 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -50,8 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"<xliff:g id="APPLICATION">%1$s</xliff:g> लाई <xliff:g id="USB_DEVICE">%2$s</xliff:g> माथि पहुँच राख्न अनुमति दिने हो?\nयो अनुप्रयोगलाई रेकर्ड गर्ने अनुमति प्रदान गरिएको छैन तर यसले USB यन्त्रमार्फत अडियो क्याप्चर गर्न सक्छ।"</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"<xliff:g id="APPLICATION">%1$s</xliff:g> लाई <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> माथि पहुँच राख्ने अनुमति दिने हो?"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> को व्यवस्थापन गर्न <xliff:g id="APPLICATION">%1$s</xliff:g> खोल्ने हो?"</string>
- <!-- no translation found for usb_device_confirm_prompt_warn (210658281376801521) -->
- <skip />
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"<xliff:g id="APPLICATION">%1$s</xliff:g> लाई <xliff:g id="USB_DEVICE">%2$s</xliff:g> सञ्चालन गर्न खोल्ने हो?\nयो अनुप्रयोगलाई रेकर्ड गर्ने अनुमति प्रदान गरिएको छैन तर यसले USB यन्त्रमार्फत अडियो क्याप्चर गर्न सक्छ।"</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"<xliff:g id="USB_ACCESSORY">%2$s</xliff:g> को व्यवस्थापन गर्न <xliff:g id="APPLICATION">%1$s</xliff:g> खोल्ने हो?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"यस USB उपकरणसँग स्थापित अनुप्रयोग काम गर्दैन। यस उपकरणको बारेमा <xliff:g id="URL">%1$s</xliff:g> मा धेरै जान्नुहोस्"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"USB सहयोगी"</string>
@@ -189,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"रोमिङ"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 61e4c33..aa68dce 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5GE"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index 527d69f..0985196 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -50,8 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> ଆକ୍ସେସ୍ କରିବାକୁ <xliff:g id="APPLICATION">%1$s</xliff:g>କୁ ଅନୁମତି ଦେବେ କି?\nଏହି ଆପ୍କୁ ରେକର୍ଡ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ କିନ୍ତୁ ଏହି USB ଡିଭାଇସ୍ ଜରିଆରେ ଅଡିଓ କ୍ୟାପ୍ଟର୍ କରିପାରିବ।"</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"<xliff:g id="USB_ACCESSORY">%2$s</xliff:g> ଆକ୍ସେସ୍ କରିବାକୁ <xliff:g id="APPLICATION">%1$s</xliff:g>କୁ ଅନୁମତି ଦେବେ?"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> ନିୟନ୍ତ୍ରଣ କରିବାକୁ <xliff:g id="APPLICATION">%1$s</xliff:g> ଖୋଲିବେ?"</string>
- <!-- no translation found for usb_device_confirm_prompt_warn (210658281376801521) -->
- <skip />
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> ପରିଚାଳନା କରିବାକୁ <xliff:g id="APPLICATION">%1$s</xliff:g>କୁ ଖୋଲିବେ?\nଏହି ଆପ୍କୁ ରେକର୍ଡ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ କିନ୍ତୁ ଏହି USB ଡିଭାଇସ୍ ଜରିଆରେ, ଏହା ଅଡିଓ କ୍ୟାପ୍ଟର୍ କରିପାରିବ।"</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"<xliff:g id="USB_ACCESSORY">%2$s</xliff:g> ନିୟନ୍ତ୍ରଣ କରିବାକୁ <xliff:g id="APPLICATION">%1$s</xliff:g> ଖୋଲିବେ?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ଇନଷ୍ଟଲ୍ ହୋଇଥିବା କୌଣସି ଆପ୍ ଏହି USB ଆକ୍ସେସୋରୀରେ କାମ କରେନାହିଁ। ଏହି ଆକ୍ସେସୋରୀ ବିଷୟରେ <xliff:g id="URL">%1$s</xliff:g>ରେ ଅଧିକ ଜାଣନ୍ତୁ"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"USB ଆକ୍ସେସରୀ"</string>
@@ -189,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"ରୋମିଙ୍ଗ"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 18ddddf..cf7f3e9 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -50,8 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"ਕੀ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨੂੰ <xliff:g id="USB_DEVICE">%2$s</xliff:g> ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ?\nਇਸ ਐਪ ਨੂੰ ਰਿਕਾਰਡ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੱਤੀ ਗਈ ਪਰ ਇਹ USB ਡੀਵਾਈਸ ਰਾਹੀਂ ਆਡੀਓ ਕੈਪਚਰ ਕਰ ਸਕਦੀ ਹੈ।"</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"ਕੀ <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> ਤੱਕ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨੂੰ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ?"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"ਕੀ <xliff:g id="USB_DEVICE">%2$s</xliff:g> ਨੂੰ ਵਰਤਣ ਲਈ <xliff:g id="APPLICATION">%1$s</xliff:g> ਖੋਲ੍ਹਣੀ ਹੈ?"</string>
- <!-- no translation found for usb_device_confirm_prompt_warn (210658281376801521) -->
- <skip />
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> ਨੂੰ ਸੰਭਾਲਣ ਲਈ <xliff:g id="APPLICATION">%1$s</xliff:g> ਖੋਲ੍ਹੋ?\nਇਸ ਐਪ ਨੂੰ ਰਿਕਾਰਡ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੱਤੀ ਗਈ ਪਰ ਇਹ USB ਡੀਵਾਈਸ ਰਾਹੀਂ ਆਡੀਓ ਕੈਪਚਰ ਕਰ ਸਕਦੀ ਹੈ।"</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"ਕੀ <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> ਨੂੰ ਵਰਤਣ ਲਈ <xliff:g id="APPLICATION">%1$s</xliff:g> ਖੋਲ੍ਹਣੀ ਹੈ?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ਕੋਈ ਇੰਸਟੌਲ ਕੀਤੇ ਐਪਸ ਇਸ USB ਐਕਸੈਸਰੀ ਨਾਲ ਕੰਮ ਨਹੀਂ ਕਰਦੇ। <xliff:g id="URL">%1$s</xliff:g> ਤੇ ਇਸ ਐਕਸੈਸਰੀ ਬਾਰੇ ਹੋਰ ਜਾਣੋ"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"USB ਐਕਸੈਸਰੀ"</string>
@@ -189,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"ਰੋਮਿੰਗ"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 44b4112..dc79963 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -188,11 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <!-- String.format failed for translation -->
- <!-- no translation found for data_connection_5ge (4699478963278829331) -->
- <skip />
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 57d64f5..a9a0309 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 6c80211..ef59a5e 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 57d64f5..a9a0309 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index a6bd29b..a4618d3 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 3459440..9574f0c 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5GE"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Роуминг"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index ab3dc222..2876eb9 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"රෝමිං"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index aa004b4..a969932 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -50,7 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"Povoliť aplikácii <xliff:g id="APPLICATION">%1$s</xliff:g> pristupovať k zariadeniu <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nTejto aplikácii nebolo udelené povolenie na nahrávanie, môže však snímať zvuk cez toto zariadenie USB."</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"Povoliť aplikácii <xliff:g id="APPLICATION">%1$s</xliff:g> prístup k zariadeniu <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"Otvoriť aplikáciu <xliff:g id="APPLICATION">%1$s</xliff:g> na použitie zariadenia <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
- <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"Chcete spracovávať zariadenie <xliff:g id="USB_DEVICE">%2$s</xliff:g> pomocou aplikácie <xliff:g id="APPLICATION">%1$s</xliff:g>?\nTejto aplikácii nebolo udelené povolenie na nahrávanie, ale môže nasnímať zvuk cez toto zariadenie USB."</string>
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"Chcete otvoriť aplikáciu <xliff:g id="APPLICATION">%1$s</xliff:g> na správu zariadenia <xliff:g id="USB_DEVICE">%2$s</xliff:g> ?\nTejto aplikácii nebolo udelené povolenie na nahrávanie, ale môže nasnímať zvuk cez toto zariadenie USB."</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"Otvoriť aplikáciu <xliff:g id="APPLICATION">%1$s</xliff:g> na použitie zariadenia <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"S týmto zariad. USB nefunguje žiadna nainštal. aplikácia. Ďalšie informácie na <xliff:g id="URL">%1$s</xliff:g>"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"Periférne zariadenie USB"</string>
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 03fa751..9e4045f 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Gostovanje"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index 21915c9..6ce621c 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 64ab59b..50775d9 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Роминг"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 0a65cc7..c7fb27c 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5GE"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 48c1fab..12851eb 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Mitandao ya ng\'ambo"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index 7263bf6..0d49f27 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"ரோமிங்"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index af330f18f..1600df7 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -50,8 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"<xliff:g id="USB_DEVICE">%2$s</xliff:g>యాక్సెస్ చేయడానికి <xliff:g id="APPLICATION">%1$s</xliff:g>ను అనుమతించాలా?\nఈ యాప్నకు రికార్డ్ చేసే అనుమతి మంజూరు చేయబడలేదు, కానీ ఈ USB పరికరం ద్వారా ఆడియోను క్యాప్చర్ చేయగలదు."</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"<xliff:g id="USB_ACCESSORY">%2$s</xliff:g>ని యాక్సెస్ చేయడానికి <xliff:g id="APPLICATION">%1$s</xliff:g>ని అనుమతించాలా?"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"<xliff:g id="USB_DEVICE">%2$s</xliff:g>ని నిర్వహించడానికి <xliff:g id="APPLICATION">%1$s</xliff:g>ని తెరవాలా?"</string>
- <!-- no translation found for usb_device_confirm_prompt_warn (210658281376801521) -->
- <skip />
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"<xliff:g id="USB_DEVICE">%2$s</xliff:g>ని హ్యాండిల్ చేయడానికి <xliff:g id="APPLICATION">%1$s</xliff:g>ను తెరవాలా?\nఈ యాప్కు రికార్డ్ చేసే అనుమతి మంజూరు కాలేదు, అయినా ఈ USB పరికరం ద్వారా ఆడియోను క్యాప్చర్ చేయగలదు."</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"<xliff:g id="USB_ACCESSORY">%2$s</xliff:g>ని నిర్వహించడానికి <xliff:g id="APPLICATION">%1$s</xliff:g>ని తెరవాలా?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ఈ USB ఉపకరణంతో ఇన్స్టాల్ చేయబడిన అనువర్తనాలు ఏవీ పని చేయవు. ఈ ఉపకరణం గురించి <xliff:g id="URL">%1$s</xliff:g>లో మరింత తెలుసుకోండి"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"USB ఉపకరణం"</string>
@@ -189,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"రోమింగ్"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index fc062b4..554009e 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5GE"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"โรมมิ่ง"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 37dd49f..309265a 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -102,7 +102,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Bumalik"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_accessibility_button" msgid="7601252764577607915">"Pagiging Naa-access"</string>
+ <string name="accessibility_accessibility_button" msgid="7601252764577607915">"Pagiging Accessible"</string>
<string name="accessibility_rotate_button" msgid="7402949513740253006">"I-rotate ang screen"</string>
<string name="accessibility_recent" msgid="5208608566793607626">"Overview"</string>
<string name="accessibility_search_light" msgid="1103867596330271848">"Hanapin"</string>
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
@@ -572,7 +569,7 @@
<string name="stream_notification" msgid="2563720670905665031">"Notification"</string>
<string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
<string name="stream_dtmf" msgid="2447177903892477915">"Dual multi tone frequency"</string>
- <string name="stream_accessibility" msgid="301136219144385106">"Pagiging Naa-access"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Pagiging Accessible"</string>
<string name="ring_toggle_title" msgid="3281244519428819576">"Mga Tawag"</string>
<string name="volume_ringer_status_normal" msgid="4273142424125855384">"Ipa-ring"</string>
<string name="volume_ringer_status_vibrate" msgid="1825615171021346557">"I-vibrate"</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index c052f4a..f7f4d81 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Dolaşım"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index de6b6f2..39b4deb 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Роумінг"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index b361a4a..aa261da 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -50,8 +50,7 @@
<string name="usb_device_permission_prompt_warn" msgid="1842558472039505091">"<xliff:g id="APPLICATION">%1$s</xliff:g> کو <xliff:g id="USB_DEVICE">%2$s</xliff:g> تک رسائی دیں؟\nاس ایپ کو ریکارڈ کی اجازت عطا نہیں کی گئی ہے مگر اس USB آلہ سے کیپچر کر سکتے ہیں۔"</string>
<string name="usb_accessory_permission_prompt" msgid="2465531696941369047">"<xliff:g id="APPLICATION">%1$s</xliff:g> کو <xliff:g id="USB_ACCESSORY">%2$s</xliff:g> تک رسائی حاصل کرنے کی اجازت دیں؟"</string>
<string name="usb_device_confirm_prompt" msgid="7440562274256843905">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> ہینڈل کرنے کیلئے <xliff:g id="APPLICATION">%1$s</xliff:g> کھولیں؟"</string>
- <!-- no translation found for usb_device_confirm_prompt_warn (210658281376801521) -->
- <skip />
+ <string name="usb_device_confirm_prompt_warn" msgid="210658281376801521">"<xliff:g id="USB_DEVICE">%2$s</xliff:g> کو ہینڈل کرنے کے ليے <xliff:g id="APPLICATION">%1$s</xliff:g> کھولیں؟ \nاس ایپ کو ریکارڈ کی اجازت عطا نہیں کی گئی ہے مگر اس USB آلہ سے کیپچر کر سکتے ہیں۔"</string>
<string name="usb_accessory_confirm_prompt" msgid="4333670517539993561">"<xliff:g id="USB_ACCESSORY">%2$s</xliff:g> ہینڈل کرنے کیلئے <xliff:g id="APPLICATION">%1$s</xliff:g> کھولیں؟"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"اس USB لوازم کے ساتھ کوئی انسٹال کردہ ایپس کام نہیں کرتی ہیں۔ <xliff:g id="URL">%1$s</xliff:g> پر مزید جانیں"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"USB لوازم"</string>
@@ -189,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"رومنگ"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index 5c077d8..f538853 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Rouming"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 88849c8..78bf627 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G trở lên"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Chuyển vùng"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index cdc2070..de6ad78 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"漫游"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index a69bb7b..0bf6fbf 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5GE"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"漫遊"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index dedaebf..9b3aeb2 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"漫遊"</string>
<string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 192bfb4..9cf9313 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -188,9 +188,6 @@
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"I-LTE"</string>
<string name="data_connection_lte_plus" msgid="3423013208570937424">"I-LTE+"</string>
- <string name="data_connection_5ge" msgid="4699478963278829331">"5Ge"</string>
- <string name="data_connection_5g" msgid="6357743323196864504">"5G"</string>
- <string name="data_connection_5g_plus" msgid="3284146603743732965">"5G+"</string>
<string name="data_connection_cdma" msgid="8176597308239086780">"1X"</string>
<string name="data_connection_roaming" msgid="6037232010953697354">"Iyazulazula"</string>
<string name="data_connection_edge" msgid="871835227939216682">"I-EDGE"</string>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java
index 6edd75b..0c68383 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java
@@ -123,6 +123,7 @@
IntentFilter filter = new IntentFilter();
filter.addAction(KeyChain.ACTION_TRUST_STORE_CHANGED);
+ filter.addAction(Intent.ACTION_USER_UNLOCKED);
context.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, filter, null,
bgHandler);
@@ -298,14 +299,11 @@
} else {
mVpnUserId = mCurrentUserId;
}
- refreshCACerts();
fireCallbacks();
}
- private void refreshCACerts() {
- new CACertLoader().execute(mCurrentUserId);
- int workProfileId = getWorkProfileUserId(mCurrentUserId);
- if (workProfileId != UserHandle.USER_NULL) new CACertLoader().execute(workProfileId);
+ private void refreshCACerts(int userId) {
+ new CACertLoader().execute(userId);
}
private String getNameForVpnConfig(VpnConfig cfg, UserHandle user) {
@@ -401,7 +399,10 @@
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override public void onReceive(Context context, Intent intent) {
if (KeyChain.ACTION_TRUST_STORE_CHANGED.equals(intent.getAction())) {
- refreshCACerts();
+ refreshCACerts(getSendingUserId());
+ } else if (Intent.ACTION_USER_UNLOCKED.equals(intent.getAction())) {
+ int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
+ if (userId != UserHandle.USER_NULL) refreshCACerts(userId);
}
}
};
@@ -416,9 +417,6 @@
return new Pair<Integer, Boolean>(userId[0], hasCACerts);
} catch (RemoteException | InterruptedException | AssertionError e) {
Log.i(TAG, "failed to get CA certs", e);
- mBgHandler.postDelayed(
- () -> new CACertLoader().execute(userId[0]),
- CA_CERT_LOADING_RETRY_TIME_IN_MS);
return new Pair<Integer, Boolean>(userId[0], null);
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java
index 854cc2f..97542a9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java
@@ -93,9 +93,9 @@
when(mKeyChainService.queryLocalInterface("android.security.IKeyChainService"))
.thenReturn(mKeyChainService);
- // Wait for callbacks from 1) the CACertLoader and 2) the onUserSwitched() function in the
+ // Wait for callbacks from the onUserSwitched() function in the
// constructor of mSecurityController
- mStateChangedLatch = new CountDownLatch(2);
+ mStateChangedLatch = new CountDownLatch(1);
// TODO: Migrate this test to TestableLooper and use a handler attached
// to that.
mSecurityController = new SecurityControllerImpl(mContext,
@@ -169,7 +169,6 @@
assertTrue(mSecurityController.hasCACertInCurrentUser());
// Exception
-
mStateChangedLatch = new CountDownLatch(1);
when(mKeyChainService.getUserCaAliases())
@@ -181,9 +180,12 @@
assertFalse(mStateChangedLatch.await(1, TimeUnit.SECONDS));
assertTrue(mSecurityController.hasCACertInCurrentUser());
- // The retry takes 30s
- //assertTrue(mStateChangedLatch.await(31, TimeUnit.SECONDS));
- //assertFalse(mSecurityController.hasCACertInCurrentUser());
+
+ mSecurityController.new CACertLoader()
+ .execute(0);
+
+ assertTrue(mStateChangedLatch.await(1, TimeUnit.SECONDS));
+ assertFalse(mSecurityController.hasCACertInCurrentUser());
}
@Test
diff --git a/proto/src/wifi.proto b/proto/src/wifi.proto
deleted file mode 100644
index bd682de..0000000
--- a/proto/src/wifi.proto
+++ /dev/null
@@ -1,2707 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- */
-
-syntax = "proto2";
-
-package clearcut.connectivity;
-
-option java_package = "com.android.server.wifi";
-option java_outer_classname = "WifiMetricsProto";
-
-// The information about the Wifi events.
-message WifiLog {
-
- // Session information that gets logged for every Wifi connection.
- repeated ConnectionEvent connection_event = 1;
-
- // Number of saved networks in the user profile.
- optional int32 num_saved_networks = 2;
-
- // Number of open networks in the saved networks.
- optional int32 num_open_networks = 3;
-
- // Number of legacy personal networks.
- optional int32 num_legacy_personal_networks = 4;
-
- // Number of legacy enterprise networks.
- optional int32 num_legacy_enterprise_networks = 5;
-
- // Does the user have location setting enabled.
- optional bool is_location_enabled = 6;
-
- // Does the user have scanning enabled.
- optional bool is_scanning_always_enabled = 7;
-
- // Number of times user toggled wifi using the settings menu.
- optional int32 num_wifi_toggled_via_settings = 8;
-
- // Number of times user toggled wifi using the airplane menu.
- optional int32 num_wifi_toggled_via_airplane = 9;
-
- // Number of networks added by the user.
- optional int32 num_networks_added_by_user = 10;
-
- // Number of networks added by applications.
- optional int32 num_networks_added_by_apps = 11;
-
- // Number scans that returned empty results.
- optional int32 num_empty_scan_results = 12;
-
- // Number scans that returned at least one result.
- optional int32 num_non_empty_scan_results = 13;
-
- // Number of single scans requests.
- optional int32 num_oneshot_scans = 14;
-
- // Number of repeated background scans that were scheduled to the chip.
- optional int32 num_background_scans = 15;
-
- // Error codes that a scan can result in.
- enum ScanReturnCode {
-
- // Return Code is unknown.
- SCAN_UNKNOWN = 0;
-
- // Scan was successful.
- SCAN_SUCCESS = 1;
-
- // Scan was successfully started, but was interrupted.
- SCAN_FAILURE_INTERRUPTED = 2;
-
- // Scan failed to start because of invalid configuration
- // (bad channel, etc).
- SCAN_FAILURE_INVALID_CONFIGURATION = 3;
-
- // Could not start a scan because wifi is disabled.
- FAILURE_WIFI_DISABLED = 4;
-
- }
-
- // Mapping of error codes to the number of times that scans resulted
- // in that error.
- repeated ScanReturnEntry scan_return_entries = 16;
-
- message ScanReturnEntry {
-
- // Return code of the scan.
- optional ScanReturnCode scan_return_code = 1;
-
- // Number of entries that were found in the scan.
- optional int32 scan_results_count = 2;
- }
-
- // State of the Wifi.
- enum WifiState {
-
- // State is unknown.
- WIFI_UNKNOWN = 0;
-
- // Wifi is disabled.
- WIFI_DISABLED = 1;
-
- // Wifi is enabled.
- WIFI_DISCONNECTED = 2;
-
- // Wifi is enabled and associated with an AP.
- WIFI_ASSOCIATED = 3;
- }
-
- // Mapping of system state to the number of times that scans were requested in
- // that state
- repeated WifiSystemStateEntry wifi_system_state_entries = 17;
-
- message WifiSystemStateEntry {
-
- // Current WiFi state.
- optional WifiState wifi_state = 1;
-
- // Count of scans in state.
- optional int32 wifi_state_count = 2;
-
- // Is screen on.
- optional bool is_screen_on = 3;
- }
-
- // Mapping of Error/Success codes to the number of background scans that resulted in it
- repeated ScanReturnEntry background_scan_return_entries = 18;
-
- // Mapping of system state to the number of times that Background scans were requested in that
- // state
- repeated WifiSystemStateEntry background_scan_request_state = 19;
-
- // Total number of times the Watchdog of Last Resort triggered, resetting the wifi stack
- optional int32 num_last_resort_watchdog_triggers = 20;
-
- // Total number of networks over bad association threshold when watchdog triggered
- optional int32 num_last_resort_watchdog_bad_association_networks_total = 21;
-
- // Total number of networks over bad authentication threshold when watchdog triggered
- optional int32 num_last_resort_watchdog_bad_authentication_networks_total = 22;
-
- // Total number of networks over bad dhcp threshold when watchdog triggered
- optional int32 num_last_resort_watchdog_bad_dhcp_networks_total = 23;
-
- // Total number of networks over bad other threshold when watchdog triggered
- optional int32 num_last_resort_watchdog_bad_other_networks_total = 24;
-
- // Total count of networks seen when watchdog triggered
- optional int32 num_last_resort_watchdog_available_networks_total = 25;
-
- // Total count of triggers with atleast one bad association network
- optional int32 num_last_resort_watchdog_triggers_with_bad_association = 26;
-
- // Total count of triggers with atleast one bad authentication network
- optional int32 num_last_resort_watchdog_triggers_with_bad_authentication = 27;
-
- // Total count of triggers with atleast one bad dhcp network
- optional int32 num_last_resort_watchdog_triggers_with_bad_dhcp = 28;
-
- // Total count of triggers with atleast one bad other network
- optional int32 num_last_resort_watchdog_triggers_with_bad_other = 29;
-
- // Count of times connectivity watchdog confirmed pno is working
- optional int32 num_connectivity_watchdog_pno_good = 30;
-
- // Count of times connectivity watchdog found pno not working
- optional int32 num_connectivity_watchdog_pno_bad = 31;
-
- // Count of times connectivity watchdog confirmed background scan is working
- optional int32 num_connectivity_watchdog_background_good = 32;
-
- // Count of times connectivity watchdog found background scan not working
- optional int32 num_connectivity_watchdog_background_bad = 33;
-
- // The time duration represented by this wifi log, from start to end of capture
- optional int32 record_duration_sec = 34;
-
- // Counts the occurrences of each individual RSSI poll level
- repeated RssiPollCount rssi_poll_rssi_count = 35;
-
- // Total number of times WiFi connected immediately after a Last Resort Watchdog trigger,
- // without new networks becoming available.
- optional int32 num_last_resort_watchdog_successes = 36;
-
- // Total number of saved hidden networks
- optional int32 num_hidden_networks = 37;
-
- // Total number of saved passpoint / hotspot 2.0 networks
- optional int32 num_passpoint_networks = 38;
-
- // Total number of scan results
- optional int32 num_total_scan_results = 39;
-
- // Total number of scan results for open networks
- optional int32 num_open_network_scan_results = 40;
-
- // Total number of scan results for legacy personal networks
- optional int32 num_legacy_personal_network_scan_results = 41;
-
- // Total number of scan results for legacy enterprise networks
- optional int32 num_legacy_enterprise_network_scan_results = 42;
-
- // Total number of scan results for hidden networks
- optional int32 num_hidden_network_scan_results = 43;
-
- // Total number of scan results for hotspot 2.0 r1 networks
- optional int32 num_hotspot2_r1_network_scan_results = 44;
-
- // Total number of scan results for hotspot 2.0 r2 networks
- optional int32 num_hotspot2_r2_network_scan_results = 45;
-
- // Total number of scans handled by framework (oneshot or otherwise)
- optional int32 num_scans = 46;
-
- // Counts the occurrences of each alert reason.
- repeated AlertReasonCount alert_reason_count = 47;
-
- // Counts the occurrences of each Wifi score
- repeated WifiScoreCount wifi_score_count = 48;
-
- // Histogram of Soft AP Durations
- repeated SoftApDurationBucket soft_ap_duration = 49;
-
- // Histogram of Soft AP ReturnCode
- repeated SoftApReturnCodeCount soft_ap_return_code = 50;
-
- // Histogram of the delta between scan result RSSI and RSSI polls
- repeated RssiPollCount rssi_poll_delta_count = 51;
-
- // List of events
- repeated StaEvent sta_event_list = 52;
-
- // Total number of times WiFi HAL crashed.
- optional int32 num_hal_crashes = 53;
-
- // Total number of times WiFicond crashed.
- optional int32 num_wificond_crashes = 54;
-
- // Indicates the number of times an error was encountered in
- // Wifi HAL on |WifiNative.setupInterfaceForClientMode|.
- optional int32 num_setup_client_interface_failure_due_to_hal = 55;
-
- // Indicates the number of times an error was encountered in
- // Wificond on |WifiNative.setupInterfaceForClientMode|.
- optional int32 num_setup_client_interface_failure_due_to_wificond = 56;
-
- // Wi-Fi Aware metrics
- optional WifiAwareLog wifi_aware_log = 57;
-
- // Number of saved Passpoint providers in user profile.
- optional int32 num_passpoint_providers = 58;
-
- // Count of times Passpoint provider being installed.
- optional int32 num_passpoint_provider_installation = 59;
-
- // Count of times Passpoint provivider is installed successfully.
- optional int32 num_passpoint_provider_install_success = 60;
-
- // Count of times Passpoint provider is being uninstalled.
- optional int32 num_passpoint_provider_uninstallation = 61;
-
- // Count of times Passpoint provider is uninstalled successfully.
- optional int32 num_passpoint_provider_uninstall_success = 62;
-
- // Count of saved Passpoint providers device has ever connected to.
- optional int32 num_passpoint_providers_successfully_connected = 63;
-
- // Histogram counting instances of scans with N many ScanResults with unique ssids
- repeated NumConnectableNetworksBucket total_ssids_in_scan_histogram = 64;
-
- // Histogram counting instances of scans with N many ScanResults/bssids
- repeated NumConnectableNetworksBucket total_bssids_in_scan_histogram = 65;
-
- // Histogram counting instances of scans with N many unique open ssids
- repeated NumConnectableNetworksBucket available_open_ssids_in_scan_histogram = 66;
-
- // Histogram counting instances of scans with N many bssids for open networks
- repeated NumConnectableNetworksBucket available_open_bssids_in_scan_histogram = 67;
-
- // Histogram counting instances of scans with N many unique ssids for saved networks
- repeated NumConnectableNetworksBucket available_saved_ssids_in_scan_histogram = 68;
-
- // Histogram counting instances of scans with N many bssids for saved networks
- repeated NumConnectableNetworksBucket available_saved_bssids_in_scan_histogram = 69;
-
- // Histogram counting instances of scans with N many unique SSIDs for open or saved networks
- repeated NumConnectableNetworksBucket available_open_or_saved_ssids_in_scan_histogram = 70;
-
- // Histogram counting instances of scans with N many BSSIDs for open or saved networks
- repeated NumConnectableNetworksBucket available_open_or_saved_bssids_in_scan_histogram = 71;
-
- // Histogram counting instances of scans with N many ScanResults matching unique saved passpoint providers
- repeated NumConnectableNetworksBucket available_saved_passpoint_provider_profiles_in_scan_histogram = 72;
-
- // Histogram counting instances of scans with N many ScanResults BSSIDs matching a saved passpoint provider
- repeated NumConnectableNetworksBucket available_saved_passpoint_provider_bssids_in_scan_histogram = 73;
-
- // Counts the number of AllSingleScanLister.onResult calls with a full band scan result
- optional int32 full_band_all_single_scan_listener_results = 74;
-
- // Counts the number of AllSingleScanLister.onResult calls with a partial (channels) scan result
- optional int32 partial_all_single_scan_listener_results = 75;
-
- // Pno scan metrics
- optional PnoScanMetrics pno_scan_metrics = 76;
-
- // Histogram of "Connect to Network" notifications.
- // The notification Action should be unset.
- repeated ConnectToNetworkNotificationAndActionCount connect_to_network_notification_count = 77;
-
- // Histogram of "Connect to Network" notification user actions.
- repeated ConnectToNetworkNotificationAndActionCount connect_to_network_notification_action_count = 78;
-
- // The number of SSIDs blacklisted from recommendation by the open network
- // notification recommender
- optional int32 open_network_recommender_blacklist_size = 79;
-
- // Is the available network notification feature turned on
- optional bool is_wifi_networks_available_notification_on = 80;
-
- // Count of recommendation updates made by the open network notification
- // recommender
- optional int32 num_open_network_recommendation_updates = 81;
-
- // Count of connection attempts that were initiated unsuccessfully
- optional int32 num_open_network_connect_message_failed_to_send = 82;
-
- // Histogram counting instances of scans with N many HotSpot 2.0 R1 APs
- repeated NumConnectableNetworksBucket observed_hotspot_r1_aps_in_scan_histogram = 83;
-
- // Histogram counting instances of scans with N many HotSpot 2.0 R2 APs
- repeated NumConnectableNetworksBucket observed_hotspot_r2_aps_in_scan_histogram = 84;
-
- // Histogram counting instances of scans with N many unique HotSpot 2.0 R1 ESS.
- // Where ESS is defined as the (HESSID, ANQP Domain ID), (SSID, ANQP Domain ID) or
- // (SSID, BSSID) tuple depending on AP configuration (in the above priority
- // order).
- repeated NumConnectableNetworksBucket observed_hotspot_r1_ess_in_scan_histogram = 85;
-
- // Histogram counting instances of scans with N many unique HotSpot 2.0 R2 ESS.
- // Where ESS is defined as the (HESSID, ANQP Domain ID), (SSID, ANQP Domain ID) or
- // (SSID, BSSID) tuple depending on AP configuration (in the above priority
- // order).
- repeated NumConnectableNetworksBucket observed_hotspot_r2_ess_in_scan_histogram = 86;
-
- // Histogram counting number of HotSpot 2.0 R1 APs per observed ESS in a scan
- // (one value added per unique ESS - potentially multiple counts per single
- // scan!)
- repeated NumConnectableNetworksBucket observed_hotspot_r1_aps_per_ess_in_scan_histogram = 87;
-
- // Histogram counting number of HotSpot 2.0 R2 APs per observed ESS in a scan
- // (one value added per unique ESS - potentially multiple counts per single
- // scan!)
- repeated NumConnectableNetworksBucket observed_hotspot_r2_aps_per_ess_in_scan_histogram = 88;
-
- // SoftAP event list tracking sessions and client counts in tethered mode
- repeated SoftApConnectedClientsEvent soft_ap_connected_clients_events_tethered = 89;
-
- // SoftAP event list tracking sessions and client counts in local only mode
- repeated SoftApConnectedClientsEvent soft_ap_connected_clients_events_local_only = 90;
-
- // Wps connection metrics
- optional WpsMetrics wps_metrics = 91;
-
- // Wifi power statistics
- optional WifiPowerStats wifi_power_stats = 92;
-
- // Number of connectivity single scan requests.
- optional int32 num_connectivity_oneshot_scans = 93;
-
- // WifiWake statistics
- optional WifiWakeStats wifi_wake_stats = 94;
-
- // Histogram counting instances of scans with N many 802.11mc (RTT) supporting APs
- repeated NumConnectableNetworksBucket observed_80211mc_supporting_aps_in_scan_histogram = 95;
-
- // Total number of times supplicant crashed.
- optional int32 num_supplicant_crashes = 96;
-
- // Total number of times hostapd crashed.
- optional int32 num_hostapd_crashes = 97;
-
- // Indicates the number of times an error was encountered in
- // supplicant on |WifiNative.setupInterfaceForClientMode|.
- optional int32 num_setup_client_interface_failure_due_to_supplicant = 98;
-
- // Indicates the number of times an error was encountered in
- // Wifi HAL on |WifiNative.setupInterfaceForSoftApMode|.
- optional int32 num_setup_soft_ap_interface_failure_due_to_hal = 99;
-
- // Indicates the number of times an error was encountered in
- // Wifi HAL on |WifiNative.setupInterfaceForSoftApMode|.
- optional int32 num_setup_soft_ap_interface_failure_due_to_wificond = 100;
-
- // Indicates the number of times an error was encountered in
- // Wifi HAL on |WifiNative.setupInterfaceForSoftApMode|.
- optional int32 num_setup_soft_ap_interface_failure_due_to_hostapd = 101;
-
- // Indicates the number of times we got an interface down in client mode.
- optional int32 num_client_interface_down = 102;
-
- // Indicates the number of times we got an interface down in softap mode.
- optional int32 num_soft_ap_interface_down = 103;
-
- // Indicates the number of scan requests from external apps.
- optional int32 num_external_app_oneshot_scan_requests = 104;
-
- // Indicates the number of times a scan request from an external foreground app was throttled.
- optional int32 num_external_foreground_app_oneshot_scan_requests_throttled = 105;
-
- // Indicates the number of times a scan request from an external background app was throttled.
- optional int32 num_external_background_app_oneshot_scan_requests_throttled = 106;
-
- // WifiLastResortWatchdog time milliseconds delta between trigger and first connection success
- optional int64 watchdog_trigger_to_connection_success_duration_ms = 107 [default = -1];
-
- // The number of times wifi experienced failures after watchdog has already been triggered and is
- // waiting for a connection success
- optional int64 watchdog_total_connection_failure_count_after_trigger = 108;
-
- // Number of times DFS channel scans are requested in single scan requests.
- optional int32 num_oneshot_has_dfs_channel_scans = 109;
-
- // Wi-Fi RTT metrics
- optional WifiRttLog wifi_rtt_log = 110;
-
- // Flag which indicates if Connected MAC Randomization is enabled
- optional bool is_mac_randomization_on = 111 [default = false];
-
- // Number of radio mode changes to MCC (Multi channel concurrency).
- optional int32 num_radio_mode_change_to_mcc = 112;
-
- // Number of radio mode changes to SCC (Single channel concurrency).
- optional int32 num_radio_mode_change_to_scc = 113;
-
- // Number of radio mode changes to SBS (Single band simultaneous).
- optional int32 num_radio_mode_change_to_sbs = 114;
-
- // Number of radio mode changes to DBS (Dual band simultaneous).
- optional int32 num_radio_mode_change_to_dbs = 115;
-
- // Number of times the firmware picked a SoftAp channel not satisfying user band preference.
- optional int32 num_soft_ap_user_band_preference_unsatisfied = 116;
-
- // Identifier for experimental scoring parameter settings.
- optional string score_experiment_id = 117;
-
- // Data on wifi radio usage
- optional WifiRadioUsage wifi_radio_usage = 118;
-
- // Stores settings values used for metrics testing.
- optional ExperimentValues experiment_values = 119;
-
- // List of WifiIsUnusableEvents which get logged when we notice that WiFi is unusable.
- // Collected only when WIFI_IS_UNUSABLE_EVENT_METRICS_ENABLED Settings is enabled.
- repeated WifiIsUnusableEvent wifi_is_unusable_event_list = 120;
-
- // Counts the occurrences of each link speed (Mbps) level
- // with rssi (dBm) and rssi^2 sums (dBm^2)
- repeated LinkSpeedCount link_speed_counts = 121;
-
- // Number of times the SarManager failed to register SAR sensor listener
- optional int32 num_sar_sensor_registration_failures = 122;
-
- // Hardware revision (EVT, DVT, PVT etc.)
- optional string hardware_revision = 124;
-
- // Total wifi link layer usage data over the logging duration in ms.
- optional WifiLinkLayerUsageStats wifi_link_layer_usage_stats = 125;
-
- // Multiple lists of timestamped link layer stats with labels to represent whether wifi is usable
- repeated WifiUsabilityStats wifi_usability_stats_list = 126;
-
- // Counts the occurrences of each Wifi usability score provided by external app
- repeated WifiUsabilityScoreCount wifi_usability_score_count = 127;
-
- // List of PNO scan stats, one element for each mobility state
- repeated DeviceMobilityStatePnoScanStats mobility_state_pno_stats_list = 128;
-
- // Wifi p2p statistics
- optional WifiP2pStats wifi_p2p_stats = 129;
-
- // Easy Connect (DPP) metrics
- optional WifiDppLog wifi_dpp_log = 130;
-
- // Number of Enhanced Open (OWE) networks in the saved networks.
- optional int32 num_enhanced_open_networks = 131;
-
- // Number of WPA3-Personal networks.
- optional int32 num_wpa3_personal_networks = 132;
-
- // Number of WPA3-Enterprise networks.
- optional int32 num_wpa3_enterprise_networks = 133;
-
- // Total number of scan results for Enhanced open networks
- optional int32 num_enhanced_open_network_scan_results = 134;
-
- // Total number of scan results for WPA3-Personal networks
- optional int32 num_wpa3_personal_network_scan_results = 135;
-
- // Total number of scan results for WPA3-Enterprise networks
- optional int32 num_wpa3_enterprise_network_scan_results = 136;
-
- // WifiConfigStore read/write metrics.
- optional WifiConfigStoreIO wifi_config_store_io = 137;
-
- // Total number of saved networks with mac randomization enabled.
- optional int32 num_saved_networks_with_mac_randomization = 138;
-
- // Link Probe metrics
- optional LinkProbeStats link_probe_stats = 139;
-
- // List of NetworkSelectionExperimentDecisions stats for each experiment
- repeated NetworkSelectionExperimentDecisions network_selection_experiment_decisions_list = 140;
-
- // Network Request API surface metrics.
- optional WifiNetworkRequestApiLog wifi_network_request_api_log = 141;
-
- // Network Suggestion API surface metrics.
- optional WifiNetworkSuggestionApiLog wifi_network_suggestion_api_log = 142;
-
- // WifiLock statistics
- optional WifiLockStats wifi_lock_stats = 143;
-
- // Stats on number of times Wi-Fi is turned on/off though the WifiManager#setWifiEnabled API
- optional WifiToggleStats wifi_toggle_stats = 144;
-
- // Number of times WifiManager#addOrUpdateNetwork is called.
- optional int32 num_add_or_update_network_calls = 145;
-
- // Number of times WifiManager#enableNetwork is called.
- optional int32 num_enable_network_calls = 146;
-
- // Passpoint provison metrics
- optional PasspointProvisionStats passpoint_provision_stats = 147;
-
- // Histogram of the EAP method type of all installed Passpoint profiles for R1
- repeated PasspointProfileTypeCount installed_passpoint_profile_type_for_r1 = 123;
-
- // Histogram of the EAP method type of all installed Passpoint profiles for R2
- repeated PasspointProfileTypeCount installed_passpoint_profile_type_for_r2 = 148;
-
- // Histogram of Tx link speed at 2G
- repeated Int32Count tx_link_speed_count_2g = 149;
-
- // Histogram of Tx link speed at 5G low band
- repeated Int32Count tx_link_speed_count_5g_low = 150;
-
- // Histogram of Tx link speed at 5G middle band
- repeated Int32Count tx_link_speed_count_5g_mid = 151;
-
- // Histogram of Tx link speed at 5G high band
- repeated Int32Count tx_link_speed_count_5g_high = 152;
-
- // Histogram of Rx link speed at 2G
- repeated Int32Count rx_link_speed_count_2g = 153;
-
- // Histogram of Rx link speed at 5G low band
- repeated Int32Count rx_link_speed_count_5g_low = 154;
-
- // Histogram of Rx link speed at 5G middle band
- repeated Int32Count rx_link_speed_count_5g_mid = 155;
-
- // Histogram of Rx link speed at 5G high band
- repeated Int32Count rx_link_speed_count_5g_high = 156;
-}
-
-// Information that gets logged for every WiFi connection.
-message RouterFingerPrint {
-
- enum RoamType {
-
- // Type is unknown.
- ROAM_TYPE_UNKNOWN = 0;
-
- // No roaming - usually happens on a single band (2.4 GHz) router.
- ROAM_TYPE_NONE = 1;
-
- // Enterprise router.
- ROAM_TYPE_ENTERPRISE = 2;
-
- // DBDC => Dual Band Dual Concurrent essentially a router that
- // supports both 2.4 GHz and 5 GHz bands.
- ROAM_TYPE_DBDC = 3;
- }
-
- enum Auth {
-
- // Auth is unknown.
- AUTH_UNKNOWN = 0;
-
- // No authentication.
- AUTH_OPEN = 1;
-
- // If the router uses a personal authentication.
- AUTH_PERSONAL = 2;
-
- // If the router is setup for enterprise authentication.
- AUTH_ENTERPRISE = 3;
- }
-
- enum RouterTechnology {
-
- // Router is unknown.
- ROUTER_TECH_UNKNOWN = 0;
-
- // Router Channel A.
- ROUTER_TECH_A = 1;
-
- // Router Channel B.
- ROUTER_TECH_B = 2;
-
- // Router Channel G.
- ROUTER_TECH_G = 3;
-
- // Router Channel N.
- ROUTER_TECH_N = 4;
-
- // Router Channel AC.
- ROUTER_TECH_AC = 5;
-
- // When the channel is not one of the above.
- ROUTER_TECH_OTHER = 6;
- }
-
- optional RoamType roam_type = 1;
-
- // Channel on which the connection takes place.
- optional int32 channel_info = 2;
-
- // DTIM setting of the router.
- optional int32 dtim = 3;
-
- // Authentication scheme of the router.
- optional Auth authentication = 4;
-
- // If the router is hidden.
- optional bool hidden = 5;
-
- // Channel information.
- optional RouterTechnology router_technology = 6;
-
- // whether ipv6 is supported.
- optional bool supports_ipv6 = 7;
-
- // If the router is a passpoint / hotspot 2.0 network
- optional bool passpoint = 8;
-}
-
-message ConnectionEvent {
-
- // Roam Type.
- enum RoamType {
-
- // Type is unknown.
- ROAM_UNKNOWN = 0;
-
- // No roaming.
- ROAM_NONE = 1;
-
- // DBDC roaming.
- ROAM_DBDC = 2;
-
- // Enterprise roaming.
- ROAM_ENTERPRISE = 3;
-
- // User selected roaming.
- ROAM_USER_SELECTED = 4;
-
- // Unrelated.
- ROAM_UNRELATED = 5;
- }
-
- // Connectivity Level Failure.
- enum ConnectivityLevelFailure {
-
- // Failure is unknown.
- HLF_UNKNOWN = 0;
-
- // No failure.
- HLF_NONE = 1;
-
- // DHCP failure.
- HLF_DHCP = 2;
-
- // No internet connection.
- HLF_NO_INTERNET = 3;
-
- // No internet connection.
- HLF_UNWANTED = 4;
- }
-
- // Level 2 failure reason.
- enum Level2FailureReason {
-
- // Unknown default
- FAILURE_REASON_UNKNOWN = 0;
-
- // The reason code if there is no error during authentication. It could
- // also imply that there no authentication in progress.
- AUTH_FAILURE_NONE = 1;
-
- // The reason code if there was a timeout authenticating.
- AUTH_FAILURE_TIMEOUT = 2;
-
- // The reason code if there was a wrong password while authenticating.
- AUTH_FAILURE_WRONG_PSWD = 3;
-
- // The reason code if there was EAP failure while authenticating.
- AUTH_FAILURE_EAP_FAILURE = 4;
-
- // The reason code if the AP can no longer accept new clients.
- ASSOCIATION_REJECTION_AP_UNABLE_TO_HANDLE_NEW_STA = 5;
- }
-
- // Entity that recommended connecting to this network.
- enum ConnectionNominator {
- // Unknown nominator
- NOMINATOR_UNKNOWN = 0;
-
- // User selected network manually
- NOMINATOR_MANUAL = 1;
-
- // Saved network
- NOMINATOR_SAVED = 2;
-
- // Suggestion API
- NOMINATOR_SUGGESTION = 3;
-
- // Passpoint
- NOMINATOR_PASSPOINT = 4;
-
- // Carrier suggestion
- NOMINATOR_CARRIER = 5;
-
- // External scorer
- NOMINATOR_EXTERNAL_SCORED = 6;
-
- // Network Specifier
- NOMINATOR_SPECIFIER = 7;
-
- // User connected choice override
- NOMINATOR_SAVED_USER_CONNECT_CHOICE = 8;
-
- // Open Network Available Pop-up
- NOMINATOR_OPEN_NETWORK_AVAILABLE = 9;
- }
-
- // Start time of the connection.
- optional int64 start_time_millis = 1;// [(datapol.semantic_type) = ST_TIMESTAMP];
-
- // Duration to connect.
- optional int32 duration_taken_to_connect_millis = 2;
-
- // Router information.
- optional RouterFingerPrint router_fingerprint = 3;
-
- // RSSI at the start of the connection.
- optional int32 signal_strength = 4;
-
- // Roam Type.
- optional RoamType roam_type = 5;
-
- // Result of the connection.
- optional int32 connection_result = 6;
-
- // Reasons for level 2 failure (needs to be coordinated with wpa-supplicant).
- optional int32 level_2_failure_code = 7;
-
- // Failures that happen at the connectivity layer.
- optional ConnectivityLevelFailure connectivity_level_failure_code = 8;
-
- // Has bug report been taken.
- optional bool automatic_bug_report_taken = 9;
-
- // Connection is using locally generated random MAC address.
- optional bool use_randomized_mac = 10 [default = false];
-
- // Who chose to connect.
- optional ConnectionNominator connection_nominator = 11;
-
- // The currently running network selector when this connection event occurred.
- optional int32 network_selector_experiment_id = 12;
-
- // Breakdown of level_2_failure_code with more detailed reason.
- optional Level2FailureReason level_2_failure_reason = 13
- [default = FAILURE_REASON_UNKNOWN];
-}
-
-// Number of occurrences of a specific RSSI poll rssi value
-message RssiPollCount {
- // RSSI
- optional int32 rssi = 1;
-
- // Number of RSSI polls with 'rssi'
- optional int32 count = 2;
-
- // Beacon frequency of the channel in MHz
- optional int32 frequency = 3;
-}
-
-// Number of occurrences of a specific alert reason value
-message AlertReasonCount {
- // Alert reason
- optional int32 reason = 1;
-
- // Number of alerts with |reason|.
- optional int32 count = 2;
-}
-
-// Counts the number of instances of a specific Wifi Score calculated by WifiScoreReport
-message WifiScoreCount {
- // Wifi Score
- optional int32 score = 1;
-
- // Number of Wifi score reports with this score
- optional int32 count = 2;
-}
-
-// Counts the number of instances of a specific Wifi Usability Score
-message WifiUsabilityScoreCount {
- // Wifi Usability Score
- optional int32 score = 1;
-
- // Number of Wifi score reports with this score
- optional int32 count = 2;
-}
-
-// Number of occurrences of a specific link speed (Mbps)
-// and sum of rssi (dBm) and rssi^2 (dBm^2)
-message LinkSpeedCount {
- // Link speed (Mbps)
- optional int32 link_speed_mbps = 1;
-
- // Number of RSSI polls with link_speed
- optional int32 count = 2;
-
- // Sum of absolute values of rssi values (dBm)
- optional int32 rssi_sum_dbm = 3;
-
- // Sum of squares of rssi values (dBm^2)
- optional int64 rssi_sum_of_squares_dbm_sq = 4;
-}
-
-
-// Number of occurrences of Soft AP session durations
-message SoftApDurationBucket {
- // Bucket covers duration : [duration_sec, duration_sec + bucket_size_sec)
- // The (inclusive) lower bound of Soft AP session duration represented by this bucket
- optional int32 duration_sec = 1;
-
- // The size of this bucket
- optional int32 bucket_size_sec = 2;
-
- // Number of soft AP session durations that fit into this bucket
- optional int32 count = 3;
-}
-
-// Number of occurrences of a soft AP session return code
-message SoftApReturnCodeCount {
-
- enum SoftApStartResult {
-
- // SoftApManager return code unknown
- SOFT_AP_RETURN_CODE_UNKNOWN = 0;
-
- // SoftAp started successfully
- SOFT_AP_STARTED_SUCCESSFULLY = 1;
-
- // Catch all for failures with no specific failure reason
- SOFT_AP_FAILED_GENERAL_ERROR = 2;
-
- // SoftAp failed to start due to NO_CHANNEL error
- SOFT_AP_FAILED_NO_CHANNEL = 3;
- }
-
- // Historical, no longer used for writing as of 01/2017.
- optional int32 return_code = 1 [deprecated = true];
-
- // Occurrences of this soft AP return code
- optional int32 count = 2;
-
- // Result of attempt to start SoftAp
- optional SoftApStartResult start_result = 3;
-}
-
-message StaEvent {
- message ConfigInfo {
- // The set of key management protocols supported by this configuration.
- optional uint32 allowed_key_management = 1 [default = 0];
-
- // The set of security protocols supported by this configuration.
- optional uint32 allowed_protocols = 2 [default = 0];
-
- // The set of authentication protocols supported by this configuration.
- optional uint32 allowed_auth_algorithms = 3 [default = 0];
-
- // The set of pairwise ciphers for WPA supported by this configuration.
- optional uint32 allowed_pairwise_ciphers = 4 [default = 0];
-
- // The set of group ciphers supported by this configuration.
- optional uint32 allowed_group_ciphers = 5;
-
- // Is this a 'hidden network'
- optional bool hidden_ssid = 6;
-
- // Is this a Hotspot 2.0 / passpoint network
- optional bool is_passpoint = 7;
-
- // Is this an 'ephemeral' network (Not in saved network list, recommended externally)
- optional bool is_ephemeral = 8;
-
- // Has a successful connection ever been established using this WifiConfiguration
- optional bool has_ever_connected = 9;
-
- // RSSI of the scan result candidate associated with this WifiConfiguration
- optional int32 scan_rssi = 10 [default = -127];
-
- // Frequency of the scan result candidate associated with this WifiConfiguration
- optional int32 scan_freq = 11 [default = -1];
- }
-
- enum EventType {
- // Default/Invalid event
- TYPE_UNKNOWN = 0;
-
- // Supplicant Association Rejection event. Code contains the 802.11
- TYPE_ASSOCIATION_REJECTION_EVENT = 1;
-
- // Supplicant L2 event,
- TYPE_AUTHENTICATION_FAILURE_EVENT = 2;
-
- // Supplicant L2 event
- TYPE_NETWORK_CONNECTION_EVENT = 3;
-
- // Supplicant L2 event
- TYPE_NETWORK_DISCONNECTION_EVENT = 4;
-
- // Supplicant L2 event
- TYPE_SUPPLICANT_STATE_CHANGE_EVENT = 5;
-
- // Supplicant L2 event
- TYPE_CMD_ASSOCIATED_BSSID = 6;
-
- // IP Manager successfully completed IP Provisioning
- TYPE_CMD_IP_CONFIGURATION_SUCCESSFUL = 7;
-
- // IP Manager failed to complete IP Provisioning
- TYPE_CMD_IP_CONFIGURATION_LOST = 8;
-
- // IP Manager lost reachability to network neighbors
- TYPE_CMD_IP_REACHABILITY_LOST = 9;
-
- // Indicator that Supplicant is targeting a BSSID for roam/connection
- TYPE_CMD_TARGET_BSSID = 10;
-
- // Wifi framework is initiating a connection attempt
- TYPE_CMD_START_CONNECT = 11;
-
- // Wifi framework is initiating a roaming connection attempt
- TYPE_CMD_START_ROAM = 12;
-
- // SystemAPI connect() command, Settings App
- TYPE_CONNECT_NETWORK = 13;
-
- // Network Agent has validated the internet connection (Captive Portal Check success, or user
- // validation)
- TYPE_NETWORK_AGENT_VALID_NETWORK = 14;
-
- // Framework initiated disconnect. Sometimes generated to give an extra reason for a disconnect
- // Should typically be followed by a NETWORK_DISCONNECTION_EVENT with a local_gen = true
- TYPE_FRAMEWORK_DISCONNECT = 15;
-
- // The NetworkAgent score for wifi has changed in a way that may impact
- // connectivity
- TYPE_SCORE_BREACH = 16;
-
- // Framework changed Sta interface MAC address
- TYPE_MAC_CHANGE = 17;
-
- // Wifi is turned on
- TYPE_WIFI_ENABLED = 18;
-
- // Wifi is turned off
- TYPE_WIFI_DISABLED = 19;
-
- // The NetworkAgent Wifi usability score has changed in a way that may
- // impact connectivity
- TYPE_WIFI_USABILITY_SCORE_BREACH = 20;
-
- // Link probe was performed
- TYPE_LINK_PROBE = 21;
- }
-
- enum FrameworkDisconnectReason {
- // default/none/unknown value
- DISCONNECT_UNKNOWN = 0;
-
- // API DISCONNECT
- DISCONNECT_API = 1;
-
- // Some framework internal reason (generic)
- DISCONNECT_GENERIC = 2;
-
- // Network Agent network validation failed, user signaled network unwanted
- DISCONNECT_UNWANTED = 3;
-
- // Roaming timed out
- DISCONNECT_ROAM_WATCHDOG_TIMER = 4;
-
- // P2P service requested wifi disconnect
- DISCONNECT_P2P_DISCONNECT_WIFI_REQUEST = 5;
-
- // SIM was removed while using a SIM config
- DISCONNECT_RESET_SIM_NETWORKS = 6;
- }
-
- // Authentication Failure reasons as reported through the API.
- enum AuthFailureReason {
- // Unknown default
- AUTH_FAILURE_UNKNOWN = 0;
-
- // The reason code if there is no error during authentication. It could also imply that there no
- // authentication in progress,
- AUTH_FAILURE_NONE = 1;
-
- // The reason code if there was a timeout authenticating.
- AUTH_FAILURE_TIMEOUT = 2;
-
- // The reason code if there was a wrong password while authenticating.
- AUTH_FAILURE_WRONG_PSWD = 3;
-
- // The reason code if there was EAP failure while authenticating.
- AUTH_FAILURE_EAP_FAILURE = 4;
- }
-
- // What event was this
- optional EventType type = 1;
-
- // 80211 death reason code, relevant to NETWORK_DISCONNECTION_EVENTs
- optional int32 reason = 2 [default = -1];
-
- // 80211 Association Status code, relevant to ASSOCIATION_REJECTION_EVENTs
- optional int32 status = 3 [default = -1];
-
- // Designates whether a NETWORK_DISCONNECT_EVENT was by the STA or AP
- optional bool local_gen = 4 [default = false];
-
- // Network information from the WifiConfiguration of a framework initiated connection attempt
- optional ConfigInfo config_info = 5;
-
- // RSSI from the last rssi poll (Only valid for active connections)
- optional int32 last_rssi = 6 [default = -127];
-
- // Link speed from the last rssi poll (Only valid for active connections)
- optional int32 last_link_speed = 7 [default = -1];
-
- // Frequency from the last rssi poll (Only valid for active connections)
- optional int32 last_freq = 8 [default = -1];
-
- // Enum used to define bit positions in the supplicant_state_change_bitmask
- // See {@code frameworks/base/wifi/java/android/net/wifi/SupplicantState.java} for documentation
- enum SupplicantState {
- STATE_DISCONNECTED = 0;
-
- STATE_INTERFACE_DISABLED = 1;
-
- STATE_INACTIVE = 2;
-
- STATE_SCANNING = 3;
-
- STATE_AUTHENTICATING = 4;
-
- STATE_ASSOCIATING = 5;
-
- STATE_ASSOCIATED = 6;
-
- STATE_FOUR_WAY_HANDSHAKE = 7;
-
- STATE_GROUP_HANDSHAKE = 8;
-
- STATE_COMPLETED = 9;
-
- STATE_DORMANT = 10;
-
- STATE_UNINITIALIZED = 11;
-
- STATE_INVALID = 12;
- }
-
- // Bit mask of all supplicant state changes that occurred since the last event
- optional uint32 supplicant_state_changes_bitmask = 9 [default = 0];
-
- // The number of milliseconds that have elapsed since the device booted
- optional int64 start_time_millis = 10 [default = 0];
-
- optional FrameworkDisconnectReason framework_disconnect_reason = 11 [default = DISCONNECT_UNKNOWN];
-
- // Flag which indicates if an association rejection event occurred due to a timeout
- optional bool association_timed_out = 12 [default = false];
-
- // Authentication failure reason, as reported by WifiManager (calculated from state & deauth code)
- optional AuthFailureReason auth_failure_reason = 13 [default = AUTH_FAILURE_UNKNOWN];
-
- // NetworkAgent score of connected wifi
- optional int32 last_score = 14 [default = -1];
-
- // NetworkAgent Wifi usability score of connected wifi
- optional int32 last_wifi_usability_score = 15 [default = -1];
-
- // Prediction horizon (in second) of Wifi usability score provided by external
- // system app
- optional int32 last_prediction_horizon_sec = 16 [default = -1];
-
- // Only valid if event type == TYPE_LINK_PROBE.
- // true if link probe succeeded, false otherwise.
- optional bool link_probe_was_success = 17;
-
- // Only valid if event type == TYPE_LINK_PROBE and link_probe_was_success == true.
- // Elapsed time, in milliseconds, of a successful link probe.
- optional int32 link_probe_success_elapsed_time_ms = 18;
-
- // Only valid if event type == TYPE_LINK_PROBE and link_probe_was_success == false.
- // Failure reason for an unsuccessful link probe.
- optional LinkProbeStats.LinkProbeFailureReason link_probe_failure_reason = 19;
-}
-
-// Wi-Fi Aware metrics
-message WifiAwareLog {
- // total number of unique apps that used Aware (measured on attach)
- optional int32 num_apps = 1;
-
- // total number of unique apps that used an identity callback when attaching
- optional int32 num_apps_using_identity_callback = 2;
-
- // maximum number of attaches for an app
- optional int32 max_concurrent_attach_sessions_in_app = 3;
-
- // histogram of attach request results
- repeated NanStatusHistogramBucket histogram_attach_session_status = 4;
-
- // maximum number of concurrent publish sessions in a single app
- optional int32 max_concurrent_publish_in_app = 5;
-
- // maximum number of concurrent subscribe sessions in a single app
- optional int32 max_concurrent_subscribe_in_app = 6;
-
- // maximum number of concurrent discovery (publish+subscribe) sessions in a single app
- optional int32 max_concurrent_discovery_sessions_in_app = 7;
-
- // maximum number of concurrent publish sessions in the system
- optional int32 max_concurrent_publish_in_system = 8;
-
- // maximum number of concurrent subscribe sessions in the system
- optional int32 max_concurrent_subscribe_in_system = 9;
-
- // maximum number of concurrent discovery (publish+subscribe) sessions in the system
- optional int32 max_concurrent_discovery_sessions_in_system = 10;
-
- // histogram of publish request results
- repeated NanStatusHistogramBucket histogram_publish_status = 11;
-
- // histogram of subscribe request results
- repeated NanStatusHistogramBucket histogram_subscribe_status = 12;
-
- // number of unique apps which experienced a discovery session creation failure due to lack of
- // resources
- optional int32 num_apps_with_discovery_session_failure_out_of_resources = 13;
-
- // histogram of create ndp request results
- repeated NanStatusHistogramBucket histogram_request_ndp_status = 14;
-
- // histogram of create ndp out-of-band (OOB) request results
- repeated NanStatusHistogramBucket histogram_request_ndp_oob_status = 15;
-
- // maximum number of concurrent active data-interfaces (NDI) in a single app
- optional int32 max_concurrent_ndi_in_app = 19;
-
- // maximum number of concurrent active data-interfaces (NDI) in the system
- optional int32 max_concurrent_ndi_in_system = 20;
-
- // maximum number of concurrent data-paths (NDP) in a single app
- optional int32 max_concurrent_ndp_in_app = 21;
-
- // maximum number of concurrent data-paths (NDP) in the system
- optional int32 max_concurrent_ndp_in_system = 22;
-
- // maximum number of concurrent secure data-paths (NDP) in a single app
- optional int32 max_concurrent_secure_ndp_in_app = 23;
-
- // maximum number of concurrent secure data-paths (NDP) in the system
- optional int32 max_concurrent_secure_ndp_in_system = 24;
-
- // maximum number of concurrent data-paths (NDP) per data-interface (NDI)
- optional int32 max_concurrent_ndp_per_ndi = 25;
-
- // histogram of durations of Aware being available
- repeated HistogramBucket histogram_aware_available_duration_ms = 26;
-
- // histogram of durations of Aware being enabled
- repeated HistogramBucket histogram_aware_enabled_duration_ms = 27;
-
- // histogram of duration (in ms) of attach sessions
- repeated HistogramBucket histogram_attach_duration_ms = 28;
-
- // histogram of duration (in ms) of publish sessions
- repeated HistogramBucket histogram_publish_session_duration_ms = 29;
-
- // histogram of duration (in ms) of subscribe sessions
- repeated HistogramBucket histogram_subscribe_session_duration_ms = 30;
-
- // histogram of duration (in ms) of data-paths (NDP)
- repeated HistogramBucket histogram_ndp_session_duration_ms = 31;
-
- // histogram of usage (in MB) of data-paths (NDP)
- repeated HistogramBucket histogram_ndp_session_data_usage_mb = 32;
-
- // histogram of usage (in MB) of data-path creation time (in ms) measured as request -> confirm
- repeated HistogramBucket histogram_ndp_creation_time_ms = 33;
-
- // statistics for data-path (NDP) creation time (in ms) measured as request -> confirm: minimum
- optional int64 ndp_creation_time_ms_min = 34;
-
- // statistics for data-path (NDP) creation time (in ms) measured as request -> confirm: maximum
- optional int64 ndp_creation_time_ms_max = 35;
-
- // statistics for data-path (NDP) creation time (in ms) measured as request -> confirm: sum
- optional int64 ndp_creation_time_ms_sum = 36;
-
- // statistics for data-path (NDP) creation time (in ms) measured as request -> confirm: sum of sq
- optional int64 ndp_creation_time_ms_sum_of_sq = 37;
-
- // statistics for data-path (NDP) creation time (in ms) measured as request -> confirm: number of
- // samples
- optional int64 ndp_creation_time_ms_num_samples = 38;
-
- // total time within the logging window that aware was available
- optional int64 available_time_ms = 39;
-
- // total time within the logging window that aware was enabled
- optional int64 enabled_time_ms = 40;
-
- // maximum number of concurrent publish sessions enabling ranging in a single app
- optional int32 max_concurrent_publish_with_ranging_in_app = 41;
-
- // maximum number of concurrent subscribe sessions specifying a geofence in a single app
- optional int32 max_concurrent_subscribe_with_ranging_in_app = 42;
-
- // maximum number of concurrent publish sessions enabling ranging in the system
- optional int32 max_concurrent_publish_with_ranging_in_system = 43;
-
- // maximum number of concurrent subscribe sessions specifying a geofence in the system
- optional int32 max_concurrent_subscribe_with_ranging_in_system = 44;
-
- // histogram of subscribe session geofence minimum (only when specified)
- repeated HistogramBucket histogram_subscribe_geofence_min = 45;
-
- // histogram of subscribe session geofence maximum (only when specified)
- repeated HistogramBucket histogram_subscribe_geofence_max = 46;
-
- // total number of subscribe sessions which enabled ranging
- optional int32 num_subscribes_with_ranging = 47;
-
- // total number of matches (service discovery indication) with ranging provided
- optional int32 num_matches_with_ranging = 48;
-
- // total number of matches (service discovery indication) for service discovery with ranging
- // enabled which did not trigger ranging
- optional int32 num_matches_without_ranging_for_ranging_enabled_subscribes = 49;
-
- // Histogram bucket for Wi-Fi Aware logs. Range is [start, end)
- message HistogramBucket {
- // lower range of the bucket (inclusive)
- optional int64 start = 1;
-
- // upper range of the bucket (exclusive)
- optional int64 end = 2;
-
- // number of samples in the bucket
- optional int32 count = 3;
- }
-
- // Status of various NAN operations
- enum NanStatusTypeEnum {
- // constant to be used by proto
- UNKNOWN = 0;
-
- // NAN operation succeeded
- SUCCESS = 1;
-
- // NAN Discovery Engine/Host driver failures
- INTERNAL_FAILURE = 2;
-
- // NAN OTA failures
- PROTOCOL_FAILURE = 3;
-
- // The publish/subscribe discovery session id is invalid
- INVALID_SESSION_ID = 4;
-
- // Out of resources to fufill request
- NO_RESOURCES_AVAILABLE = 5;
-
- // Invalid arguments passed
- INVALID_ARGS = 6;
-
- // Invalid peer id
- INVALID_PEER_ID = 7;
-
- // Invalid NAN data-path (ndp) id
- INVALID_NDP_ID = 8;
-
- // Attempting to enable NAN when not available, e.g. wifi is disabled
- NAN_NOT_ALLOWED = 9;
-
- // Over the air ACK not received
- NO_OTA_ACK = 10;
-
- // Attempting to enable NAN when already enabled
- ALREADY_ENABLED = 11;
-
- // Can't queue tx followup message foor transmission
- FOLLOWUP_TX_QUEUE_FULL = 12;
-
- // Unsupported concurrency of NAN and another feature - NAN disabled
- UNSUPPORTED_CONCURRENCY_NAN_DISABLED = 13;
-
- // Unknown NanStatusType
- UNKNOWN_HAL_STATUS = 14;
- }
-
- // Histogram bucket for Wi-Fi Aware (NAN) status.
- message NanStatusHistogramBucket {
- // status type defining the bucket
- optional NanStatusTypeEnum nan_status_type = 1;
-
- // number of samples in the bucket
- optional int32 count = 2;
- }
-}
-
-// Data point used to build 'Number of Connectable Network' histograms
-message NumConnectableNetworksBucket {
- // Number of connectable networks seen in a scan result
- optional int32 num_connectable_networks = 1 [default = 0];
-
- // Number of scan results with num_connectable_networks
- optional int32 count = 2 [default = 0];
-}
-
-// Pno scan metrics
-// Here "Pno Scan" refers to the session of offloaded scans, these metrics count the result of a
-// single session, and not the individual scans within that session.
-message PnoScanMetrics {
- // Total number of attempts to offload pno scans
- optional int32 num_pno_scan_attempts = 1;
-
- // Total number of pno scans failed
- optional int32 num_pno_scan_failed = 2;
-
- // Number of pno scans started successfully over offload
- optional int32 num_pno_scan_started_over_offload = 3;
-
- // Number of pno scans failed over offload
- optional int32 num_pno_scan_failed_over_offload = 4;
-
- // Total number of pno scans that found any network
- optional int32 num_pno_found_network_events = 5;
-}
-
-// Number of occurrences for a particular "Connect to Network" Notification or
-// notification Action.
-message ConnectToNetworkNotificationAndActionCount {
-
- // "Connect to Network" notifications
- enum Notification {
-
- // Default
- NOTIFICATION_UNKNOWN = 0;
-
- // Initial notification with a recommended network.
- NOTIFICATION_RECOMMEND_NETWORK = 1;
-
- // Notification when connecting to the recommended network.
- NOTIFICATION_CONNECTING_TO_NETWORK = 2;
-
- // Notification when successfully connected to the network.
- NOTIFICATION_CONNECTED_TO_NETWORK = 3;
-
- // Notification when failed to connect to network.
- NOTIFICATION_FAILED_TO_CONNECT = 4;
- }
-
- // "Connect to Network" notification actions
- enum Action {
-
- // Default
- ACTION_UNKNOWN = 0;
-
- // User dismissed the "Connect to Network" notification.
- ACTION_USER_DISMISSED_NOTIFICATION = 1;
-
- // User tapped action button to connect to recommended network.
- ACTION_CONNECT_TO_NETWORK = 2;
-
- // User tapped action button to open Wi-Fi Settings.
- ACTION_PICK_WIFI_NETWORK = 3;
-
- // User tapped "Failed to connect" notification to open Wi-Fi Settings.
- ACTION_PICK_WIFI_NETWORK_AFTER_CONNECT_FAILURE = 4;
- }
-
- // Recommenders of the "Connect to Network" notification
- enum Recommender {
-
- // Default.
- RECOMMENDER_UNKNOWN = 0;
-
- // Open Network Available recommender.
- RECOMMENDER_OPEN = 1;
- }
-
- // Notification Type.
- optional Notification notification = 1;
-
- // Action Type.
- optional Action action = 2;
-
- // Recommender Type.
- optional Recommender recommender = 3;
-
- // Occurrences of this action.
- optional int32 count = 4;
-}
-
-// SoftAP event tracking sessions and client counts
-message SoftApConnectedClientsEvent {
-
- // Soft AP event Types
- enum SoftApEventType {
-
- // Soft AP is Up and ready for use
- SOFT_AP_UP = 0;
-
- // Soft AP is Down
- SOFT_AP_DOWN = 1;
-
- // Number of connected soft AP clients has changed
- NUM_CLIENTS_CHANGED = 2;
- }
-
- // Soft AP channel bandwidth types
- enum ChannelBandwidth {
-
- BANDWIDTH_INVALID = 0;
-
- BANDWIDTH_20_NOHT = 1;
-
- BANDWIDTH_20 = 2;
-
- BANDWIDTH_40 = 3;
-
- BANDWIDTH_80 = 4;
-
- BANDWIDTH_80P80 = 5;
-
- BANDWIDTH_160 = 6;
- }
-
- // Type of event being recorded
- optional SoftApEventType event_type = 1;
-
- // Time passed since last boot in milliseconds
- optional int64 time_stamp_millis = 2;
-
- // Number of connected clients if event_type is NUM_CLIENTS_CHANGED, otherwise zero.
- optional int32 num_connected_clients = 3;
-
- // Channel frequency used for Soft AP
- optional int32 channel_frequency = 4;
-
- // Channel bandwidth used for Soft AP
- optional ChannelBandwidth channel_bandwidth = 5;
-}
-
-// Wps connection metrics
-// Keeps track of Wi-Fi Protected Setup usage
-message WpsMetrics {
- // Total number of wps connection attempts
- optional int32 num_wps_attempts = 1;
-
- // Total number of wps connection successes
- optional int32 num_wps_success = 2;
-
- // Total number of wps failures on start
- optional int32 num_wps_start_failure = 3;
-
- // Total number of wps overlap failure
- optional int32 num_wps_overlap_failure = 4;
-
- // Total number of wps timeout failure
- optional int32 num_wps_timeout_failure = 5;
-
- // Total number of other wps failure during connection
- optional int32 num_wps_other_connection_failure = 6;
-
- // Total number of supplicant failure after wps
- optional int32 num_wps_supplicant_failure = 7;
-
- // Total number of wps cancellation
- optional int32 num_wps_cancellation = 8;
-}
-
-// Power stats for Wifi
-message WifiPowerStats {
-
- // Duration of log (ms)
- optional int64 logging_duration_ms = 1;
-
- // Energy consumed by wifi (mAh)
- optional double energy_consumed_mah = 2;
-
- // Amount of time wifi is in idle (ms)
- optional int64 idle_time_ms = 3;
-
- // Amount of time wifi is in rx (ms)
- optional int64 rx_time_ms = 4;
-
- // Amount of time wifi is in tx (ms)
- optional int64 tx_time_ms = 5;
-
- // Amount of time kernel is active because of wifi data (ms)
- optional int64 wifi_kernel_active_time_ms = 6;
-
- // Number of packets sent (tx)
- optional int64 num_packets_tx = 7;
-
- // Number of bytes sent (tx)
- optional int64 num_bytes_tx = 8;
-
- // Number of packets received (rx)
- optional int64 num_packets_rx = 9;
-
- // Number of bytes sent (rx)
- optional int64 num_bytes_rx = 10;
-
- // Amount of time wifi is in sleep (ms)
- optional int64 sleep_time_ms = 11;
-
- // Amount of time wifi is scanning (ms)
- optional int64 scan_time_ms = 12;
-
- // Actual monitored rail energy consumed by wifi (mAh)
- optional double monitored_rail_energy_consumed_mah = 13;
-}
-
-// Metrics for Wifi Wake
-message WifiWakeStats {
- // An individual session for Wifi Wake
- message Session {
- // A Wifi Wake lifecycle event
- message Event {
- // Elapsed time in milliseconds since start of session.
- optional int64 elapsed_time_millis = 1;
-
- // Number of scans that have occurred since start of session.
- optional int32 elapsed_scans = 2;
- }
-
- // Start time of session in milliseconds.
- optional int64 start_time_millis = 1;
-
- // The number of networks the lock was provided with at start.
- optional int32 locked_networks_at_start = 2;
-
- // The number of networks in the lock at the time of the initialize event. Only valid if
- // initialize_event is recorded.
- optional int32 locked_networks_at_initialize = 6;
-
- // Event for fully initializing the WakeupLock (i.e. WakeupLock is "locked").
- optional Event initialize_event = 7;
-
- // Event for unlocking the WakeupLock. Does not occur if lock was initialized with 0 networks.
- optional Event unlock_event = 3;
-
- // Event for triggering wakeup.
- optional Event wakeup_event = 4;
-
- // Event for WifiWake reset event. This event marks the end of a session.
- optional Event reset_event = 5;
- }
-
- // Total number of sessions for Wifi Wake.
- optional int32 num_sessions = 1;
-
- // Session information for every Wifi Wake session (up to a maximum of 10).
- repeated Session sessions = 2;
-
- // Number of ignored calls to start (due to WakeupController already being active).
- optional int32 num_ignored_starts = 3;
-
- // Number of Wifi Wake sessions that have recorded wakeup events.
- optional int32 num_wakeups = 4;
-}
-
-// Metrics for Wi-Fi RTT
-message WifiRttLog {
- // Number of RTT request API calls
- optional int32 num_requests = 1;
-
- // Histogram of RTT operation overall status
- repeated RttOverallStatusHistogramBucket histogram_overall_status = 2;
-
- // RTT to Access Points metrics
- optional RttToPeerLog rtt_to_ap = 3;
-
- // RTT to Wi-Fi Aware peers metrics
- optional RttToPeerLog rtt_to_aware = 4;
-
- // Metrics for a RTT to Peer (peer = AP or Wi-Fi Aware)
- message RttToPeerLog {
- // Total number of API calls
- optional int32 num_requests = 1;
-
- // Total number of individual requests
- optional int32 num_individual_requests = 2;
-
- // Total number of apps which requested RTT
- optional int32 num_apps = 3;
-
- // Histogram of total number of RTT requests by an app (WifiRttManager#startRanging)
- repeated HistogramBucket histogram_num_requests_per_app = 4;
-
- // Histogram of number of peers in a single RTT request (RangingRequest entries)
- repeated HistogramBucket histogram_num_peers_per_request = 5;
-
- // Histogram of status of individual RTT operations (RangingResult entries)
- repeated RttIndividualStatusHistogramBucket histogram_individual_status = 6;
-
- // Histogram of measured distances (RangingResult entries)
- repeated HistogramBucket histogram_distance = 7;
-
- // Histogram of interval of RTT requests by an app (WifiRttManager#startRanging)
- repeated HistogramBucket histogram_request_interval_ms = 8;
- }
-
- // Histogram bucket for Wi-Fi RTT logs. Range is [start, end)
- message HistogramBucket {
- // lower range of the bucket (inclusive)
- optional int64 start = 1;
-
- // upper range of the bucket (exclusive)
- optional int64 end = 2;
-
- // number of samples in the bucket
- optional int32 count = 3;
- }
-
- // Status codes for overall RTT operation
- enum RttOverallStatusTypeEnum {
- // constant to be used by proto
- OVERALL_UNKNOWN = 0;
-
- // RTT operation succeeded (individual results may still fail)
- OVERALL_SUCCESS = 1;
-
- // RTT operation failed (unspecified reason)
- OVERALL_FAIL = 2;
-
- // RTT operation failed since RTT was not available (e.g. Airplane mode)
- OVERALL_RTT_NOT_AVAILABLE = 3;
-
- // RTT operation timed-out: didn't receive response from HAL in expected time
- OVERALL_TIMEOUT = 4;
-
- // RTT operation aborted since the app is spamming the service
- OVERALL_THROTTLE = 5;
-
- // RTT request to HAL received immediate failure
- OVERALL_HAL_FAILURE = 6;
-
- // RTT to Wi-Fi Aware peer using PeerHandle failed to get a MAC address translation
- OVERALL_AWARE_TRANSLATION_FAILURE = 7;
-
- // RTT operation failed due to missing Location permission (post execution)
- OVERALL_LOCATION_PERMISSION_MISSING = 8;
- }
-
- // Status codes for individual RTT operation
- enum RttIndividualStatusTypeEnum {
- // constant to be used by proto
- UNKNOWN = 0;
-
- // RTT operation succeeded
- SUCCESS = 1;
-
- // RTT failure: generic reason (no further information)
- FAILURE = 2;
-
- // Target STA does not respond to request
- FAIL_NO_RSP = 3;
-
- // Request rejected. Applies to 2-sided RTT only
- FAIL_REJECTED = 4;
-
- // Operation not scheduled
- FAIL_NOT_SCHEDULED_YET = 5;
-
- // Timing measurement times out
- FAIL_TM_TIMEOUT = 6;
-
- // Target on different channel, cannot range
- FAIL_AP_ON_DIFF_CHANNEL = 7;
-
- // Ranging not supported
- FAIL_NO_CAPABILITY = 8;
-
- // Request aborted for unknown reason
- ABORTED = 9;
-
- // Invalid T1-T4 timestamp
- FAIL_INVALID_TS = 10;
-
- // 11mc protocol failed
- FAIL_PROTOCOL = 11;
-
- // Request could not be scheduled
- FAIL_SCHEDULE = 12;
-
- // Responder cannot collaborate at time of request
- FAIL_BUSY_TRY_LATER = 13;
-
- // Bad request args
- INVALID_REQ = 14;
-
- // WiFi not enabled
- NO_WIFI = 15;
-
- // Responder overrides param info, cannot range with new params
- FAIL_FTM_PARAM_OVERRIDE = 16;
-
- // HAL did not provide a result to a framework request
- MISSING_RESULT = 17;
- }
-
- // Histogram bucket for Wi-Fi RTT overall operation status
- message RttOverallStatusHistogramBucket {
- // status type defining the bucket
- optional RttOverallStatusTypeEnum status_type = 1;
-
- // number of samples in the bucket
- optional int32 count = 2;
- }
-
- // Histogram bucket for Wi-Fi RTT individual operation status
- message RttIndividualStatusHistogramBucket {
- // status type defining the bucket
- optional RttIndividualStatusTypeEnum status_type = 1;
-
- // number of samples in the bucket
- optional int32 count = 2;
- }
-}
-
-// Usage data for the wifi radio while device is running on battery.
-message WifiRadioUsage {
- // Duration of log (ms)
- optional int64 logging_duration_ms = 1;
-
- // Total time for which the radio is awake due to scan.
- optional int64 scan_time_ms = 2;
-}
-
-message ExperimentValues {
- // Indicates if we are logging WifiIsUnusableEvent in metrics
- optional bool wifi_is_unusable_logging_enabled = 1;
-
- // Minimum number of txBad to trigger a data stall
- optional int32 wifi_data_stall_min_tx_bad = 2;
-
- // Minimum number of txSuccess to trigger a data stall
- // when rxSuccess is 0
- optional int32 wifi_data_stall_min_tx_success_without_rx = 3;
-
- // Indicates if we are logging LinkSpeedCount in metrics
- optional bool link_speed_counts_logging_enabled = 4;
-
- // Duration for evaluating Wifi condition to trigger a data stall
- // measured in milliseconds
- optional int32 data_stall_duration_ms = 5;
-
- // Threshold of Tx throughput below which to trigger a data stall
- // measured in Kbps
- optional int32 data_stall_tx_tput_thr_kbps = 6;
-
- // Threshold of Rx throughput below which to trigger a data stall
- // measured in Kbps
- optional int32 data_stall_rx_tput_thr_kbps = 7;
-
- // Threshold of Tx packet error rate above which to trigger a data stall
- // in percentage
- optional int32 data_stall_tx_per_thr = 8;
-
- // Threshold of CCA level above which to trigger a data stall in percentage
- optional int32 data_stall_cca_level_thr = 9;
-}
-
-message WifiIsUnusableEvent {
- enum TriggerType {
- // Default/Invalid event
- TYPE_UNKNOWN = 0;
-
- // There is a data stall from tx failures
- TYPE_DATA_STALL_BAD_TX = 1;
-
- // There is a data stall from rx failures
- TYPE_DATA_STALL_TX_WITHOUT_RX = 2;
-
- // There is a data stall from both tx and rx failures
- TYPE_DATA_STALL_BOTH = 3;
-
- // Firmware generated an alert
- TYPE_FIRMWARE_ALERT = 4;
-
- // IP Manager lost reachability to network neighbors
- TYPE_IP_REACHABILITY_LOST = 5;
- }
-
- // What event triggered WifiIsUnusableEvent.
- optional TriggerType type = 1;
-
- // The timestamp at which this event occurred.
- // Measured in milliseconds that have elapsed since the device booted.
- optional int64 start_time_millis = 2;
-
- // NetworkAgent score of connected wifi.
- // Defaults to -1 if the score was never set.
- optional int32 last_score = 3 [default = -1];
-
- // Delta of successfully transmitted (ACKed) unicast data packets
- // between the last two WifiLinkLayerStats.
- optional int64 tx_success_delta = 4;
-
- // Delta of transmitted unicast data retry packets
- // between the last two WifiLinkLayerStats.
- optional int64 tx_retries_delta = 5;
-
- // Delta of lost (not ACKed) transmitted unicast data packets
- // between the last two WifiLinkLayerStats.
- optional int64 tx_bad_delta = 6;
-
- // Delta of received unicast data packets
- // between the last two WifiLinkLayerStats.
- optional int64 rx_success_delta = 7;
-
- // Time in millisecond between the last two WifiLinkLayerStats.
- optional int64 packet_update_time_delta = 8;
-
- // The timestamp at which the last WifiLinkLayerStats was updated.
- // Measured in milliseconds that have elapsed since the device booted.
- optional int64 last_link_layer_stats_update_time = 9;
-
- // Firmware alert code. Only valid when the event was triggered by a firmware alert, otherwise -1.
- optional int32 firmware_alert_code = 10 [default = -1];
-
- // NetworkAgent wifi usability score of connected wifi.
- // Defaults to -1 if the score was never set.
- optional int32 last_wifi_usability_score = 11 [default = -1];
-
- // Prediction horizon (in second) of Wifi usability score provided by external
- // system app
- optional int32 last_prediction_horizon_sec = 12 [default = -1];
-
- // Whether screen status is on when WifiIsUnusableEvent happens.
- optional bool screen_on = 13 [default = false];
-}
-
-message PasspointProfileTypeCount {
- enum EapMethod {
- // Unknown Type
- TYPE_UNKNOWN = 0;
-
- // EAP_TLS (13)
- TYPE_EAP_TLS = 1;
-
- // EAP_TTLS (21)
- TYPE_EAP_TTLS = 2;
-
- // EAP_SIM (18)
- TYPE_EAP_SIM = 3;
-
- // EAP_AKA (23)
- TYPE_EAP_AKA = 4;
-
- // EAP_AKA_PRIME (50)
- TYPE_EAP_AKA_PRIME = 5;
- }
-
- // Eap method type set in Passpoint profile
- optional EapMethod eap_method_type = 1;
-
- // Num of installed Passpoint profile with same eap method
- optional int32 count = 2;
-}
-
-message WifiLinkLayerUsageStats {
- // Total logging duration in ms.
- optional int64 logging_duration_ms = 1;
-
- // Total time the wifi radio is on in ms over the logging duration.
- optional int64 radio_on_time_ms = 2;
-
- // Total time the wifi radio is doing tx in ms over the logging duration.
- optional int64 radio_tx_time_ms = 3;
-
- // Total time the wifi radio is doing rx in ms over the logging duration.
- optional int64 radio_rx_time_ms = 4;
-
- // Total time the wifi radio is scanning in ms over the logging duration.
- optional int64 radio_scan_time_ms = 5;
-
- // Total time the wifi radio spent doing nan scans in ms over the logging duration.
- optional int64 radio_nan_scan_time_ms = 6;
-
- // Total time the wifi radio spent doing background scans in ms over the logging duration.
- optional int64 radio_background_scan_time_ms = 7;
-
- // Total time the wifi radio spent doing roam scans in ms over the logging duration.
- optional int64 radio_roam_scan_time_ms = 8;
-
- // Total time the wifi radio spent doing pno scans in ms over the logging duration.
- optional int64 radio_pno_scan_time_ms = 9;
-
- // Total time the wifi radio spent doing hotspot 2.0 scans and GAS exchange
- // in ms over the logging duration.
- optional int64 radio_hs20_scan_time_ms = 10;
-}
-
-message WifiUsabilityStatsEntry {
- // Status codes for link probe status
- enum LinkProbeStatus {
- // Link probe status is unknown
- PROBE_STATUS_UNKNOWN = 0;
-
- // Link probe is not triggered
- PROBE_STATUS_NO_PROBE = 1;
-
- // Link probe is triggered and the result is success
- PROBE_STATUS_SUCCESS = 2;
-
- // Link probe is triggered and the result is failure
- PROBE_STATUS_FAILURE = 3;
- }
-
- // Codes for cellular data network type
- enum CellularDataNetworkType {
- // Unknown network
- NETWORK_TYPE_UNKNOWN = 0;
-
- // GSM network
- NETWORK_TYPE_GSM = 1;
-
- // CDMA network
- NETWORK_TYPE_CDMA = 2;
-
- // CDMA EVDO network
- NETWORK_TYPE_EVDO_0 = 3;
-
- // WCDMA network
- NETWORK_TYPE_UMTS = 4;
-
- // TDSCDMA network
- NETWORK_TYPE_TD_SCDMA = 5;
-
- // LTE network
- NETWORK_TYPE_LTE = 6;
-
- // NR network
- NETWORK_TYPE_NR = 7;
- }
-
- // Absolute milliseconds from device boot when these stats were sampled
- optional int64 time_stamp_ms = 1;
-
- // The RSSI at the sample time
- optional int32 rssi = 2;
-
- // Link speed at the sample time in Mbps
- optional int32 link_speed_mbps = 3;
-
- // The total number of tx success counted from the last radio chip reset
- optional int64 total_tx_success = 4;
-
- // The total number of MPDU data packet retries counted from the last radio chip reset
- optional int64 total_tx_retries = 5;
-
- // The total number of tx bad counted from the last radio chip reset
- optional int64 total_tx_bad = 6;
-
- // The total number of rx success counted from the last radio chip reset
- optional int64 total_rx_success = 7;
-
- // The total time the wifi radio is on in ms counted from the last radio chip reset
- optional int64 total_radio_on_time_ms = 8;
-
- // The total time the wifi radio is doing tx in ms counted from the last radio chip reset
- optional int64 total_radio_tx_time_ms = 9;
-
- // The total time the wifi radio is doing rx in ms counted from the last radio chip reset
- optional int64 total_radio_rx_time_ms = 10;
-
- // The total time spent on all types of scans in ms counted from the last radio chip reset
- optional int64 total_scan_time_ms = 11;
-
- // The total time spent on nan scans in ms counted from the last radio chip reset
- optional int64 total_nan_scan_time_ms = 12;
-
- // The total time spent on background scans in ms counted from the last radio chip reset
- optional int64 total_background_scan_time_ms = 13;
-
- // The total time spent on roam scans in ms counted from the last radio chip reset
- optional int64 total_roam_scan_time_ms = 14;
-
- // The total time spent on pno scans in ms counted from the last radio chip reset
- optional int64 total_pno_scan_time_ms = 15;
-
- // The total time spent on hotspot2.0 scans and GAS exchange in ms counted from the last radio
- // chip reset
- optional int64 total_hotspot_2_scan_time_ms = 16;
-
- // Internal framework Wifi score
- optional int32 wifi_score = 17;
-
- // Wifi usability score provided by external system app
- optional int32 wifi_usability_score = 18;
-
- // Sequence number from external system app to framework
- optional int32 seq_num_to_framework = 19;
-
- // The total time CCA is on busy status on the current frequency in ms
- // counted from the last radio chip reset
- optional int64 total_cca_busy_freq_time_ms = 20;
-
- // The total radio on time of the current frequency from the last radio
- // chip reset
- optional int64 total_radio_on_freq_time_ms = 21;
-
- // The total number of beacons received from the last radio chip reset
- optional int64 total_beacon_rx = 22;
-
- // Prediction horizon (in second) of Wifi usability score provided by external
- // system app
- optional int32 prediction_horizon_sec = 23;
-
- // The link probe status since last stats update
- optional LinkProbeStatus probe_status_since_last_update = 24;
-
- // The elapsed time of the most recent link probe since last stats update;
- optional int32 probe_elapsed_time_since_last_update_ms = 25;
-
- // The MCS rate of the most recent link probe since last stats update
- optional int32 probe_mcs_rate_since_last_update = 26;
-
- // Rx link speed at the sample time in Mbps
- optional int32 rx_link_speed_mbps = 27;
-
- // Sequence number generated by framework
- optional int32 seq_num_inside_framework = 28;
-
- // Whether current entry is for the same BSSID on the same frequency compared
- // to last entry
- optional bool is_same_bssid_and_freq = 29;
-
- // Cellular data network type currently in use on the device for data transmission
- optional CellularDataNetworkType cellular_data_network_type = 30;
-
- // Cellular signal strength in dBm, NR: CsiRsrp, LTE: Rsrp, WCDMA/TDSCDMA: Rscp,
- // CDMA: Rssi, EVDO: Rssi, GSM: Rssi
- optional int32 cellular_signal_strength_dbm = 31;
-
- // Cellular signal strength in dB, NR: CsiSinr, LTE: Rsrq, WCDMA: EcNo, TDSCDMA: invalid,
- // CDMA: Ecio, EVDO: SNR, GSM: invalid */
- optional int32 cellular_signal_strength_db = 32;
-
- // Whether the primary registered cell of current entry is same as that of previous entry
- optional bool is_same_registered_cell = 33;
-
- // The device mobility state
- optional DeviceMobilityStatePnoScanStats.DeviceMobilityState
- device_mobility_state = 34;
-}
-
-message WifiUsabilityStats {
- enum Label {
- // Default label
- LABEL_UNKNOWN = 0;
-
- // Wifi is usable
- LABEL_GOOD = 1;
-
- // Wifi is unusable
- LABEL_BAD = 2;
- }
-
- enum UsabilityStatsTriggerType {
- // Default/Invalid event
- TYPE_UNKNOWN = 0;
-
- // There is a data stall from tx failures
- TYPE_DATA_STALL_BAD_TX = 1;
-
- // There is a data stall from rx failures
- TYPE_DATA_STALL_TX_WITHOUT_RX = 2;
-
- // There is a data stall from both tx and rx failures
- TYPE_DATA_STALL_BOTH = 3;
-
- // Firmware generated an alert
- TYPE_FIRMWARE_ALERT = 4;
-
- // IP Manager lost reachability to network neighbors
- TYPE_IP_REACHABILITY_LOST = 5;
- }
-
- // The current wifi usability state
- optional Label label = 1;
-
- // The list of timestamped wifi usability stats
- repeated WifiUsabilityStatsEntry stats = 2;
-
- // What event triggered WifiUsabilityStats.
- optional UsabilityStatsTriggerType trigger_type = 3;
-
- // Firmware alert code. Only valid when the stats was triggered by a firmware
- // alert, otherwise -1.
- optional int32 firmware_alert_code = 4 [default = -1];
-
- // Absolute milliseconds from device boot when these stats were sampled
- optional int64 time_stamp_ms = 5;
-}
-
-message DeviceMobilityStatePnoScanStats {
- // see WifiManager.DEVICE_MOBILITY_STATE_* constants
- enum DeviceMobilityState {
- // Unknown mobility
- UNKNOWN = 0;
-
- // High movement
- HIGH_MVMT = 1;
-
- // Low movement
- LOW_MVMT = 2;
-
- // Stationary
- STATIONARY = 3;
- }
-
- // The device mobility state
- optional DeviceMobilityState device_mobility_state = 1;
-
- // The number of times that this state was entered
- optional int32 num_times_entered_state = 2;
-
- // The total duration elapsed while in this mobility state, in ms
- optional int64 total_duration_ms = 3;
-
- // the total duration elapsed while in this mobility state with PNO scans running, in ms
- optional int64 pno_duration_ms = 4;
-}
-
-// The information about the Wifi P2p events.
-message WifiP2pStats {
-
- // Group event list tracking sessions and client counts in tethered mode.
- repeated GroupEvent group_event = 1;
-
- // Session information that gets logged for every Wifi P2p connection.
- repeated P2pConnectionEvent connection_event = 2;
-
- // Number of persistent group in the user profile.
- optional int32 num_persistent_group = 3;
-
- // Number of peer scan.
- optional int32 num_total_peer_scans = 4;
-
- // Number of service scan.
- optional int32 num_total_service_scans = 5;
-}
-
-message P2pConnectionEvent {
-
- enum ConnectionType {
-
- // fresh new connection.
- CONNECTION_FRESH = 0;
-
- // reinvoke a group.
- CONNECTION_REINVOKE = 1;
-
- // create a group with the current device as the group owner locally.
- CONNECTION_LOCAL = 2;
-
- // create a group or join a group with config.
- CONNECTION_FAST = 3;
- }
-
- enum ConnectivityLevelFailure {
-
- // Failure is unknown.
- CLF_UNKNOWN = 0;
-
- // No failure.
- CLF_NONE = 1;
-
- // Timeout for current connecting request.
- CLF_TIMEOUT = 2;
-
- // The connecting request is canceled by the user.
- CLF_CANCEL = 3;
-
- // Provision discovery failure, e.g. no pin code, timeout, rejected by the peer.
- CLF_PROV_DISC_FAIL = 4;
-
- // Invitation failure, e.g. rejected by the peer.
- CLF_INVITATION_FAIL = 5;
-
- // Incoming request is rejected by the user.
- CLF_USER_REJECT = 6;
-
- // New connection request is issued before ending previous connecting request.
- CLF_NEW_CONNECTION_ATTEMPT = 7;
- }
-
- // WPS method.
- enum WpsMethod {
- // WPS is skipped for Group Reinvoke.
- WPS_NA = -1;
-
- // Push button configuration.
- WPS_PBC = 0;
-
- // Display pin method configuration - pin is generated and displayed on device.
- WPS_DISPLAY = 1;
-
- // Keypad pin method configuration - pin is entered on device.
- WPS_KEYPAD = 2;
-
- // Label pin method configuration - pin is labelled on device.
- WPS_LABEL = 3;
- }
-
- // Start time of the connection.
- optional int64 start_time_millis = 1;
-
- // Type of the connection.
- optional ConnectionType connection_type = 2;
-
- // WPS method.
- optional WpsMethod wps_method = 3 [default = WPS_NA];
-
- // Duration to connect.
- optional int32 duration_taken_to_connect_millis = 4;
-
- // Failures that happen at the connectivity layer.
- optional ConnectivityLevelFailure connectivity_level_failure_code = 5;
-}
-
-// GroupEvent tracking group information from GroupStarted to GroupRemoved.
-message GroupEvent {
-
- enum GroupRole {
-
- GROUP_OWNER = 0;
-
- GROUP_CLIENT = 1;
- }
-
- // The ID of network in supplicant for this group.
- optional int32 net_id = 1;
-
- // Start time of the group.
- optional int64 start_time_millis = 2;
-
- // Channel frequency used for Group.
- optional int32 channel_frequency = 3;
-
- // Is group owner or group client.
- optional GroupRole group_role = 5;
-
- // Number of connected clients.
- optional int32 num_connected_clients = 6;
-
- // Cumulative number of connected clients.
- optional int32 num_cumulative_clients = 7;
-
- // The session duration.
- optional int32 session_duration_millis = 8;
-
- // The idle duration. A group without any client is in idle.
- optional int32 idle_duration_millis = 9;
-}
-
-// Easy Connect (DPP)
-message WifiDppLog {
- reserved 6;
-
- // Number of Configurator-Initiator requests
- optional int32 num_dpp_configurator_initiator_requests = 1;
-
- // Number of Enrollee-Initiator requests
- optional int32 num_dpp_enrollee_initiator_requests = 2;
-
- // Easy Connect (DPP) Enrollee success
- optional int32 num_dpp_enrollee_success = 3;
-
- // Easy Connect (DPP) Configurator success code bucket
- repeated DppConfiguratorSuccessStatusHistogramBucket dpp_configurator_success_code = 4;
-
- // Easy Connect (DPP) failure code bucket
- repeated DppFailureStatusHistogramBucket dpp_failure_code = 5;
-
- // Easy Connect (DPP) operation time bucket
- repeated HistogramBucketInt32 dpp_operation_time = 7;
-
- // Histogram bucket for Wi-Fi DPP configurator success
- message DppConfiguratorSuccessStatusHistogramBucket {
- // status type defining the bucket
- optional DppConfiguratorSuccessCode dpp_status_type = 1;
-
- // number of samples in the bucket
- optional int32 count = 2;
- }
-
- // Histogram bucket for Wi-Fi DPP failures
- message DppFailureStatusHistogramBucket {
- // status type defining the bucket
- optional DppFailureCode dpp_status_type = 1;
-
- // number of samples in the bucket
- optional int32 count = 2;
- }
-
- enum DppConfiguratorSuccessCode {
- // Unknown success code
- EASY_CONNECT_EVENT_SUCCESS_UNKNOWN = 0;
-
- // Easy Connect Configurator success event: Configuration sent to enrollee
- EASY_CONNECT_EVENT_SUCCESS_CONFIGURATION_SENT = 1;
- }
-
- enum DppFailureCode {
- // Unknown failure
- EASY_CONNECT_EVENT_FAILURE_UNKNOWN = 0;
-
- // Easy Connect Failure event: Scanned QR code is either not a Easy Connect URI, or the Easy
- // Connect URI has errors.
- EASY_CONNECT_EVENT_FAILURE_INVALID_URI = 1;
-
- // Easy Connect Failure event: Bootstrapping/Authentication initialization process failure.
- EASY_CONNECT_EVENT_FAILURE_AUTHENTICATION = 2;
-
- // Easy Connect Failure event: Both devices are implementing the same role and are
- // incompatible.
- EASY_CONNECT_EVENT_FAILURE_NOT_COMPATIBLE = 3;
-
- // Easy Connect Failure event: Configuration process has failed due to malformed message.
- EASY_CONNECT_EVENT_FAILURE_CONFIGURATION = 4;
-
- // Easy Connect Failure event: Easy Connect request while in another Easy Connect exchange.
- EASY_CONNECT_EVENT_FAILURE_BUSY = 5;
-
- // Easy Connect Failure event: No response from the peer.
- EASY_CONNECT_EVENT_FAILURE_TIMEOUT = 6;
-
- // Easy Connect Failure event: General protocol failure.
- EASY_CONNECT_EVENT_FAILURE_GENERIC = 7;
-
- // Easy Connect Failure event: Feature or option is not supported.
- EASY_CONNECT_EVENT_FAILURE_NOT_SUPPORTED = 8;
-
- // Easy Connect Failure event: Invalid network provided to Easy Connect configurator.
- // Network must either be WPA3-Personal (SAE) or WPA2-Personal (PSK).
- EASY_CONNECT_EVENT_FAILURE_INVALID_NETWORK = 9;
- }
-}
-
-// WifiConfigStore read/write metrics.
-message WifiConfigStoreIO {
- // Histogram of config store read durations.
- repeated DurationBucket read_durations = 1;
-
- // Histogram of config store write durations.
- repeated DurationBucket write_durations = 2;
-
- // Total Number of instances of write/read duration in this duration bucket.
- message DurationBucket {
- // Bucket covers duration : [range_start_ms, range_end_ms)
- // The (inclusive) lower bound of read/write duration represented by this bucket
- optional int32 range_start_ms = 1;
-
- // The (exclusive) upper bound of read/write duration represented by this bucket
- optional int32 range_end_ms = 2;
-
- // Number of read/write durations that fit into this bucket
- optional int32 count = 3;
- }
-}
-
-// Histogram bucket counting with int32. Range is [start, end)
-message HistogramBucketInt32 {
- // lower range of the bucket (inclusive)
- optional int32 start = 1;
-
- // upper range of the bucket (exclusive)
- optional int32 end = 2;
-
- // number of samples in the bucket
- optional int32 count = 3;
-}
-
-// Counts occurrences of a int32 key
-message Int32Count {
- // the key
- optional int32 key = 1;
-
- // the count
- optional int32 count = 2;
-}
-
-message LinkProbeStats {
- enum LinkProbeFailureReason {
- // unknown reason
- LINK_PROBE_FAILURE_REASON_UNKNOWN = 0;
-
- // Specified MCS rate when it is unsupported by the driver.
- LINK_PROBE_FAILURE_REASON_MCS_UNSUPPORTED = 1;
-
- // Driver reported that no ACK was received for the transmitted probe.
- LINK_PROBE_FAILURE_REASON_NO_ACK = 2;
-
- // Driver failed to report on the status of the transmitted probe within the timeout.
- LINK_PROBE_FAILURE_REASON_TIMEOUT = 3;
-
- // An existing link probe is in progress.
- LINK_PROBE_FAILURE_REASON_ALREADY_STARTED = 4;
- }
-
- // Counts the number of failures for each failure reason.
- message LinkProbeFailureReasonCount {
- // The failure reason.
- optional LinkProbeFailureReason failure_reason = 1;
-
- // The number of occurrences for this failure reason.
- optional int32 count = 2;
- }
-
- // Counts the number of link probes for each experiment.
- message ExperimentProbeCounts {
- // The experiment ID.
- optional string experiment_id = 1;
-
- // The number of link probes triggered for this experiment.
- optional int32 probe_count = 2;
- }
-
- // Counts the occurrences of RSSI values when a link probe succeeds.
- repeated Int32Count success_rssi_counts = 1;
-
- // Counts the occurrences of RSSI values when a link probe fails.
- repeated Int32Count failure_rssi_counts = 2;
-
- // Counts the occurrences of Link Speed values when a link probe succeeds.
- repeated Int32Count success_link_speed_counts = 3;
-
- // Counts the occurrences of Link Speed values when a link probe fails.
- repeated Int32Count failure_link_speed_counts = 4;
-
- // Histogram for the number of seconds since the last TX success when a link probe succeeds.
- repeated HistogramBucketInt32 success_seconds_since_last_tx_success_histogram = 5;
-
- // Histogram for the number of seconds since the last TX success when a link probe fails.
- repeated HistogramBucketInt32 failure_seconds_since_last_tx_success_histogram = 6;
-
- // Histogram for the elapsed time of successful link probes, in ms.
- repeated HistogramBucketInt32 success_elapsed_time_ms_histogram = 7;
-
- // Counts the occurrences of error codes for failed link probes.
- repeated LinkProbeFailureReasonCount failure_reason_counts = 8;
-
- // Counts the number of link probes for each experiment.
- repeated ExperimentProbeCounts experiment_probe_counts = 9;
-}
-
-// Stores the decisions that were made by a experiment when compared against another experiment
-message NetworkSelectionExperimentDecisions {
- // the id of one experiment
- optional int32 experiment1_id = 1;
-
- // the id of the other experiment
- optional int32 experiment2_id = 2;
-
- // Counts occurrences of the number of network choices there were when experiment1 makes the
- // same network selection as experiment2.
- // The keys are the number of network choices, and the values are the number of occurrences of
- // this number of network choices when exp1 and exp2 make the same network selection.
- repeated Int32Count same_selection_num_choices_counter = 3;
-
- // Counts occurrences of the number of network choices there were when experiment1 makes the
- // same network selection as experiment2.
- // The keys are the number of network choices, and the values are the number of occurrences of
- // this number of network choices when exp1 and exp2 make different network selections.
- // Note that it is possible for the network selection to be different even when there only exists
- // a single network choice, since choosing not to connect to that network is a valid choice.
- repeated Int32Count different_selection_num_choices_counter = 4;
-}
-
-// NetworkRequest API metrics.
-message WifiNetworkRequestApiLog {
- // Number of requests via this API surface.
- optional int32 num_request = 1;
-
- // Histogram of requests via this API surface to number of networks matched in scan results.
- repeated HistogramBucketInt32 network_match_size_histogram = 2;
-
- // Number of successful network connection from this API.
- optional int32 num_connect_success = 3;
-
- // Number of requests via this API surface that bypassed user approval.
- optional int32 num_user_approval_bypass = 4;
-
- // Number of requests via this API surface that was rejected by the user.
- optional int32 num_user_reject = 5;
-
- // Number of unique apps using this API surface.
- optional int32 num_apps = 6;
-}
-
-// NetworkSuggestion API metrics.
-message WifiNetworkSuggestionApiLog {
- // Number of modifications to their suggestions by apps.
- optional int32 num_modification = 1;
-
- // Number of successful network connection from app suggestions.
- optional int32 num_connect_success = 2;
-
- // Number of network connection failures from app suggestions.
- optional int32 num_connect_failure = 3;
-
- // Histogram for size of the network lists provided by various apps on the device.
- repeated HistogramBucketInt32 network_list_size_histogram = 4;
-}
-
-// WifiLock metrics
-message WifiLockStats {
- // Amount of time wifi is actively in HIGH_PERF mode (ms)
- // This means the lock takes effect and the device takes the actions required for this mode
- optional int64 high_perf_active_time_ms = 1;
-
- // Amount of time wifi is actively in LOW_LATENCY mode (ms)
- // This means the lock takes effect and the device takes the actions required for this mode
- optional int64 low_latency_active_time_ms = 2;
-
- // Histogram of HIGH_PERF lock acquisition duration (seconds)
- // Note that acquiring the lock does not necessarily mean that device is actively in that mode
- repeated HistogramBucketInt32 high_perf_lock_acq_duration_sec_histogram = 3;
-
- // Histogram of LOW_LATENCY lock acquisition duration (seconds)
- // Note that acquiring the lock does not necessarily mean that device is actively in that mode
- repeated HistogramBucketInt32 low_latency_lock_acq_duration_sec_histogram = 4;
-
- // Histogram of HIGH_PERF active session duration (seconds)
- // This means the lock takes effect and the device takes the actions required for this mode
- repeated HistogramBucketInt32 high_perf_active_session_duration_sec_histogram = 5;
-
- // Histogram of LOW_LATENCY active session duration (seconds)
- // This means the lock takes effect and the device takes the actions required for this mode
- repeated HistogramBucketInt32 low_latency_active_session_duration_sec_histogram = 6;
-}
-
-// Stats on number of times Wi-Fi is turned on/off though the WifiManager#setWifiEnabled API
-message WifiToggleStats {
- // Number of time Wi-Fi is turned on by privileged apps
- optional int32 num_toggle_on_privileged = 1;
-
- // Number of time Wi-Fi is turned off by privileged apps
- optional int32 num_toggle_off_privileged = 2;
-
- // Number of time Wi-Fi is turned on by normal apps
- optional int32 num_toggle_on_normal = 3;
-
- // Number of time Wi-Fi is turned off by normal apps
- optional int32 num_toggle_off_normal = 4;
-}
-
-// Information about the Passpoint provision metrics.
-message PasspointProvisionStats {
- enum ProvisionFailureCode {
- // provisioning failure for unknown reason.
- OSU_FAILURE_UNKNOWN = 0;
-
- // The reason code for Provisioning Failure due to connection failure to OSU AP.
- OSU_FAILURE_AP_CONNECTION = 1;
-
- // The reason code for invalid server URL address.
- OSU_FAILURE_SERVER_URL_INVALID = 2;
-
- // The reason code for provisioning failure due to connection failure to the server.
- OSU_FAILURE_SERVER_CONNECTION = 3;
-
- // The reason code for provisioning failure due to invalid server certificate.
- OSU_FAILURE_SERVER_VALIDATION = 4;
-
- // The reason code for provisioning failure due to invalid service provider.
- OSU_FAILURE_SERVICE_PROVIDER_VERIFICATION = 5;
-
- // The reason code for provisioning failure when a provisioning flow is aborted.
- OSU_FAILURE_PROVISIONING_ABORTED = 6;
-
- // The reason code for provisioning failure when a provisioning flow is not possible.
- OSU_FAILURE_PROVISIONING_NOT_AVAILABLE = 7;
-
- // The reason code for provisioning failure due to invalid web url format for an OSU web page.
- OSU_FAILURE_INVALID_URL_FORMAT_FOR_OSU = 8;
-
- // The reason code for provisioning failure when a command received is not the expected command
- // type.
- OSU_FAILURE_UNEXPECTED_COMMAND_TYPE = 9;
-
- // The reason code for provisioning failure when a SOAP message is not the expected message
- // type.
- OSU_FAILURE_UNEXPECTED_SOAP_MESSAGE_TYPE = 10;
-
- // The reason code for provisioning failure when a SOAP message exchange fails.
- OSU_FAILURE_SOAP_MESSAGE_EXCHANGE = 11;
-
- // The reason code for provisioning failure when a redirect listener fails to start.
- OSU_FAILURE_START_REDIRECT_LISTENER = 12;
-
- // The reason code for provisioning failure when a redirect listener timed out to receive a HTTP
- // redirect response.
- OSU_FAILURE_TIMED_OUT_REDIRECT_LISTENER = 13;
-
- // The reason code for provisioning failure when there is no OSU activity to listen to intent.
- OSU_FAILURE_NO_OSU_ACTIVITY_FOUND = 14;
-
- // The reason code for provisioning failure when the status of a SOAP message is not the
- // expected message status.
- OSU_FAILURE_UNEXPECTED_SOAP_MESSAGE_STATUS = 15;
-
- // The reason code for provisioning failure when there is no PPS MO.
- OSU_FAILURE_NO_PPS_MO = 16;
-
- // The reason code for provisioning failure when there is no AAAServerTrustRoot node in a PPS
- // MO.
- OSU_FAILURE_NO_AAA_SERVER_TRUST_ROOT_NODE = 17;
-
- // The reason code for provisioning failure when there is no TrustRoot node for remediation
- // server in a PPS MO.
- OSU_FAILURE_NO_REMEDIATION_SERVER_TRUST_ROOT_NODE = 18;
-
- // The reason code for provisioning failure when there is no TrustRoot node for policy server in
- // a PPS MO.
- OSU_FAILURE_NO_POLICY_SERVER_TRUST_ROOT_NODE = 19;
-
- // The reason code for provisioning failure when failing to retrieve trust root certificates
- // used for validating server certificate for AAA, Remediation and Policy server.
- OSU_FAILURE_RETRIEVE_TRUST_ROOT_CERTIFICATES = 20;
-
- // The reason code for provisioning failure when there is no trust root certificate for AAA
- // server.
- OSU_FAILURE_NO_AAA_TRUST_ROOT_CERTIFICATE = 21;
-
- // The reason code for provisioning failure when a {@link PasspointConfiguration} is failed to
- // install.
- OSU_FAILURE_ADD_PASSPOINT_CONFIGURATION = 22;
-
- // The reason code for provisioning failure when an {@link OsuProvider} is not found for
- // provisioning.
- OSU_FAILURE_OSU_PROVIDER_NOT_FOUND = 23;
- }
-
- // Number of passpoint provisioning success
- optional int32 num_provision_success = 1;
-
- // Count for passpoint provisioning failure
- repeated ProvisionFailureCount provision_failure_count = 2;
-
- // Number of occurrences of a specific passpoint provision failure code
- message ProvisionFailureCount {
- // Failure code
- optional ProvisionFailureCode failure_code = 1;
-
- // Number of failure for the failure_code.
- optional int32 count = 2;
- }
-}
diff --git a/services/core/java/com/android/server/GnssManagerService.java b/services/core/java/com/android/server/GnssManagerService.java
index 274e2f1..cbf2a62 100644
--- a/services/core/java/com/android/server/GnssManagerService.java
+++ b/services/core/java/com/android/server/GnssManagerService.java
@@ -67,7 +67,7 @@
/** Manages Gnss providers and related Gnss functions for LocationManagerService. */
public class GnssManagerService {
- private static final String TAG = "LocationManagerService";
+ private static final String TAG = "GnssManagerService";
private static final boolean D = Log.isLoggable(TAG, Log.DEBUG);
// Providers
@@ -124,7 +124,7 @@
// Can use this constructor to inject GnssLocationProvider for testing
@VisibleForTesting
- GnssManagerService(LocationManagerService locationManagerService,
+ public GnssManagerService(LocationManagerService locationManagerService,
Context context,
GnssLocationProvider gnssLocationProvider,
LocationUsageLogger locationUsageLogger) {
@@ -719,8 +719,10 @@
* @param listener called when navigation message is received
*/
public void removeGnssNavigationMessageListener(IGnssNavigationMessageListener listener) {
- removeGnssDataListener(
- listener, mGnssNavigationMessageProvider, mGnssNavigationMessageListeners);
+ synchronized (mGnssNavigationMessageListeners) {
+ removeGnssDataListener(
+ listener, mGnssNavigationMessageProvider, mGnssNavigationMessageListeners);
+ }
}
/**
diff --git a/services/core/java/com/android/server/LocationUsageLogger.java b/services/core/java/com/android/server/LocationUsageLogger.java
index 4ca74bf..a8a3cc4 100644
--- a/services/core/java/com/android/server/LocationUsageLogger.java
+++ b/services/core/java/com/android/server/LocationUsageLogger.java
@@ -30,7 +30,7 @@
/**
* Logger for Location API usage logging.
*/
-class LocationUsageLogger {
+public class LocationUsageLogger {
private static final String TAG = "LocationUsageLogger";
private static final boolean D = Log.isLoggable(TAG, Log.DEBUG);
diff --git a/services/core/java/com/android/server/display/color/ColorDisplayService.java b/services/core/java/com/android/server/display/color/ColorDisplayService.java
index 0bf43b6..2dc2cf0 100644
--- a/services/core/java/com/android/server/display/color/ColorDisplayService.java
+++ b/services/core/java/com/android/server/display/color/ColorDisplayService.java
@@ -589,16 +589,18 @@
if (immediate) {
dtm.setColorMatrix(tintController.getLevel(), to);
} else {
- tintController.setAnimator(ValueAnimator.ofObject(COLOR_MATRIX_EVALUATOR,
- from == null ? MATRIX_IDENTITY : from, to));
- tintController.getAnimator().setDuration(TRANSITION_DURATION);
- tintController.getAnimator().setInterpolator(AnimationUtils.loadInterpolator(
+ TintValueAnimator valueAnimator = TintValueAnimator.ofMatrix(COLOR_MATRIX_EVALUATOR,
+ from == null ? MATRIX_IDENTITY : from, to);
+ tintController.setAnimator(valueAnimator);
+ valueAnimator.setDuration(TRANSITION_DURATION);
+ valueAnimator.setInterpolator(AnimationUtils.loadInterpolator(
getContext(), android.R.interpolator.fast_out_slow_in));
- tintController.getAnimator().addUpdateListener((ValueAnimator animator) -> {
+ valueAnimator.addUpdateListener((ValueAnimator animator) -> {
final float[] value = (float[]) animator.getAnimatedValue();
dtm.setColorMatrix(tintController.getLevel(), value);
+ ((TintValueAnimator) animator).updateMinMaxComponents();
});
- tintController.getAnimator().addListener(new AnimatorListenerAdapter() {
+ valueAnimator.addListener(new AnimatorListenerAdapter() {
private boolean mIsCancelled;
@@ -609,9 +611,14 @@
@Override
public void onAnimationEnd(Animator animator) {
+ TintValueAnimator t = (TintValueAnimator) animator;
Slog.d(TAG, tintController.getClass().getSimpleName()
+ " Animation cancelled: " + mIsCancelled
- + " to matrix: " + TintController.matrixToString(to, 16));
+ + " to matrix: " + TintController.matrixToString(to, 16)
+ + " min matrix coefficients: "
+ + TintController.matrixToString(t.getMin(), 16)
+ + " max matrix coefficients: "
+ + TintController.matrixToString(t.getMax(), 16));
if (!mIsCancelled) {
// Ensure final color matrix is set at the end of the animation. If the
// animation is cancelled then don't set the final color matrix so the new
@@ -621,7 +628,7 @@
tintController.setAnimator(null);
}
});
- tintController.getAnimator().start();
+ valueAnimator.start();
}
}
@@ -1109,6 +1116,51 @@
}
/**
+ * Only animates matrices and saves min and max coefficients for logging.
+ */
+ static class TintValueAnimator extends ValueAnimator {
+ private float[] min;
+ private float[] max;
+
+ public static TintValueAnimator ofMatrix(ColorMatrixEvaluator evaluator,
+ Object... values) {
+ TintValueAnimator anim = new TintValueAnimator();
+ anim.setObjectValues(values);
+ anim.setEvaluator(evaluator);
+ if (values == null || values.length == 0) {
+ return null;
+ }
+ float[] m = (float[]) values[0];
+ anim.min = new float[m.length];
+ anim.max = new float[m.length];
+ for (int i = 0; i < m.length; ++i) {
+ anim.min[i] = Float.MAX_VALUE;
+ anim.max[i] = Float.MIN_VALUE;
+ }
+ return anim;
+ }
+
+ public void updateMinMaxComponents() {
+ float[] value = (float[]) getAnimatedValue();
+ if (value == null) {
+ return;
+ }
+ for (int i = 0; i < value.length; ++i) {
+ min[i] = Math.min(min[i], value[i]);
+ max[i] = Math.max(max[i], value[i]);
+ }
+ }
+
+ public float[] getMin() {
+ return min;
+ }
+
+ public float[] getMax() {
+ return max;
+ }
+ }
+
+ /**
* Interpolates between two 4x4 color transform matrices (in column-major order).
*/
private static class ColorMatrixEvaluator implements TypeEvaluator<float[]> {
diff --git a/services/core/java/com/android/server/display/color/TintController.java b/services/core/java/com/android/server/display/color/TintController.java
index 8d8b9b2..422dd32 100644
--- a/services/core/java/com/android/server/display/color/TintController.java
+++ b/services/core/java/com/android/server/display/color/TintController.java
@@ -24,14 +24,14 @@
abstract class TintController {
- private ValueAnimator mAnimator;
+ private ColorDisplayService.TintValueAnimator mAnimator;
private Boolean mIsActivated;
- public ValueAnimator getAnimator() {
+ public ColorDisplayService.TintValueAnimator getAnimator() {
return mAnimator;
}
- public void setAnimator(ValueAnimator animator) {
+ public void setAnimator(ColorDisplayService.TintValueAnimator animator) {
mAnimator = animator;
}
diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java
index 8bf01a3..11b9ac4 100644
--- a/services/core/java/com/android/server/location/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/GnssLocationProvider.java
@@ -67,6 +67,7 @@
import android.util.TimeUtils;
import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.IBatteryStats;
import com.android.internal.location.GpsNetInitiatedHandler;
import com.android.internal.location.GpsNetInitiatedHandler.GpsNiNotification;
@@ -304,6 +305,9 @@
private final ExponentialBackOff mPsdsBackOff = new ExponentialBackOff(RETRY_INTERVAL,
MAX_RETRY_INTERVAL);
+ private static boolean sIsInitialized = false;
+ private static boolean sStaticTestOverride = false;
+
// True if we are enabled
@GuardedBy("mLock")
private boolean mGpsEnabled;
@@ -576,7 +580,15 @@
}
}
+ @VisibleForTesting
+ public static void setIsSupportedForTest(boolean override) {
+ sStaticTestOverride = override;
+ }
+
public static boolean isSupported() {
+ if (sStaticTestOverride) {
+ return true;
+ }
return native_is_supported();
}
@@ -598,6 +610,13 @@
Looper looper) {
super(context, locationProviderManager);
+ synchronized (mLock) {
+ if (!sIsInitialized) {
+ class_init_native();
+ }
+ sIsInitialized = true;
+ }
+
mLooper = looper;
// Create a wake lock
@@ -2224,10 +2243,6 @@
// preallocated to avoid memory allocation in reportNmea()
private byte[] mNmeaBuffer = new byte[120];
- static {
- class_init_native();
- }
-
private static native void class_init_native();
private static native boolean native_is_supported();
diff --git a/services/core/java/com/android/server/location/GnssMeasurementsProvider.java b/services/core/java/com/android/server/location/GnssMeasurementsProvider.java
index ec05c31..55e427f 100644
--- a/services/core/java/com/android/server/location/GnssMeasurementsProvider.java
+++ b/services/core/java/com/android/server/location/GnssMeasurementsProvider.java
@@ -47,7 +47,7 @@
}
@VisibleForTesting
- GnssMeasurementsProvider(
+ public GnssMeasurementsProvider(
Context context, Handler handler, GnssMeasurementProviderNative aNative) {
super(context, handler, TAG);
mNative = aNative;
@@ -158,7 +158,7 @@
}
@VisibleForTesting
- static class GnssMeasurementProviderNative {
+ public static class GnssMeasurementProviderNative {
public boolean isMeasurementSupported() {
return native_is_measurement_supported();
}
diff --git a/services/core/java/com/android/server/location/GnssNavigationMessageProvider.java b/services/core/java/com/android/server/location/GnssNavigationMessageProvider.java
index 4c45ef6..983d1da 100644
--- a/services/core/java/com/android/server/location/GnssNavigationMessageProvider.java
+++ b/services/core/java/com/android/server/location/GnssNavigationMessageProvider.java
@@ -45,7 +45,7 @@
}
@VisibleForTesting
- GnssNavigationMessageProvider(Context context, Handler handler,
+ public GnssNavigationMessageProvider(Context context, Handler handler,
GnssNavigationMessageProviderNative aNative) {
super(context, handler, TAG);
mNative = aNative;
@@ -142,7 +142,7 @@
}
@VisibleForTesting
- static class GnssNavigationMessageProviderNative {
+ public static class GnssNavigationMessageProviderNative {
public boolean isNavigationMessageSupported() {
return native_is_navigation_message_supported();
}
diff --git a/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java b/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java
new file mode 100644
index 0000000..99b1ef4
--- /dev/null
+++ b/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java
@@ -0,0 +1,300 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.notification;
+
+import android.app.NotificationHistory;
+import android.app.NotificationHistory.HistoricalNotification;
+import android.os.Handler;
+import android.util.AtomicFile;
+import android.util.Slog;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+/**
+ * Provides an interface to write and query for notification history data for a user from a Protocol
+ * Buffer database.
+ *
+ * Periodically writes the buffered history to disk but can also accept force writes based on
+ * outside changes (like a pending shutdown).
+ */
+public class NotificationHistoryDatabase {
+ private static final int DEFAULT_CURRENT_VERSION = 1;
+
+ private static final String TAG = "NotiHistoryDatabase";
+ private static final boolean DEBUG = NotificationManagerService.DBG;
+ private static final int HISTORY_RETENTION_DAYS = 2;
+ private static final long WRITE_BUFFER_INTERVAL_MS = 1000 * 60 * 20;
+
+ private final Object mLock = new Object();
+ private Handler mFileWriteHandler;
+ @VisibleForTesting
+ // List of files holding history information, sorted newest to oldest
+ final LinkedList<AtomicFile> mHistoryFiles;
+ private final GregorianCalendar mCal;
+ private final File mHistoryDir;
+ private final File mVersionFile;
+ // Current version of the database files schema
+ private int mCurrentVersion;
+ private final WriteBufferRunnable mWriteBufferRunnable;
+
+ // Object containing posted notifications that have not yet been written to disk
+ @VisibleForTesting
+ NotificationHistory mBuffer;
+
+ public NotificationHistoryDatabase(File dir) {
+ mCurrentVersion = DEFAULT_CURRENT_VERSION;
+ mVersionFile = new File(dir, "version");
+ mHistoryDir = new File(dir, "history");
+ mHistoryFiles = new LinkedList<>();
+ mCal = new GregorianCalendar();
+ mBuffer = new NotificationHistory();
+ mWriteBufferRunnable = new WriteBufferRunnable();
+ }
+
+ public void init(Handler fileWriteHandler) {
+ synchronized (mLock) {
+ mFileWriteHandler = fileWriteHandler;
+
+ try {
+ mHistoryDir.mkdir();
+ mVersionFile.createNewFile();
+ } catch (Exception e) {
+ Slog.e(TAG, "could not create needed files", e);
+ }
+
+ checkVersionAndBuildLocked();
+ indexFilesLocked();
+ prune(HISTORY_RETENTION_DAYS, System.currentTimeMillis());
+ }
+ }
+
+ private void indexFilesLocked() {
+ mHistoryFiles.clear();
+ final File[] files = mHistoryDir.listFiles();
+ if (files == null) {
+ return;
+ }
+
+ // Sort with newest files first
+ Arrays.sort(files, (lhs, rhs) -> Long.compare(rhs.lastModified(), lhs.lastModified()));
+
+ for (File file : files) {
+ mHistoryFiles.addLast(new AtomicFile(file));
+ }
+ }
+
+ private void checkVersionAndBuildLocked() {
+ int version;
+ try (BufferedReader reader = new BufferedReader(new FileReader(mVersionFile))) {
+ version = Integer.parseInt(reader.readLine());
+ } catch (NumberFormatException | IOException e) {
+ version = 0;
+ }
+
+ if (version != mCurrentVersion && mVersionFile.exists()) {
+ try (BufferedWriter writer = new BufferedWriter(new FileWriter(mVersionFile))) {
+ writer.write(Integer.toString(mCurrentVersion));
+ writer.write("\n");
+ writer.flush();
+ } catch (IOException e) {
+ Slog.e(TAG, "Failed to write new version");
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ void forceWriteToDisk() {
+ if (!mFileWriteHandler.hasCallbacks(mWriteBufferRunnable)) {
+ mFileWriteHandler.post(mWriteBufferRunnable);
+ }
+ }
+
+ void onPackageRemoved(String packageName) {
+ RemovePackageRunnable rpr = new RemovePackageRunnable(packageName);
+ mFileWriteHandler.post(rpr);
+ }
+
+ public void addNotification(final HistoricalNotification notification) {
+ synchronized (mLock) {
+ mBuffer.addNotificationToWrite(notification);
+ // Each time we have new history to write to disk, schedule a write in [interval] ms
+ if (mBuffer.getHistoryCount() == 1) {
+ mFileWriteHandler.postDelayed(mWriteBufferRunnable, WRITE_BUFFER_INTERVAL_MS);
+ }
+ }
+ }
+
+ public NotificationHistory readNotificationHistory() {
+ synchronized (mLock) {
+ NotificationHistory notifications = new NotificationHistory();
+
+ for (AtomicFile file : mHistoryFiles) {
+ try {
+ readLocked(
+ file, notifications, new NotificationHistoryFilter.Builder().build());
+ } catch (Exception e) {
+ Slog.e(TAG, "error reading " + file.getBaseFile().getName(), e);
+ }
+ }
+
+ return notifications;
+ }
+ }
+
+ public NotificationHistory readNotificationHistory(String packageName, String channelId,
+ int maxNotifications) {
+ synchronized (mLock) {
+ NotificationHistory notifications = new NotificationHistory();
+
+ for (AtomicFile file : mHistoryFiles) {
+ try {
+ readLocked(file, notifications,
+ new NotificationHistoryFilter.Builder()
+ .setPackage(packageName)
+ .setChannel(packageName, channelId)
+ .setMaxNotifications(maxNotifications)
+ .build());
+ if (maxNotifications == notifications.getHistoryCount()) {
+ // No need to read any more files
+ break;
+ }
+ } catch (Exception e) {
+ Slog.e(TAG, "error reading " + file.getBaseFile().getName(), e);
+ }
+ }
+
+ return notifications;
+ }
+ }
+
+ /**
+ * Remove any files that are too old.
+ */
+ public void prune(final int retentionDays, final long currentTimeMillis) {
+ synchronized (mLock) {
+ mCal.setTimeInMillis(currentTimeMillis);
+ mCal.add(Calendar.DATE, -1 * retentionDays);
+
+ while (!mHistoryFiles.isEmpty()) {
+ final AtomicFile currentOldestFile = mHistoryFiles.getLast();
+ final long age = currentTimeMillis
+ - currentOldestFile.getBaseFile().lastModified();
+ if (age > mCal.getTimeInMillis()) {
+ if (DEBUG) {
+ Slog.d(TAG, "Removed " + currentOldestFile.getBaseFile().getName());
+ }
+ currentOldestFile.delete();
+ mHistoryFiles.removeLast();
+ } else {
+ // all remaining files are newer than the cut off
+ return;
+ }
+ }
+ }
+ }
+
+ private void writeLocked(AtomicFile file, NotificationHistory notifications)
+ throws IOException {
+ FileOutputStream fos = file.startWrite();
+ try {
+ NotificationHistoryProtoHelper.write(fos, notifications, mCurrentVersion);
+ file.finishWrite(fos);
+ fos = null;
+ } finally {
+ // When fos is null (successful write), this will no-op
+ file.failWrite(fos);
+ }
+ }
+
+ private static void readLocked(AtomicFile file, NotificationHistory notificationsOut,
+ NotificationHistoryFilter filter) throws IOException {
+ try (FileInputStream in = file.openRead()) {
+ NotificationHistoryProtoHelper.read(in, notificationsOut, filter);
+ } catch (FileNotFoundException e) {
+ Slog.e(TAG, "Cannot file " + file.getBaseFile().getName(), e);
+ throw e;
+ }
+ }
+
+ private final class WriteBufferRunnable implements Runnable {
+ @Override
+ public void run() {
+ if (DEBUG) Slog.d(TAG, "WriteBufferRunnable");
+ synchronized (mLock) {
+ final AtomicFile latestNotificationsFiles = new AtomicFile(
+ new File(mHistoryDir, String.valueOf(System.currentTimeMillis())));
+ try {
+ writeLocked(latestNotificationsFiles, mBuffer);
+ mHistoryFiles.addFirst(latestNotificationsFiles);
+ mBuffer = new NotificationHistory();
+ } catch (IOException e) {
+ Slog.e(TAG, "Failed to write buffer to disk. not flushing buffer", e);
+ }
+ }
+ }
+ }
+
+ private final class RemovePackageRunnable implements Runnable {
+ private String mPkg;
+
+ public RemovePackageRunnable(String pkg) {
+ mPkg = pkg;
+ }
+
+ @Override
+ public void run() {
+ if (DEBUG) Slog.d(TAG, "RemovePackageRunnable");
+ synchronized (mLock) {
+ // Remove packageName entries from pending history
+ mBuffer.removeNotificationsFromWrite(mPkg);
+
+ // Remove packageName entries from files on disk, and rewrite them to disk
+ // Since we sort by modified date, we have to update the files oldest to newest to
+ // maintain the original ordering
+ Iterator<AtomicFile> historyFileItr = mHistoryFiles.descendingIterator();
+ while (historyFileItr.hasNext()) {
+ final AtomicFile af = historyFileItr.next();
+ try {
+ final NotificationHistory notifications = new NotificationHistory();
+ readLocked(af, notifications,
+ new NotificationHistoryFilter.Builder().build());
+ notifications.removeNotificationsFromWrite(mPkg);
+ writeLocked(af, notifications);
+ } catch (Exception e) {
+ Slog.e(TAG, "Cannot clean up file on pkg removal "
+ + af.getBaseFile().getName(), e);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/notification/NotificationHistoryFilter.java b/services/core/java/com/android/server/notification/NotificationHistoryFilter.java
new file mode 100644
index 0000000..c3b2e73
--- /dev/null
+++ b/services/core/java/com/android/server/notification/NotificationHistoryFilter.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.notification;
+
+import android.annotation.NonNull;
+import android.app.NotificationHistory;
+import android.app.NotificationHistory.HistoricalNotification;
+import android.text.TextUtils;
+
+import com.android.internal.util.Preconditions;
+
+public final class NotificationHistoryFilter {
+ private String mPackage;
+ private String mChannel;
+ private int mNotificationCount;
+
+ private NotificationHistoryFilter() {}
+
+ public String getPackage() {
+ return mPackage;
+ }
+
+ public String getChannel() {
+ return mChannel;
+ }
+
+ public int getMaxNotifications() {
+ return mNotificationCount;
+ }
+
+ /**
+ * Returns whether any of the filtering conditions are set
+ */
+ public boolean isFiltering() {
+ return getPackage() != null || getChannel() != null
+ || mNotificationCount < Integer.MAX_VALUE;
+ }
+
+ /**
+ * Returns true if this notification passes the package and channel name filter, false
+ * otherwise.
+ */
+ public boolean matchesPackageAndChannelFilter(HistoricalNotification notification) {
+ if (!TextUtils.isEmpty(getPackage())) {
+ if (!getPackage().equals(notification.getPackage())) {
+ return false;
+ } else {
+ if (!TextUtils.isEmpty(getChannel())
+ && !getChannel().equals(notification.getChannelId())) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns true if the NotificationHistory can accept another notification.
+ */
+ public boolean matchesCountFilter(NotificationHistory notifications) {
+ return notifications.getHistoryCount() < mNotificationCount;
+ }
+
+ public static final class Builder {
+ private String mPackage = null;
+ private String mChannel = null;
+ private int mNotificationCount = Integer.MAX_VALUE;
+
+ /**
+ * Constructor
+ */
+ public Builder() {}
+
+ /**
+ * Sets a package name filter
+ */
+ public Builder setPackage(String aPackage) {
+ mPackage = aPackage;
+ return this;
+ }
+
+ /**
+ * Sets a channel name filter. Only valid if there is also a package name filter
+ */
+ public Builder setChannel(String pkg, String channel) {
+ setPackage(pkg);
+ mChannel = channel;
+ return this;
+ }
+
+ /**
+ * Sets the max historical notifications
+ */
+ public Builder setMaxNotifications(int notificationCount) {
+ mNotificationCount = notificationCount;
+ return this;
+ }
+
+ /**
+ * Makes a NotificationHistoryFilter
+ */
+ public NotificationHistoryFilter build() {
+ NotificationHistoryFilter filter = new NotificationHistoryFilter();
+ filter.mPackage = mPackage;
+ filter.mChannel = mChannel;
+ filter.mNotificationCount = mNotificationCount;
+ return filter;
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/notification/NotificationHistoryProtoHelper.java b/services/core/java/com/android/server/notification/NotificationHistoryProtoHelper.java
new file mode 100644
index 0000000..2831d37
--- /dev/null
+++ b/services/core/java/com/android/server/notification/NotificationHistoryProtoHelper.java
@@ -0,0 +1,321 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.server.notification;
+
+import android.app.NotificationHistory;
+import android.app.NotificationHistory.HistoricalNotification;
+import android.content.res.Resources;
+import android.graphics.drawable.Icon;
+import android.util.Slog;
+import android.util.proto.ProtoInputStream;
+import android.util.proto.ProtoOutputStream;
+
+import com.android.server.notification.NotificationHistoryProto.Notification;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Notification history reader/writer for Protocol Buffer format
+ */
+final class NotificationHistoryProtoHelper {
+ private static final String TAG = "NotifHistoryProto";
+
+ // Static-only utility class.
+ private NotificationHistoryProtoHelper() {}
+
+ private static List<String> readStringPool(ProtoInputStream proto) throws IOException {
+ final long token = proto.start(NotificationHistoryProto.STRING_POOL);
+ List<String> stringPool;
+ if (proto.nextField(NotificationHistoryProto.StringPool.SIZE)) {
+ stringPool = new ArrayList(proto.readInt(NotificationHistoryProto.StringPool.SIZE));
+ } else {
+ stringPool = new ArrayList();
+ }
+ while (proto.nextField() != ProtoInputStream.NO_MORE_FIELDS) {
+ switch (proto.getFieldNumber()) {
+ case (int) NotificationHistoryProto.StringPool.STRINGS:
+ stringPool.add(proto.readString(NotificationHistoryProto.StringPool.STRINGS));
+ break;
+ }
+ }
+ proto.end(token);
+ return stringPool;
+ }
+
+ private static void writeStringPool(ProtoOutputStream proto,
+ final NotificationHistory notifications) {
+ final long token = proto.start(NotificationHistoryProto.STRING_POOL);
+ final String[] pooledStrings = notifications.getPooledStringsToWrite();
+ proto.write(NotificationHistoryProto.StringPool.SIZE, pooledStrings.length);
+ for (int i = 0; i < pooledStrings.length; i++) {
+ proto.write(NotificationHistoryProto.StringPool.STRINGS, pooledStrings[i]);
+ }
+ proto.end(token);
+ }
+
+ private static void readNotification(ProtoInputStream proto, List<String> stringPool,
+ NotificationHistory notifications, NotificationHistoryFilter filter)
+ throws IOException {
+ final long token = proto.start(NotificationHistoryProto.NOTIFICATION);
+ try {
+ HistoricalNotification notification = readNotification(proto, stringPool);
+ if (filter.matchesPackageAndChannelFilter(notification)
+ && filter.matchesCountFilter(notifications)) {
+ notifications.addNotificationToWrite(notification);
+ }
+ } catch (Exception e) {
+ Slog.e(TAG, "Error reading notification", e);
+ } finally {
+ proto.end(token);
+ }
+ }
+
+ private static HistoricalNotification readNotification(ProtoInputStream parser,
+ List<String> stringPool) throws IOException {
+ final HistoricalNotification.Builder notification = new HistoricalNotification.Builder();
+ String pkg = null;
+ while (true) {
+ switch (parser.nextField()) {
+ case (int) NotificationHistoryProto.Notification.PACKAGE:
+ pkg = parser.readString(Notification.PACKAGE);
+ notification.setPackage(pkg);
+ stringPool.add(pkg);
+ break;
+ case (int) Notification.PACKAGE_INDEX:
+ pkg = stringPool.get(parser.readInt(Notification.PACKAGE_INDEX) - 1);
+ notification.setPackage(pkg);
+ break;
+ case (int) Notification.CHANNEL_NAME:
+ String channelName = parser.readString(Notification.CHANNEL_NAME);
+ notification.setChannelName(channelName);
+ stringPool.add(channelName);
+ break;
+ case (int) Notification.CHANNEL_NAME_INDEX:
+ notification.setChannelName(stringPool.get(parser.readInt(
+ Notification.CHANNEL_NAME_INDEX) - 1));
+ break;
+ case (int) Notification.CHANNEL_ID:
+ String channelId = parser.readString(Notification.CHANNEL_ID);
+ notification.setChannelId(channelId);
+ stringPool.add(channelId);
+ break;
+ case (int) Notification.CHANNEL_ID_INDEX:
+ notification.setChannelId(stringPool.get(parser.readInt(
+ Notification.CHANNEL_ID_INDEX) - 1));
+ break;
+ case (int) Notification.UID:
+ notification.setUid(parser.readInt(Notification.UID));
+ break;
+ case (int) Notification.USER_ID:
+ notification.setUserId(parser.readInt(Notification.USER_ID));
+ break;
+ case (int) Notification.POSTED_TIME_MS:
+ notification.setPostedTimeMs(parser.readLong(Notification.POSTED_TIME_MS));
+ break;
+ case (int) Notification.TITLE:
+ notification.setTitle(parser.readString(Notification.TITLE));
+ break;
+ case (int) Notification.TEXT:
+ notification.setText(parser.readString(Notification.TEXT));
+ break;
+ case (int) Notification.ICON:
+ final long iconToken = parser.start(Notification.ICON);
+ loadIcon(parser, notification, pkg);
+ parser.end(iconToken);
+ break;
+ case ProtoInputStream.NO_MORE_FIELDS:
+ return notification.build();
+ }
+ }
+ }
+
+ private static void loadIcon(ProtoInputStream parser,
+ HistoricalNotification.Builder notification, String pkg) throws IOException {
+ int iconType = Notification.TYPE_UNKNOWN;
+ String imageBitmapFileName = null;
+ int imageResourceId = Resources.ID_NULL;
+ String imageResourceIdPackage = null;
+ byte[] imageByteData = null;
+ int imageByteDataLength = 0;
+ int imageByteDataOffset = 0;
+ String imageUri = null;
+
+ while (true) {
+ switch (parser.nextField()) {
+ case (int) Notification.Icon.IMAGE_TYPE:
+ iconType = parser.readInt(Notification.Icon.IMAGE_TYPE);
+ break;
+ case (int) Notification.Icon.IMAGE_DATA:
+ imageByteData = parser.readBytes(Notification.Icon.IMAGE_DATA);
+ break;
+ case (int) Notification.Icon.IMAGE_DATA_LENGTH:
+ imageByteDataLength = parser.readInt(Notification.Icon.IMAGE_DATA_LENGTH);
+ break;
+ case (int) Notification.Icon.IMAGE_DATA_OFFSET:
+ imageByteDataOffset = parser.readInt(Notification.Icon.IMAGE_DATA_OFFSET);
+ break;
+ case (int) Notification.Icon.IMAGE_BITMAP_FILENAME:
+ imageBitmapFileName = parser.readString(
+ Notification.Icon.IMAGE_BITMAP_FILENAME);
+ break;
+ case (int) Notification.Icon.IMAGE_RESOURCE_ID:
+ imageResourceId = parser.readInt(Notification.Icon.IMAGE_RESOURCE_ID);
+ break;
+ case (int) Notification.Icon.IMAGE_RESOURCE_ID_PACKAGE:
+ imageResourceIdPackage = parser.readString(
+ Notification.Icon.IMAGE_RESOURCE_ID_PACKAGE);
+ break;
+ case (int) Notification.Icon.IMAGE_URI:
+ imageUri = parser.readString(Notification.Icon.IMAGE_URI);
+ break;
+ case ProtoInputStream.NO_MORE_FIELDS:
+ if (iconType == Icon.TYPE_DATA) {
+
+ if (imageByteData != null) {
+ notification.setIcon(Icon.createWithData(
+ imageByteData, imageByteDataOffset, imageByteDataLength));
+ }
+ } else if (iconType == Icon.TYPE_RESOURCE) {
+ if (imageResourceId != Resources.ID_NULL) {
+ notification.setIcon(Icon.createWithResource(
+ imageResourceIdPackage != null
+ ? imageResourceIdPackage
+ : pkg,
+ imageResourceId));
+ }
+ } else if (iconType == Icon.TYPE_URI) {
+ if (imageUri != null) {
+ notification.setIcon(Icon.createWithContentUri(imageUri));
+ }
+ } else if (iconType == Icon.TYPE_BITMAP) {
+ // TODO: read file from disk
+ }
+ return;
+ }
+ }
+ }
+
+ private static void writeIcon(ProtoOutputStream proto, HistoricalNotification notification) {
+ final long token = proto.start(Notification.ICON);
+
+ proto.write(Notification.Icon.IMAGE_TYPE, notification.getIcon().getType());
+ switch (notification.getIcon().getType()) {
+ case Icon.TYPE_DATA:
+ proto.write(Notification.Icon.IMAGE_DATA, notification.getIcon().getDataBytes());
+ proto.write(Notification.Icon.IMAGE_DATA_LENGTH,
+ notification.getIcon().getDataLength());
+ proto.write(Notification.Icon.IMAGE_DATA_OFFSET,
+ notification.getIcon().getDataOffset());
+ break;
+ case Icon.TYPE_RESOURCE:
+ proto.write(Notification.Icon.IMAGE_RESOURCE_ID, notification.getIcon().getResId());
+ if (!notification.getPackage().equals(notification.getIcon().getResPackage())) {
+ proto.write(Notification.Icon.IMAGE_RESOURCE_ID_PACKAGE,
+ notification.getIcon().getResPackage());
+ }
+ break;
+ case Icon.TYPE_URI:
+ proto.write(Notification.Icon.IMAGE_URI, notification.getIcon().getUriString());
+ break;
+ case Icon.TYPE_BITMAP:
+ // TODO: write file to disk
+ break;
+ }
+
+ proto.end(token);
+ }
+
+ private static void writeNotification(ProtoOutputStream proto,
+ final String[] stringPool, final HistoricalNotification notification) {
+ final long token = proto.start(NotificationHistoryProto.NOTIFICATION);
+ final int packageIndex = Arrays.binarySearch(stringPool, notification.getPackage());
+ if (packageIndex >= 0) {
+ proto.write(Notification.PACKAGE_INDEX, packageIndex + 1);
+ } else {
+ // Package not in Stringpool for some reason, write full string instead
+ Slog.w(TAG, "notification package name (" + notification.getPackage()
+ + ") not found in string cache");
+ proto.write(Notification.PACKAGE, notification.getPackage());
+ }
+ final int channelNameIndex = Arrays.binarySearch(stringPool, notification.getChannelName());
+ if (channelNameIndex >= 0) {
+ proto.write(Notification.CHANNEL_NAME_INDEX, channelNameIndex + 1);
+ } else {
+ Slog.w(TAG, "notification channel name (" + notification.getChannelName()
+ + ") not found in string cache");
+ proto.write(Notification.CHANNEL_NAME, notification.getChannelName());
+ }
+ final int channelIdIndex = Arrays.binarySearch(stringPool, notification.getChannelId());
+ if (channelIdIndex >= 0) {
+ proto.write(Notification.CHANNEL_ID_INDEX, channelIdIndex + 1);
+ } else {
+ Slog.w(TAG, "notification channel id (" + notification.getChannelId()
+ + ") not found in string cache");
+ proto.write(Notification.CHANNEL_ID, notification.getChannelId());
+ }
+ proto.write(Notification.UID, notification.getUid());
+ proto.write(Notification.USER_ID, notification.getUserId());
+ proto.write(Notification.POSTED_TIME_MS, notification.getPostedTimeMs());
+ proto.write(Notification.TITLE, notification.getTitle());
+ proto.write(Notification.TEXT, notification.getText());
+ writeIcon(proto, notification);
+ proto.end(token);
+ }
+
+ public static void read(InputStream in, NotificationHistory notifications,
+ NotificationHistoryFilter filter) throws IOException {
+ final ProtoInputStream proto = new ProtoInputStream(in);
+ List<String> stringPool = new ArrayList<>();
+ while (true) {
+ switch (proto.nextField()) {
+ case (int) NotificationHistoryProto.STRING_POOL:
+ stringPool = readStringPool(proto);
+ break;
+ case (int) NotificationHistoryProto.NOTIFICATION:
+ readNotification(proto, stringPool, notifications, filter);
+ break;
+ case ProtoInputStream.NO_MORE_FIELDS:
+ if (filter.isFiltering()) {
+ notifications.poolStringsFromNotifications();
+ } else {
+ notifications.addPooledStrings(stringPool);
+ }
+ return;
+ }
+ }
+ }
+
+ public static void write(OutputStream out, NotificationHistory notifications, int version) {
+ final ProtoOutputStream proto = new ProtoOutputStream(out);
+ proto.write(NotificationHistoryProto.MAJOR_VERSION, version);
+ // String pool should be written before the history itself
+ writeStringPool(proto, notifications);
+
+ List<HistoricalNotification> notificationsToWrite = notifications.getNotificationsToWrite();
+ final int count = notificationsToWrite.size();
+ for (int i = 0; i < count; i++) {
+ writeNotification(proto, notifications.getPooledStringsToWrite(),
+ notificationsToWrite.get(i));
+ }
+
+ proto.flush();
+ }
+}
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 4d2512c..a2aeaf1 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -871,7 +871,7 @@
"target should only be specified when we are disabling quiet mode.");
}
- ensureCanModifyQuietMode(callingPackage, Binder.getCallingUid(), target != null);
+ ensureCanModifyQuietMode(callingPackage, Binder.getCallingUid(), userId, target != null);
final long identity = Binder.clearCallingIdentity();
try {
boolean result = false;
@@ -903,13 +903,15 @@
* <li>Has system UID or root UID</li>
* <li>Has {@link Manifest.permission#MODIFY_QUIET_MODE}</li>
* <li>Has {@link Manifest.permission#MANAGE_USERS}</li>
+ * <li>Is the foreground default launcher app</li>
* </ul>
* <p>
- * If caller wants to start an intent after disabling the quiet mode, it must has
+ * If caller wants to start an intent after disabling the quiet mode, or if it is targeting a
+ * user in a different profile group from the caller, it must have
* {@link Manifest.permission#MANAGE_USERS}.
*/
private void ensureCanModifyQuietMode(String callingPackage, int callingUid,
- boolean startIntent) {
+ @UserIdInt int targetUserId, boolean startIntent) {
if (hasManageUsersPermission()) {
return;
}
@@ -917,6 +919,10 @@
throw new SecurityException("MANAGE_USERS permission is required to start intent "
+ "after disabling quiet mode.");
}
+ if (!isSameProfileGroupNoChecks(UserHandle.getUserId(callingUid), targetUserId)) {
+ throw new SecurityException("MANAGE_USERS permission is required to modify quiet mode "
+ + "for a different profile group.");
+ }
final boolean hasModifyQuietModePermission = hasPermissionGranted(
Manifest.permission.MODIFY_QUIET_MODE, callingUid);
if (hasModifyQuietModePermission) {
diff --git a/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java b/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java
index 5493afd..403d342 100644
--- a/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java
+++ b/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java
@@ -30,6 +30,7 @@
import android.service.textclassifier.ITextClassifierCallback;
import android.service.textclassifier.ITextClassifierService;
import android.service.textclassifier.TextClassifierService;
+import android.service.textclassifier.TextClassifierService.ConnectionState;
import android.util.ArrayMap;
import android.util.Slog;
import android.util.SparseArray;
@@ -130,6 +131,10 @@
}
@Override
+ public void onConnectedStateChanged(@ConnectionState int connected) {
+ }
+
+ @Override
public void onSuggestSelection(
@Nullable TextClassificationSessionId sessionId,
TextSelection.Request request, ITextClassifierCallback callback)
@@ -579,6 +584,11 @@
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
init(ITextClassifierService.Stub.asInterface(service));
+ try {
+ mService.onConnectedStateChanged(TextClassifierService.CONNECTED);
+ } catch (RemoteException e) {
+ Slog.e(LOG_TAG, "error in onConnectedStateChanged");
+ }
}
@Override
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index eeee062..ec0900f 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -2472,7 +2472,9 @@
}
final ActivityStack stack = getActivityStack();
- final boolean mayAdjustFocus = (isState(RESUMED) || stack.mResumedActivity == null)
+ final boolean mayAdjustTop = (isState(RESUMED) || stack.mResumedActivity == null)
+ && stack.isFocusedStackOnDisplay();
+ final boolean shouldAdjustGlobalFocus = mayAdjustTop
// It must be checked before {@link #makeFinishingLocked} is called, because a stack
// is not visible if it only contains finishing activities.
&& mRootActivityContainer.isTopDisplayFocusedStack(stack);
@@ -2500,9 +2502,21 @@
// We are finishing the top focused activity and its stack has nothing to be focused so
// the next focusable stack should be focused.
- if (mayAdjustFocus
+ if (mayAdjustTop
&& (stack.topRunningActivityLocked() == null || !stack.isFocusable())) {
- stack.adjustFocusToNextFocusableStack("finish-top");
+ if (shouldAdjustGlobalFocus) {
+ // Move the entire hierarchy to top with updating global top resumed activity
+ // and focused application if needed.
+ stack.adjustFocusToNextFocusableStack("finish-top");
+ } else {
+ // Only move the next stack to top in its display.
+ final ActivityDisplay display = stack.getDisplay();
+ final ActivityRecord next = display.topRunningActivity();
+ if (next != null) {
+ display.positionChildAtTop(next.getActivityStack(),
+ false /* includingParents */, "finish-display-top");
+ }
+ }
}
finishActivityResults(resultCode, resultData);
@@ -2632,20 +2646,12 @@
// implied that the current finishing activity should be added into stopping list rather
// than destroy immediately.
final boolean isNextNotYetVisible = next != null && (!next.nowVisible || !next.visible);
- final boolean notGlobalFocusedStack =
- getActivityStack() != mRootActivityContainer.getTopDisplayFocusedStack();
if (isVisible && isNextNotYetVisible) {
// Add this activity to the list of stopping activities. It will be processed and
// destroyed when the next activity reports idle.
addToStopping(false /* scheduleIdle */, false /* idleDelayed */,
"completeFinishing");
setState(STOPPING, "completeFinishing");
- if (notGlobalFocusedStack) {
- // Ensuring visibility and configuration only for non-focused stacks since this
- // method call is relatively expensive and not necessary for focused stacks.
- mRootActivityContainer.ensureVisibilityAndConfig(next, getDisplayId(),
- false /* markFrozenIfConfigChanged */, true /* deferResume */);
- }
} else if (addToFinishingAndWaitForIdle()) {
// We added this activity to the finishing list and something else is becoming resumed.
// The activity will complete finishing when the next activity reports idle. No need to
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java b/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java
index 4a456f7..aa38880 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java
@@ -17,7 +17,6 @@
package com.android.server.devicepolicy;
import android.app.Notification;
-import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -26,12 +25,9 @@
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
-import android.graphics.Color;
-import android.os.Build;
import android.os.Handler;
import android.os.RemoteException;
import android.os.UserHandle;
-import android.os.UserManager;
import android.os.storage.StorageManager;
import android.provider.Settings;
import android.security.Credentials;
@@ -39,9 +35,9 @@
import android.security.KeyChain.KeyChainConnection;
import android.util.Log;
+import com.android.internal.R;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
-import com.android.internal.R;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -49,7 +45,6 @@
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.List;
-import java.util.Set;
public class CertificateMonitor {
protected static final String LOG_TAG = DevicePolicyManagerService.LOG_TAG;
@@ -111,13 +106,13 @@
}
}
- public List<String> getInstalledCaCertificates(UserHandle userHandle)
+ private List<String> getInstalledCaCertificates(UserHandle userHandle)
throws RemoteException, RuntimeException {
try (KeyChainConnection conn = mInjector.keyChainBindAsUser(userHandle)) {
return conn.getService().getUserCaAliases().getList();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
- return null;
+ throw new RuntimeException(e);
} catch (AssertionError e) {
throw new RuntimeException(e);
}
diff --git a/services/net/Android.bp b/services/net/Android.bp
index 08cdbfc..2ab8189 100644
--- a/services/net/Android.bp
+++ b/services/net/Android.bp
@@ -6,7 +6,7 @@
],
static_libs: [
"dnsresolver_aidl_interface-V2-java",
- "netd_aidl_interface-java",
+ "netd_aidl_interface-unstable-java",
"networkstack-client",
"tethering-client",
],
diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp
index 83e20fb..30ccb71 100644
--- a/services/tests/servicestests/Android.bp
+++ b/services/tests/servicestests/Android.bp
@@ -75,7 +75,7 @@
"libui",
"libunwindstack",
"libutils",
- "netd_aidl_interface-V2-cpp",
+ "netd_aidl_interface-cpp",
],
dxflags: ["--multi-dex"],
diff --git a/services/tests/servicestests/src/com/android/server/GnssManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/GnssManagerServiceTest.java
new file mode 100644
index 0000000..9692c25
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/GnssManagerServiceTest.java
@@ -0,0 +1,743 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertThrows;
+
+import android.Manifest;
+import android.app.ActivityManager;
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.location.GnssClock;
+import android.location.GnssMeasurementCorrections;
+import android.location.GnssMeasurementsEvent;
+import android.location.GnssNavigationMessage;
+import android.location.GnssSingleSatCorrection;
+import android.location.IBatchedLocationCallback;
+import android.location.IGnssMeasurementsListener;
+import android.location.IGnssNavigationMessageListener;
+import android.location.IGnssStatusListener;
+import android.location.INetInitiatedListener;
+import android.location.Location;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.IInterface;
+import android.os.Message;
+import android.os.RemoteException;
+
+import com.android.server.location.GnssBatchingProvider;
+import com.android.server.location.GnssCapabilitiesProvider;
+import com.android.server.location.GnssLocationProvider;
+import com.android.server.location.GnssMeasurementCorrectionsProvider;
+import com.android.server.location.GnssMeasurementsProvider;
+import com.android.server.location.GnssMeasurementsProvider.GnssMeasurementProviderNative;
+import com.android.server.location.GnssNavigationMessageProvider;
+import com.android.server.location.GnssNavigationMessageProvider.GnssNavigationMessageProviderNative;
+import com.android.server.location.GnssStatusListenerHelper;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.AdditionalMatchers;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Unit tests for {@link com.android.server.GnssManagerService}.
+ */
+public class GnssManagerServiceTest {
+
+ // Gnss Providers
+ @Mock
+ private GnssLocationProvider mMockGnssLocationProvider;
+ @Mock
+ private GnssBatchingProvider mMockGnssBatchingProvider;
+ @Mock
+ private GnssLocationProvider.GnssSystemInfoProvider mMockGnssSystemInfoProvider;
+ @Mock
+ private GnssCapabilitiesProvider mMockGnssCapabilitiesProvider;
+ @Mock
+ private GnssMeasurementCorrectionsProvider mMockGnssMeasurementCorrectionsProvider;
+ @Mock
+ private INetInitiatedListener mMockNetInitiatedListener;
+ private GnssMeasurementsProvider mTestGnssMeasurementsProvider;
+ private GnssStatusListenerHelper mTestGnssStatusProvider;
+ private GnssNavigationMessageProvider mTestGnssNavigationMessageProvider;
+
+ // Managers and services
+ @Mock
+ private AppOpsManager mMockAppOpsManager;
+ @Mock
+ private ActivityManager mMockActivityManager;
+ @Mock
+ private LocationManagerService mMockLocationManagerService;
+
+ // Context and handler
+ @Mock
+ private Handler mMockHandler;
+ @Mock
+ private Context mMockContext;
+
+ // Class under test
+ private GnssManagerService mGnssManagerService;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ GnssLocationProvider.setIsSupportedForTest(true);
+
+ // Set up mock context
+ when(mMockContext.getSystemServiceName(AppOpsManager.class)).thenReturn(
+ Context.APP_OPS_SERVICE);
+ when(mMockContext.getSystemServiceName(ActivityManager.class)).thenReturn(
+ Context.ACTIVITY_SERVICE);
+ when(mMockContext.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(
+ mMockAppOpsManager);
+ when(mMockContext.getSystemService(
+ eq(Context.ACTIVITY_SERVICE))).thenReturn(
+ mMockActivityManager);
+ enableLocationPermissions();
+
+ // Mock Handler will execute posted runnables immediately
+ when(mMockHandler.sendMessageAtTime(any(Message.class), anyLong())).thenAnswer(
+ (InvocationOnMock invocation) -> {
+ Message msg = (Message) (invocation.getArguments()[0]);
+ msg.getCallback().run();
+ return null;
+ });
+
+ // Setup providers
+ mTestGnssMeasurementsProvider = createGnssMeasurementsProvider(
+ mMockContext, mMockHandler);
+ mTestGnssStatusProvider = createGnssStatusListenerHelper(
+ mMockContext, mMockHandler);
+ mTestGnssNavigationMessageProvider = createGnssNavigationMessageProvider(
+ mMockContext, mMockHandler);
+
+ // Setup GnssLocationProvider to return providers
+ when(mMockGnssLocationProvider.getGnssStatusProvider()).thenReturn(
+ mTestGnssStatusProvider);
+ when(mMockGnssLocationProvider.getGnssBatchingProvider()).thenReturn(
+ mMockGnssBatchingProvider);
+ when(mMockGnssLocationProvider.getGnssCapabilitiesProvider()).thenReturn(
+ mMockGnssCapabilitiesProvider);
+ when(mMockGnssLocationProvider.getGnssSystemInfoProvider()).thenReturn(
+ mMockGnssSystemInfoProvider);
+ when(mMockGnssLocationProvider.getGnssMeasurementCorrectionsProvider()).thenReturn(
+ mMockGnssMeasurementCorrectionsProvider);
+ when(mMockGnssLocationProvider.getGnssMeasurementsProvider()).thenReturn(
+ mTestGnssMeasurementsProvider);
+ when(mMockGnssLocationProvider.getGnssNavigationMessageProvider()).thenReturn(
+ mTestGnssNavigationMessageProvider);
+ when(mMockGnssLocationProvider.getNetInitiatedListener()).thenReturn(
+ mMockNetInitiatedListener);
+
+ // Setup GnssBatching provider
+ when(mMockGnssBatchingProvider.start(anyLong(), anyBoolean())).thenReturn(true);
+ when(mMockGnssBatchingProvider.stop()).thenReturn(true);
+
+ // Create GnssManagerService
+ mGnssManagerService = new GnssManagerService(mMockLocationManagerService, mMockContext,
+ mMockGnssLocationProvider, new LocationUsageLogger());
+ }
+
+ private void overrideAsBinder(IInterface mockListener) {
+ IBinder mockBinder = mock(IBinder.class);
+ when(mockListener.asBinder()).thenReturn(mockBinder);
+ }
+
+ private IGnssStatusListener createMockGnssStatusListener() {
+ IGnssStatusListener mockListener = mock(IGnssStatusListener.class);
+ overrideAsBinder(mockListener);
+ return mockListener;
+ }
+
+ private IGnssMeasurementsListener createMockGnssMeasurementsListener() {
+ IGnssMeasurementsListener mockListener = mock(
+ IGnssMeasurementsListener.class);
+ overrideAsBinder(mockListener);
+ return mockListener;
+ }
+
+ private IBatchedLocationCallback createMockBatchedLocationCallback() {
+ IBatchedLocationCallback mockedCallback = mock(IBatchedLocationCallback.class);
+ overrideAsBinder(mockedCallback);
+ return mockedCallback;
+ }
+
+ private IGnssNavigationMessageListener createMockGnssNavigationMessageListener() {
+ IGnssNavigationMessageListener mockListener = mock(IGnssNavigationMessageListener.class);
+ overrideAsBinder(mockListener);
+ return mockListener;
+ }
+
+ private GnssMeasurementCorrections createDummyGnssMeasurementCorrections() {
+ GnssSingleSatCorrection gnssSingleSatCorrection =
+ new GnssSingleSatCorrection.Builder().build();
+ return
+ new GnssMeasurementCorrections.Builder().setSingleSatelliteCorrectionList(
+ Arrays.asList(gnssSingleSatCorrection)).build();
+ }
+
+ private void enableLocationPermissions() {
+ Mockito.doThrow(new SecurityException()).when(
+ mMockContext).enforceCallingPermission(
+ AdditionalMatchers.and(
+ AdditionalMatchers.not(eq(Manifest.permission.LOCATION_HARDWARE)),
+ AdditionalMatchers.not(eq(Manifest.permission.ACCESS_FINE_LOCATION))),
+ anyString());
+ when(mMockContext.checkPermission(
+ eq(android.Manifest.permission.LOCATION_HARDWARE), anyInt(), anyInt())).thenReturn(
+ PackageManager.PERMISSION_GRANTED);
+
+ // AppOpsManager will return true if OP_FINE_LOCATION is checked
+ when(mMockAppOpsManager.checkOp(anyInt(), anyInt(), anyString())).thenAnswer(
+ (InvocationOnMock invocation) -> {
+ int code = (int) (invocation.getArguments()[0]);
+ if (code == AppOpsManager.OP_FINE_LOCATION) {
+ return AppOpsManager.MODE_ALLOWED;
+ }
+ return AppOpsManager.MODE_ERRORED;
+ });
+ }
+
+ private void disableLocationPermissions() {
+ Mockito.doThrow(new SecurityException()).when(
+ mMockContext).enforceCallingPermission(anyString(), anyString());
+ Mockito.doThrow(new SecurityException()).when(
+ mMockContext).checkPermission(anyString(), anyInt(), anyInt());
+
+ when(mMockAppOpsManager.checkOp(anyInt(), anyInt(),
+ anyString())).thenReturn(AppOpsManager.MODE_ERRORED);
+ }
+
+ private GnssStatusListenerHelper createGnssStatusListenerHelper(Context context,
+ Handler handler) {
+ return new GnssStatusListenerHelper(
+ context, handler) {
+ @Override
+ protected boolean isAvailableInPlatform() {
+ return true;
+ }
+
+ @Override
+ protected boolean isGpsEnabled() {
+ return true;
+ }
+ };
+ }
+
+ private GnssMeasurementsProvider createGnssMeasurementsProvider(Context context,
+ Handler handler) {
+ GnssMeasurementProviderNative
+ mockGnssMeasurementProviderNative = mock(GnssMeasurementProviderNative.class);
+ return new GnssMeasurementsProvider(
+ context, handler, mockGnssMeasurementProviderNative) {
+ @Override
+ protected boolean isGpsEnabled() {
+ return true;
+ }
+ };
+ }
+
+ private GnssNavigationMessageProvider createGnssNavigationMessageProvider(Context context,
+ Handler handler) {
+ GnssNavigationMessageProviderNative mockGnssNavigationMessageProviderNative = mock(
+ GnssNavigationMessageProviderNative.class);
+ return new GnssNavigationMessageProvider(context, handler,
+ mockGnssNavigationMessageProviderNative) {
+ @Override
+ protected boolean isGpsEnabled() {
+ return true;
+ }
+ };
+ }
+
+ @Test
+ public void getGnssYearOfHardwareTest() {
+ final int gnssYearOfHardware = 2012;
+ when(mMockGnssSystemInfoProvider.getGnssYearOfHardware()).thenReturn(gnssYearOfHardware);
+ enableLocationPermissions();
+
+ assertThat(mGnssManagerService.getGnssYearOfHardware()).isEqualTo(gnssYearOfHardware);
+ }
+
+ @Test
+ public void getGnssHardwareModelNameTest() {
+ final String gnssHardwareModelName = "hardwarename";
+ when(mMockGnssSystemInfoProvider.getGnssHardwareModelName()).thenReturn(
+ gnssHardwareModelName);
+ enableLocationPermissions();
+
+ assertThat(mGnssManagerService.getGnssHardwareModelName()).isEqualTo(
+ gnssHardwareModelName);
+ }
+
+ @Test
+ public void getGnssCapabilitiesWithoutPermissionsTest() {
+ disableLocationPermissions();
+
+ assertThrows(SecurityException.class,
+ () -> mGnssManagerService.getGnssCapabilities("com.android.server"));
+ }
+
+ @Test
+ public void getGnssCapabilitiesWithPermissionsTest() {
+ final long mGnssCapabilities = 23132L;
+ when(mMockGnssCapabilitiesProvider.getGnssCapabilities()).thenReturn(mGnssCapabilities);
+ enableLocationPermissions();
+
+ assertThat(mGnssManagerService.getGnssCapabilities("com.android.server")).isEqualTo(
+ mGnssCapabilities);
+ }
+
+ @Test
+ public void getGnssBatchSizeWithoutPermissionsTest() {
+ disableLocationPermissions();
+
+ assertThrows(SecurityException.class,
+ () -> mGnssManagerService.getGnssBatchSize("com.android.server"));
+ }
+
+ @Test
+ public void getGnssBatchSizeWithPermissionsTest() {
+ final int gnssBatchSize = 10;
+ when(mMockGnssBatchingProvider.getBatchSize()).thenReturn(gnssBatchSize);
+ enableLocationPermissions();
+
+ assertThat(mGnssManagerService.getGnssBatchSize("com.android.server")).isEqualTo(
+ gnssBatchSize);
+ }
+
+ @Test
+ public void startGnssBatchWithoutPermissionsTest() {
+ final long periodNanos = 100L;
+ final boolean wakeOnFifoFull = true;
+
+ disableLocationPermissions();
+
+ assertThrows(SecurityException.class,
+ () -> mGnssManagerService.startGnssBatch(periodNanos, wakeOnFifoFull,
+ "com.android.server"));
+ verify(mMockGnssBatchingProvider, times(0)).start(periodNanos, wakeOnFifoFull);
+ }
+
+ @Test
+ public void startGnssBatchWithPermissionsTest() {
+ final long periodNanos = 100L;
+ final boolean wakeOnFifoFull = true;
+
+ enableLocationPermissions();
+
+ assertThat(mGnssManagerService.startGnssBatch(periodNanos, wakeOnFifoFull,
+ "com.android.server"))
+ .isEqualTo(
+ true);
+ verify(mMockGnssBatchingProvider, times(1)).start(100L, true);
+ }
+
+ @Test
+ public void addGnssBatchCallbackWithoutPermissionsTest() throws RemoteException {
+ IBatchedLocationCallback mockBatchedLocationCallback = createMockBatchedLocationCallback();
+ List<Location> mockLocationList = (List<Location>) mock(List.class);
+
+ disableLocationPermissions();
+
+ assertThrows(SecurityException.class, () -> mGnssManagerService.addGnssBatchingCallback(
+ mockBatchedLocationCallback, "com.android.server", "abcd123",
+ "TestBatchedLocationCallback"));
+
+ mGnssManagerService.onReportLocation(mockLocationList);
+
+ verify(mockBatchedLocationCallback, times(0)).onLocationBatch(mockLocationList);
+ }
+
+ @Test
+ public void addGnssBatchCallbackWithPermissionsTest() throws RemoteException {
+ IBatchedLocationCallback mockBatchedLocationCallback = createMockBatchedLocationCallback();
+ List<Location> mockLocationList = (List<Location>) mock(List.class);
+
+ enableLocationPermissions();
+
+ assertThat(mGnssManagerService.addGnssBatchingCallback(
+ mockBatchedLocationCallback, "com.android.server",
+ "abcd123", "TestBatchedLocationCallback")).isEqualTo(true);
+
+ mGnssManagerService.onReportLocation(mockLocationList);
+
+ verify(mockBatchedLocationCallback, times(1)).onLocationBatch(mockLocationList);
+ }
+
+ @Test
+ public void replaceGnssBatchCallbackTest() throws RemoteException {
+ IBatchedLocationCallback mockBatchedLocationCallback1 = createMockBatchedLocationCallback();
+ IBatchedLocationCallback mockBatchedLocationCallback2 = createMockBatchedLocationCallback();
+ List<Location> mockLocationList = (List<Location>) mock(List.class);
+
+ enableLocationPermissions();
+
+ assertThat(mGnssManagerService.addGnssBatchingCallback(
+ mockBatchedLocationCallback1, "com.android.server",
+ "abcd123", "TestBatchedLocationCallback")).isEqualTo(true);
+ assertThat(mGnssManagerService.addGnssBatchingCallback(
+ mockBatchedLocationCallback2, "com.android.server",
+ "abcd123", "TestBatchedLocationCallback")).isEqualTo(true);
+
+ mGnssManagerService.onReportLocation(mockLocationList);
+
+ verify(mockBatchedLocationCallback1, times(0)).onLocationBatch(mockLocationList);
+ verify(mockBatchedLocationCallback2, times(1)).onLocationBatch(mockLocationList);
+ }
+
+ @Test
+ public void flushGnssBatchWithoutPermissionsTest() {
+ disableLocationPermissions();
+
+ assertThrows(SecurityException.class,
+ () -> mGnssManagerService.flushGnssBatch("com.android.server"));
+ verify(mMockGnssBatchingProvider, times(0)).flush();
+ }
+
+ @Test
+ public void flushGnssBatchWithPermissionsTest() {
+ enableLocationPermissions();
+ mGnssManagerService.flushGnssBatch("com.android.server");
+
+ verify(mMockGnssBatchingProvider, times(1)).flush();
+ }
+
+ @Test
+ public void removeGnssBatchingCallbackWithoutPermissionsTest() throws RemoteException {
+ IBatchedLocationCallback mockBatchedLocationCallback = createMockBatchedLocationCallback();
+ List<Location> mockLocationList = (List<Location>) mock(List.class);
+
+ enableLocationPermissions();
+
+ mGnssManagerService.addGnssBatchingCallback(mockBatchedLocationCallback,
+ "com.android.server", "abcd123", "TestBatchedLocationCallback");
+
+ disableLocationPermissions();
+
+ assertThrows(SecurityException.class,
+ () -> mGnssManagerService.removeGnssBatchingCallback());
+
+ mGnssManagerService.onReportLocation(mockLocationList);
+
+ verify(mockBatchedLocationCallback, times(1)).onLocationBatch(mockLocationList);
+ }
+
+ @Test
+ public void removeGnssBatchingCallbackWithPermissionsTest() throws RemoteException {
+ IBatchedLocationCallback mockBatchedLocationCallback = createMockBatchedLocationCallback();
+ List<Location> mockLocationList = (List<Location>) mock(List.class);
+
+ enableLocationPermissions();
+
+ mGnssManagerService.addGnssBatchingCallback(mockBatchedLocationCallback,
+ "com.android.server", "abcd123", "TestBatchedLocationCallback");
+
+ mGnssManagerService.removeGnssBatchingCallback();
+
+ mGnssManagerService.onReportLocation(mockLocationList);
+
+ verify(mockBatchedLocationCallback, times(0)).onLocationBatch(mockLocationList);
+ }
+
+ @Test
+ public void stopGnssBatchWithoutPermissionsTest() {
+ disableLocationPermissions();
+
+ assertThrows(SecurityException.class, () -> mGnssManagerService.stopGnssBatch());
+ verify(mMockGnssBatchingProvider, times(0)).stop();
+ }
+
+ @Test
+ public void stopGnssBatchWithPermissionsTest() {
+ enableLocationPermissions();
+
+ assertThat(mGnssManagerService.stopGnssBatch()).isEqualTo(true);
+ verify(mMockGnssBatchingProvider, times(1)).stop();
+ }
+
+ @Test
+ public void registerGnssStatusCallbackWithoutPermissionsTest() throws RemoteException {
+ final int timeToFirstFix = 20000;
+ IGnssStatusListener mockGnssStatusListener = createMockGnssStatusListener();
+
+ disableLocationPermissions();
+
+ assertThrows(SecurityException.class, () -> mGnssManagerService
+ .registerGnssStatusCallback(
+ mockGnssStatusListener, "com.android.server", "abcd123"));
+
+ mTestGnssStatusProvider.onFirstFix(timeToFirstFix);
+
+ verify(mockGnssStatusListener, times(0)).onFirstFix(timeToFirstFix);
+ }
+
+ @Test
+ public void registerGnssStatusCallbackWithPermissionsTest() throws RemoteException {
+ final int timeToFirstFix = 20000;
+ IGnssStatusListener mockGnssStatusListener = createMockGnssStatusListener();
+
+ enableLocationPermissions();
+
+ assertThat(mGnssManagerService.registerGnssStatusCallback(
+ mockGnssStatusListener, "com.android.server", "abcd123")).isEqualTo(true);
+
+ mTestGnssStatusProvider.onFirstFix(timeToFirstFix);
+
+ verify(mockGnssStatusListener, times(1)).onFirstFix(timeToFirstFix);
+ }
+
+ @Test
+ public void unregisterGnssStatusCallbackWithPermissionsTest() throws RemoteException {
+ final int timeToFirstFix = 20000;
+ IGnssStatusListener mockGnssStatusListener = createMockGnssStatusListener();
+
+ enableLocationPermissions();
+
+ mGnssManagerService.registerGnssStatusCallback(
+ mockGnssStatusListener, "com.android.server", "abcd123");
+
+ mGnssManagerService.unregisterGnssStatusCallback(mockGnssStatusListener);
+
+ mTestGnssStatusProvider.onFirstFix(timeToFirstFix);
+
+ verify(mockGnssStatusListener, times(0)).onFirstFix(timeToFirstFix);
+ }
+
+ @Test
+ public void addGnssMeasurementsListenerWithoutPermissionsTest() throws RemoteException {
+ IGnssMeasurementsListener mockGnssMeasurementsListener =
+ createMockGnssMeasurementsListener();
+ GnssMeasurementsEvent gnssMeasurementsEvent = new GnssMeasurementsEvent(new GnssClock(),
+ null);
+
+ disableLocationPermissions();
+
+ assertThrows(SecurityException.class,
+ () -> mGnssManagerService.addGnssMeasurementsListener(
+ mockGnssMeasurementsListener,
+ "com.android.server", "abcd123", "TestGnssMeasurementsListener"));
+
+ mTestGnssMeasurementsProvider.onMeasurementsAvailable(gnssMeasurementsEvent);
+ verify(mockGnssMeasurementsListener, times(0)).onGnssMeasurementsReceived(
+ gnssMeasurementsEvent);
+ }
+
+ @Test
+ public void addGnssMeasurementsListenerWithPermissionsTest() throws RemoteException {
+ IGnssMeasurementsListener mockGnssMeasurementsListener =
+ createMockGnssMeasurementsListener();
+ GnssMeasurementsEvent gnssMeasurementsEvent = new GnssMeasurementsEvent(new GnssClock(),
+ null);
+
+ enableLocationPermissions();
+
+ assertThat(mGnssManagerService.addGnssMeasurementsListener(mockGnssMeasurementsListener,
+ "com.android.server", "abcd123", "TestGnssMeasurementsListener")).isEqualTo(true);
+
+ mTestGnssMeasurementsProvider.onMeasurementsAvailable(gnssMeasurementsEvent);
+ verify(mockGnssMeasurementsListener, times(1)).onGnssMeasurementsReceived(
+ gnssMeasurementsEvent);
+ }
+
+ @Test
+ public void injectGnssMeasurementCorrectionsWithoutPermissionsTest() {
+ GnssMeasurementCorrections gnssMeasurementCorrections =
+ createDummyGnssMeasurementCorrections();
+
+ disableLocationPermissions();
+
+ assertThrows(SecurityException.class,
+ () -> mGnssManagerService.injectGnssMeasurementCorrections(
+ gnssMeasurementCorrections, "com.android.server"));
+ verify(mMockGnssMeasurementCorrectionsProvider, times(0))
+ .injectGnssMeasurementCorrections(
+ gnssMeasurementCorrections);
+ }
+
+ @Test
+ public void injectGnssMeasurementCorrectionsWithPermissionsTest() {
+ GnssMeasurementCorrections gnssMeasurementCorrections =
+ createDummyGnssMeasurementCorrections();
+
+ enableLocationPermissions();
+
+ mGnssManagerService.injectGnssMeasurementCorrections(
+ gnssMeasurementCorrections, "com.android.server");
+ verify(mMockGnssMeasurementCorrectionsProvider, times(1))
+ .injectGnssMeasurementCorrections(
+ gnssMeasurementCorrections);
+ }
+
+ @Test
+ public void removeGnssMeasurementsListenerWithoutPermissionsTest() throws RemoteException {
+ IGnssMeasurementsListener mockGnssMeasurementsListener =
+ createMockGnssMeasurementsListener();
+ GnssMeasurementsEvent gnssMeasurementsEvent = new GnssMeasurementsEvent(new GnssClock(),
+ null);
+
+ enableLocationPermissions();
+
+ mGnssManagerService.addGnssMeasurementsListener(mockGnssMeasurementsListener,
+ "com.android.server", "abcd123", "TestGnssMeasurementsListener");
+
+ disableLocationPermissions();
+
+ mGnssManagerService.removeGnssMeasurementsListener(
+ mockGnssMeasurementsListener);
+
+ mTestGnssMeasurementsProvider.onMeasurementsAvailable(gnssMeasurementsEvent);
+ verify(mockGnssMeasurementsListener, times(0)).onGnssMeasurementsReceived(
+ gnssMeasurementsEvent);
+ }
+
+ @Test
+ public void removeGnssMeasurementsListenerWithPermissionsTest() throws RemoteException {
+ IGnssMeasurementsListener mockGnssMeasurementsListener =
+ createMockGnssMeasurementsListener();
+ GnssMeasurementsEvent gnssMeasurementsEvent = new GnssMeasurementsEvent(new GnssClock(),
+ null);
+
+ enableLocationPermissions();
+
+ mGnssManagerService.addGnssMeasurementsListener(mockGnssMeasurementsListener,
+ "com.android.server", "abcd123", "TestGnssMeasurementsListener");
+
+ disableLocationPermissions();
+
+ mGnssManagerService.removeGnssMeasurementsListener(
+ mockGnssMeasurementsListener);
+
+ mTestGnssMeasurementsProvider.onMeasurementsAvailable(gnssMeasurementsEvent);
+ verify(mockGnssMeasurementsListener, times(0)).onGnssMeasurementsReceived(
+ gnssMeasurementsEvent);
+ }
+
+ @Test
+ public void addGnssNavigationMessageListenerWithoutPermissionsTest() throws RemoteException {
+ IGnssNavigationMessageListener mockGnssNavigationMessageListener =
+ createMockGnssNavigationMessageListener();
+ GnssNavigationMessage gnssNavigationMessage = new GnssNavigationMessage();
+
+ disableLocationPermissions();
+
+ assertThrows(SecurityException.class,
+ () -> mGnssManagerService.addGnssNavigationMessageListener(
+ mockGnssNavigationMessageListener, "com.android.server",
+ "abcd123", "TestGnssNavigationMessageListener"));
+
+ mTestGnssNavigationMessageProvider.onNavigationMessageAvailable(gnssNavigationMessage);
+
+ verify(mockGnssNavigationMessageListener, times(0)).onGnssNavigationMessageReceived(
+ gnssNavigationMessage);
+ }
+
+ @Test
+ public void addGnssNavigationMessageListenerWithPermissionsTest() throws RemoteException {
+ IGnssNavigationMessageListener mockGnssNavigationMessageListener =
+ createMockGnssNavigationMessageListener();
+ GnssNavigationMessage gnssNavigationMessage = new GnssNavigationMessage();
+
+ enableLocationPermissions();
+
+ assertThat(mGnssManagerService.addGnssNavigationMessageListener(
+ mockGnssNavigationMessageListener, "com.android.server",
+ "abcd123", "TestGnssNavigationMessageListener")).isEqualTo(true);
+
+ mTestGnssNavigationMessageProvider.onNavigationMessageAvailable(gnssNavigationMessage);
+
+ verify(mockGnssNavigationMessageListener, times(1)).onGnssNavigationMessageReceived(
+ gnssNavigationMessage);
+ }
+
+ @Test
+ public void removeGnssNavigationMessageListenerWithoutPermissionsTest() throws RemoteException {
+ IGnssNavigationMessageListener mockGnssNavigationMessageListener =
+ createMockGnssNavigationMessageListener();
+ GnssNavigationMessage gnssNavigationMessage = new GnssNavigationMessage();
+
+ enableLocationPermissions();
+
+ mGnssManagerService.addGnssNavigationMessageListener(
+ mockGnssNavigationMessageListener, "com.android.server",
+ "abcd123", "TestGnssNavigationMessageListener");
+
+ disableLocationPermissions();
+
+ mGnssManagerService.removeGnssNavigationMessageListener(
+ mockGnssNavigationMessageListener);
+
+ mTestGnssNavigationMessageProvider.onNavigationMessageAvailable(gnssNavigationMessage);
+
+ verify(mockGnssNavigationMessageListener, times(0)).onGnssNavigationMessageReceived(
+ gnssNavigationMessage);
+ }
+
+ @Test
+ public void removeGnssNavigationMessageListenerWithPermissionsTest() throws RemoteException {
+ IGnssNavigationMessageListener mockGnssNavigationMessageListener =
+ createMockGnssNavigationMessageListener();
+ GnssNavigationMessage gnssNavigationMessage = new GnssNavigationMessage();
+
+ enableLocationPermissions();
+
+ mGnssManagerService.addGnssNavigationMessageListener(
+ mockGnssNavigationMessageListener, "com.android.server",
+ "abcd123", "TestGnssNavigationMessageListener");
+
+ mGnssManagerService.removeGnssNavigationMessageListener(
+ mockGnssNavigationMessageListener);
+
+ mTestGnssNavigationMessageProvider.onNavigationMessageAvailable(gnssNavigationMessage);
+
+ verify(mockGnssNavigationMessageListener, times(0)).onGnssNavigationMessageReceived(
+ gnssNavigationMessage);
+ }
+
+ @Test
+ public void sendNiResponseWithPermissionsTest() throws RemoteException {
+ when(mMockNetInitiatedListener.sendNiResponse(anyInt(), anyInt())).thenReturn(true);
+
+ int notifId = 0;
+ int userResponse = 0;
+ enableLocationPermissions();
+
+ assertThat(mGnssManagerService.sendNiResponse(notifId, userResponse)).isEqualTo(true);
+
+ verify(mMockNetInitiatedListener, times(1)).sendNiResponse(notifId, userResponse);
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java
index 46db978..64bd2c7 100644
--- a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java
@@ -143,6 +143,7 @@
import com.android.internal.util.test.BroadcastInterceptingContext.FutureIntent;
import com.android.server.DeviceIdleInternal;
import com.android.server.LocalServices;
+import com.android.server.usage.AppStandbyInternal;
import com.google.common.util.concurrent.AbstractFuture;
@@ -297,6 +298,7 @@
private void registerLocalServices() {
addLocalServiceMock(DeviceIdleInternal.class);
+ addLocalServiceMock(AppStandbyInternal.class);
final UsageStatsManagerInternal usageStats =
addLocalServiceMock(UsageStatsManagerInternal.class);
@@ -446,6 +448,7 @@
LocalServices.removeServiceForTest(ActivityManagerInternal.class);
LocalServices.removeServiceForTest(PowerManagerInternal.class);
LocalServices.removeServiceForTest(DeviceIdleInternal.class);
+ LocalServices.removeServiceForTest(AppStandbyInternal.class);
LocalServices.removeServiceForTest(UsageStatsManagerInternal.class);
LocalServices.removeServiceForTest(NetworkStatsManagerInternal.class);
}
diff --git a/services/tests/uiservicestests/Android.bp b/services/tests/uiservicestests/Android.bp
index 4a9cef1..92198fa 100644
--- a/services/tests/uiservicestests/Android.bp
+++ b/services/tests/uiservicestests/Android.bp
@@ -55,6 +55,6 @@
"libui",
"libunwindstack",
"libutils",
- "netd_aidl_interface-V2-cpp",
+ "netd_aidl_interface-cpp",
],
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryDatabaseTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryDatabaseTest.java
new file mode 100644
index 0000000..bcff2f8
--- /dev/null
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryDatabaseTest.java
@@ -0,0 +1,184 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.server.notification;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.NotificationHistory.HistoricalNotification;
+import android.graphics.drawable.Icon;
+import android.os.Handler;
+import android.util.AtomicFile;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.server.UiServiceTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.File;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
+@RunWith(AndroidJUnit4.class)
+public class NotificationHistoryDatabaseTest extends UiServiceTestCase {
+
+ File mRootDir;
+ @Mock
+ Handler mFileWriteHandler;
+
+ NotificationHistoryDatabase mDataBase;
+
+ private HistoricalNotification getHistoricalNotification(int index) {
+ return getHistoricalNotification("package" + index, index);
+ }
+
+ private HistoricalNotification getHistoricalNotification(String packageName, int index) {
+ String expectedChannelName = "channelName" + index;
+ String expectedChannelId = "channelId" + index;
+ int expectedUid = 1123456 + index;
+ int expectedUserId = 11 + index;
+ long expectedPostTime = 987654321 + index;
+ String expectedTitle = "title" + index;
+ String expectedText = "text" + index;
+ Icon expectedIcon = Icon.createWithResource(InstrumentationRegistry.getContext(),
+ index);
+
+ return new HistoricalNotification.Builder()
+ .setPackage(packageName)
+ .setChannelName(expectedChannelName)
+ .setChannelId(expectedChannelId)
+ .setUid(expectedUid)
+ .setUserId(expectedUserId)
+ .setPostedTimeMs(expectedPostTime)
+ .setTitle(expectedTitle)
+ .setText(expectedText)
+ .setIcon(expectedIcon)
+ .build();
+ }
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mRootDir = new File(mContext.getFilesDir(), "NotificationHistoryDatabaseTest");
+
+ mDataBase = new NotificationHistoryDatabase(mRootDir);
+ mDataBase.init(mFileWriteHandler);
+ }
+
+ @Test
+ public void testPrune() {
+ int retainDays = 1;
+ for (long i = 10; i >= 5; i--) {
+ File file = mock(File.class);
+ when(file.lastModified()).thenReturn(i);
+ AtomicFile af = new AtomicFile(file);
+ mDataBase.mHistoryFiles.addLast(af);
+ }
+ GregorianCalendar cal = new GregorianCalendar();
+ cal.setTimeInMillis(5);
+ cal.add(Calendar.DATE, -1 * retainDays);
+ for (int i = 5; i >= 0; i--) {
+ File file = mock(File.class);
+ when(file.lastModified()).thenReturn(cal.getTimeInMillis() - i);
+ AtomicFile af = new AtomicFile(file);
+ mDataBase.mHistoryFiles.addLast(af);
+ }
+ mDataBase.prune(retainDays, 10);
+
+ for (AtomicFile file : mDataBase.mHistoryFiles) {
+ assertThat(file.getBaseFile().lastModified() > 0);
+ }
+ }
+
+ @Test
+ public void testOnPackageRemove_posts() {
+ mDataBase.onPackageRemoved("test");
+ verify(mFileWriteHandler, times(1)).post(any());
+ }
+
+ @Test
+ public void testForceWriteToDisk() {
+ mDataBase.forceWriteToDisk();
+ verify(mFileWriteHandler, times(1)).post(any());
+ }
+
+ @Test
+ public void testOnlyOneWriteRunnableInQueue() {
+ when(mFileWriteHandler.hasCallbacks(any())).thenReturn(true);
+ mDataBase.forceWriteToDisk();
+ verify(mFileWriteHandler, never()).post(any());
+ }
+
+ @Test
+ public void testAddNotification() {
+ HistoricalNotification n = getHistoricalNotification(1);
+ HistoricalNotification n2 = getHistoricalNotification(2);
+
+ mDataBase.addNotification(n);
+ assertThat(mDataBase.mBuffer.getNotificationsToWrite()).contains(n);
+ verify(mFileWriteHandler, times(1)).postDelayed(any(), anyLong());
+
+ // second add should not trigger another write
+ mDataBase.addNotification(n2);
+ assertThat(mDataBase.mBuffer.getNotificationsToWrite()).contains(n2);
+ verify(mFileWriteHandler, times(1)).postDelayed(any(), anyLong());
+ }
+
+ @Test
+ public void testReadNotificationHistory_readsAllFiles() throws Exception {
+ for (long i = 10; i >= 5; i--) {
+ AtomicFile af = mock(AtomicFile.class);
+ mDataBase.mHistoryFiles.addLast(af);
+ }
+
+ mDataBase.readNotificationHistory();
+
+ for (AtomicFile file : mDataBase.mHistoryFiles) {
+ verify(file, times(1)).openRead();
+ }
+ }
+
+ @Test
+ public void testReadNotificationHistory_withNumFilterDoesNotReadExtraFiles() throws Exception {
+ AtomicFile af = mock(AtomicFile.class);
+ when(af.getBaseFile()).thenReturn(new File(mRootDir, "af"));
+ mDataBase.mHistoryFiles.addLast(af);
+
+ AtomicFile af2 = mock(AtomicFile.class);
+ when(af2.getBaseFile()).thenReturn(new File(mRootDir, "af2"));
+ mDataBase.mHistoryFiles.addLast(af2);
+
+ mDataBase.readNotificationHistory(null, null, 0);
+
+ verify(af, times(1)).openRead();
+ verify(af2, never()).openRead();
+ }
+
+}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryFilterTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryFilterTest.java
new file mode 100644
index 0000000..10bfcf1
--- /dev/null
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryFilterTest.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.server.notification;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.NotificationHistory;
+import android.app.NotificationHistory.HistoricalNotification;
+import android.graphics.drawable.Icon;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.server.UiServiceTestCase;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class NotificationHistoryFilterTest extends UiServiceTestCase {
+
+ private HistoricalNotification getHistoricalNotification(int index) {
+ return getHistoricalNotification("package" + index, "channelId" + index, index);
+ }
+ private HistoricalNotification getHistoricalNotification(String pkg, int index) {
+ return getHistoricalNotification(pkg, "channelId" + index, index);
+ }
+
+ private HistoricalNotification getHistoricalNotification(String packageName, String channelId,
+ int index) {
+ String expectedChannelName = "channelName" + index;
+ int expectedUid = 1123456 + index;
+ int expectedUserId = 11 + index;
+ long expectedPostTime = 987654321 + index;
+ String expectedTitle = "title" + index;
+ String expectedText = "text" + index;
+ Icon expectedIcon = Icon.createWithResource(InstrumentationRegistry.getContext(),
+ index);
+
+ return new HistoricalNotification.Builder()
+ .setPackage(packageName)
+ .setChannelName(expectedChannelName)
+ .setChannelId(channelId)
+ .setUid(expectedUid)
+ .setUserId(expectedUserId)
+ .setPostedTimeMs(expectedPostTime)
+ .setTitle(expectedTitle)
+ .setText(expectedText)
+ .setIcon(expectedIcon)
+ .build();
+ }
+
+ @Test
+ public void testBuilder() {
+ NotificationHistoryFilter filter = new NotificationHistoryFilter.Builder()
+ .setChannel("pkg", "channel")
+ .setMaxNotifications(3)
+ .build();
+
+ assertThat(filter.getPackage()).isEqualTo("pkg");
+ assertThat(filter.getChannel()).isEqualTo("channel");
+ assertThat(filter.getMaxNotifications()).isEqualTo(3);
+ }
+
+ @Test
+ public void testMatchesCountFilter() {
+ NotificationHistoryFilter filter = new NotificationHistoryFilter.Builder()
+ .setMaxNotifications(3)
+ .build();
+
+ NotificationHistory history = new NotificationHistory();
+ assertThat(filter.matchesCountFilter(history)).isTrue();
+ history.addNotificationToWrite(getHistoricalNotification(1));
+ assertThat(filter.matchesCountFilter(history)).isTrue();
+ history.addNotificationToWrite(getHistoricalNotification(2));
+ assertThat(filter.matchesCountFilter(history)).isTrue();
+ history.addNotificationToWrite(getHistoricalNotification(3));
+ assertThat(filter.matchesCountFilter(history)).isFalse();
+ }
+
+ @Test
+ public void testMatchesCountFilter_noCountFilter() {
+ NotificationHistoryFilter filter = new NotificationHistoryFilter.Builder()
+ .build();
+
+ NotificationHistory history = new NotificationHistory();
+ assertThat(filter.matchesCountFilter(history)).isTrue();
+ history.addNotificationToWrite(getHistoricalNotification(1));
+ assertThat(filter.matchesCountFilter(history)).isTrue();
+ }
+
+ @Test
+ public void testMatchesPackageAndChannelFilter_pkgOnly() {
+ NotificationHistoryFilter filter = new NotificationHistoryFilter.Builder()
+ .setPackage("pkg")
+ .build();
+
+ HistoricalNotification hnMatches = getHistoricalNotification("pkg", 1);
+ assertThat(filter.matchesPackageAndChannelFilter(hnMatches)).isTrue();
+ HistoricalNotification hnMatches2 = getHistoricalNotification("pkg", 2);
+ assertThat(filter.matchesPackageAndChannelFilter(hnMatches2)).isTrue();
+
+ HistoricalNotification hnNoMatch = getHistoricalNotification("pkg2", 2);
+ assertThat(filter.matchesPackageAndChannelFilter(hnNoMatch)).isFalse();
+ }
+
+ @Test
+ public void testMatchesPackageAndChannelFilter_channelAlso() {
+ NotificationHistoryFilter filter = new NotificationHistoryFilter.Builder()
+ .setChannel("pkg", "channel")
+ .build();
+
+ HistoricalNotification hn1 = getHistoricalNotification("pkg", 1);
+ assertThat(filter.matchesPackageAndChannelFilter(hn1)).isFalse();
+
+ HistoricalNotification hn2 = getHistoricalNotification("pkg", "channel", 1);
+ assertThat(filter.matchesPackageAndChannelFilter(hn2)).isTrue();
+
+ HistoricalNotification hn3 = getHistoricalNotification("pkg2", "channel", 1);
+ assertThat(filter.matchesPackageAndChannelFilter(hn3)).isFalse();
+ }
+
+ @Test
+ public void testIsFiltering() {
+ NotificationHistoryFilter filter = new NotificationHistoryFilter.Builder()
+ .build();
+ assertThat(filter.isFiltering()).isFalse();
+
+ filter = new NotificationHistoryFilter.Builder()
+ .setPackage("pkg")
+ .build();
+ assertThat(filter.isFiltering()).isTrue();
+
+ filter = new NotificationHistoryFilter.Builder()
+ .setChannel("pkg", "channel")
+ .build();
+ assertThat(filter.isFiltering()).isTrue();
+
+ filter = new NotificationHistoryFilter.Builder()
+ .setMaxNotifications(5)
+ .build();
+ assertThat(filter.isFiltering()).isTrue();
+ }
+}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryProtoHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryProtoHelperTest.java
new file mode 100644
index 0000000..458117d
--- /dev/null
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryProtoHelperTest.java
@@ -0,0 +1,297 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.server.notification;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.NotificationHistory;
+import android.app.NotificationHistory.HistoricalNotification;
+import android.graphics.drawable.Icon;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.server.UiServiceTestCase;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class NotificationHistoryProtoHelperTest extends UiServiceTestCase {
+
+ private HistoricalNotification getHistoricalNotification(int index) {
+ return getHistoricalNotification("package" + index, index);
+ }
+
+ private HistoricalNotification getHistoricalNotification(String packageName, int index) {
+ String expectedChannelName = "channelName" + index;
+ String expectedChannelId = "channelId" + index;
+ int expectedUid = 1123456 + index;
+ int expectedUserId = 11 + index;
+ long expectedPostTime = 987654321 + index;
+ String expectedTitle = "title" + index;
+ String expectedText = "text" + index;
+ Icon expectedIcon = Icon.createWithResource(InstrumentationRegistry.getContext(),
+ index);
+
+ return new HistoricalNotification.Builder()
+ .setPackage(packageName)
+ .setChannelName(expectedChannelName)
+ .setChannelId(expectedChannelId)
+ .setUid(expectedUid)
+ .setUserId(expectedUserId)
+ .setPostedTimeMs(expectedPostTime)
+ .setTitle(expectedTitle)
+ .setText(expectedText)
+ .setIcon(expectedIcon)
+ .build();
+ }
+
+ @Test
+ public void testReadWriteNotifications() throws Exception {
+ NotificationHistory history = new NotificationHistory();
+
+ List<HistoricalNotification> expectedEntries = new ArrayList<>();
+ // loops backwards just to maintain the post time newest -> oldest expectation
+ for (int i = 10; i >= 1; i--) {
+ HistoricalNotification n = getHistoricalNotification(i);
+ expectedEntries.add(n);
+ history.addNotificationToWrite(n);
+ }
+ history.poolStringsFromNotifications();
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ NotificationHistoryProtoHelper.write(baos, history, 1);
+
+ NotificationHistory actualHistory = new NotificationHistory();
+ NotificationHistoryProtoHelper.read(
+ new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())),
+ actualHistory,
+ new NotificationHistoryFilter.Builder().build());
+
+ assertThat(actualHistory.getHistoryCount()).isEqualTo(history.getHistoryCount());
+ assertThat(actualHistory.getNotificationsToWrite())
+ .containsExactlyElementsIn(expectedEntries);
+ }
+
+ @Test
+ public void testReadWriteNotifications_stringFieldsPersistedEvenIfNoPool() throws Exception {
+ NotificationHistory history = new NotificationHistory();
+
+ List<HistoricalNotification> expectedEntries = new ArrayList<>();
+ // loops backwards just to maintain the post time newest -> oldest expectation
+ for (int i = 10; i >= 1; i--) {
+ HistoricalNotification n = getHistoricalNotification(i);
+ expectedEntries.add(n);
+ history.addNotificationToWrite(n);
+ }
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ NotificationHistoryProtoHelper.write(baos, history, 1);
+
+ NotificationHistory actualHistory = new NotificationHistory();
+ NotificationHistoryProtoHelper.read(
+ new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())),
+ actualHistory,
+ new NotificationHistoryFilter.Builder().build());
+
+ assertThat(actualHistory.getHistoryCount()).isEqualTo(history.getHistoryCount());
+ assertThat(actualHistory.getNotificationsToWrite())
+ .containsExactlyElementsIn(expectedEntries);
+ }
+
+ @Test
+ public void testReadNotificationsWithPkgFilter() throws Exception {
+ NotificationHistory history = new NotificationHistory();
+
+ List<HistoricalNotification> expectedEntries = new ArrayList<>();
+ Set<String> expectedStrings = new HashSet<>();
+ // loops backwards just to maintain the post time newest -> oldest expectation
+ for (int i = 10; i >= 1; i--) {
+ HistoricalNotification n =
+ getHistoricalNotification((i % 2 == 0) ? "pkgEven" : "pkgOdd", i);
+
+ if (i % 2 == 0) {
+ expectedStrings.add(n.getPackage());
+ expectedStrings.add(n.getChannelName());
+ expectedStrings.add(n.getChannelId());
+ expectedEntries.add(n);
+ }
+ history.addNotificationToWrite(n);
+ }
+ history.poolStringsFromNotifications();
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ NotificationHistoryProtoHelper.write(baos, history, 1);
+
+ NotificationHistory actualHistory = new NotificationHistory();
+
+ NotificationHistoryFilter filter = new NotificationHistoryFilter.Builder()
+ .setPackage("pkgEven")
+ .build();
+ NotificationHistoryProtoHelper.read(
+ new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())),
+ actualHistory,
+ filter);
+
+ assertThat(actualHistory.getNotificationsToWrite())
+ .containsExactlyElementsIn(expectedEntries);
+ assertThat(Arrays.asList(actualHistory.getPooledStringsToWrite()))
+ .containsExactlyElementsIn(expectedStrings);
+ }
+
+ @Test
+ public void testReadNotificationsWithNumberFilter() throws Exception {
+ int maxCount = 3;
+ NotificationHistory history = new NotificationHistory();
+
+ List<HistoricalNotification> expectedEntries = new ArrayList<>();
+ Set<String> expectedStrings = new HashSet<>();
+ for (int i = 1; i < 10; i++) {
+ HistoricalNotification n = getHistoricalNotification(i);
+
+ if (i <= maxCount) {
+ expectedStrings.add(n.getPackage());
+ expectedStrings.add(n.getChannelName());
+ expectedStrings.add(n.getChannelId());
+ expectedEntries.add(n);
+ }
+ history.addNotificationToWrite(n);
+ }
+ history.poolStringsFromNotifications();
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ NotificationHistoryProtoHelper.write(baos, history, 1);
+
+ NotificationHistory actualHistory = new NotificationHistory();
+
+ NotificationHistoryFilter filter = new NotificationHistoryFilter.Builder()
+ .setMaxNotifications(maxCount)
+ .build();
+ NotificationHistoryProtoHelper.read(
+ new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())),
+ actualHistory,
+ filter);
+
+ assertThat(actualHistory.getNotificationsToWrite())
+ .containsExactlyElementsIn(expectedEntries);
+ assertThat(Arrays.asList(actualHistory.getPooledStringsToWrite()))
+ .containsExactlyElementsIn(expectedStrings);
+ }
+
+ @Test
+ public void testReadNotificationsWithNumberFilter_preExistingNotifs() throws Exception {
+ List<HistoricalNotification> expectedEntries = new ArrayList<>();
+ Set<String> expectedStrings = new HashSet<>();
+ int maxCount = 3;
+
+ NotificationHistory history = new NotificationHistory();
+ HistoricalNotification old1 = getHistoricalNotification(40);
+ history.addNotificationToWrite(old1);
+ expectedEntries.add(old1);
+
+ HistoricalNotification old2 = getHistoricalNotification(50);
+ history.addNotificationToWrite(old2);
+ expectedEntries.add(old2);
+ history.poolStringsFromNotifications();
+ expectedStrings.addAll(Arrays.asList(history.getPooledStringsToWrite()));
+
+ for (int i = 1; i < 10; i++) {
+ HistoricalNotification n = getHistoricalNotification(i);
+
+ if (i <= (maxCount - 2)) {
+ expectedStrings.add(n.getPackage());
+ expectedStrings.add(n.getChannelName());
+ expectedStrings.add(n.getChannelId());
+ expectedEntries.add(n);
+ }
+ history.addNotificationToWrite(n);
+ }
+ history.poolStringsFromNotifications();
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ NotificationHistoryProtoHelper.write(baos, history, 1);
+
+ NotificationHistory actualHistory = new NotificationHistory();
+
+ NotificationHistoryFilter filter = new NotificationHistoryFilter.Builder()
+ .setMaxNotifications(maxCount)
+ .build();
+ NotificationHistoryProtoHelper.read(
+ new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())),
+ actualHistory,
+ filter);
+
+ assertThat(actualHistory.getNotificationsToWrite())
+ .containsExactlyElementsIn(expectedEntries);
+ assertThat(Arrays.asList(actualHistory.getPooledStringsToWrite()))
+ .containsExactlyElementsIn(expectedStrings);
+ }
+
+ @Test
+ public void testReadMergeIntoExistingHistory() throws Exception {
+ NotificationHistory history = new NotificationHistory();
+
+ List<HistoricalNotification> expectedEntries = new ArrayList<>();
+ Set<String> expectedStrings = new HashSet<>();
+ for (int i = 1; i < 10; i++) {
+ HistoricalNotification n = getHistoricalNotification(i);
+ expectedEntries.add(n);
+ expectedStrings.add(n.getPackage());
+ expectedStrings.add(n.getChannelName());
+ expectedStrings.add(n.getChannelId());
+ history.addNotificationToWrite(n);
+ }
+ history.poolStringsFromNotifications();
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ NotificationHistoryProtoHelper.write(baos, history, 1);
+
+ // set up pre-existing notification history, as though read from a different file
+ NotificationHistory actualHistory = new NotificationHistory();
+ for (int i = 10; i < 20; i++) {
+ HistoricalNotification n = getHistoricalNotification(i);
+ expectedEntries.add(n);
+ expectedStrings.add(n.getPackage());
+ expectedStrings.add(n.getChannelName());
+ expectedStrings.add(n.getChannelId());
+ actualHistory.addNotificationToWrite(n);
+ }
+ actualHistory.poolStringsFromNotifications();
+
+ NotificationHistoryProtoHelper.read(
+ new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())),
+ actualHistory,
+ new NotificationHistoryFilter.Builder().build());
+
+ // Make sure history contains the original and new entries
+ assertThat(actualHistory.getNotificationsToWrite())
+ .containsExactlyElementsIn(expectedEntries);
+ assertThat(Arrays.asList(actualHistory.getPooledStringsToWrite()))
+ .containsExactlyElementsIn(expectedStrings);
+ }
+}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
index aceb633..99ecdcb 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -995,6 +995,35 @@
}
/**
+ * Verify that finish request won't change the state of next top activity if the current
+ * finishing activity doesn't need to be destroyed immediately. The case is usually like
+ * from {@link ActivityStack#completePauseLocked(boolean, ActivityRecord)} to
+ * {@link ActivityRecord#completeFinishing(String)}, so the complete-pause should take the
+ * responsibility to resume the next activity with updating the state.
+ */
+ @Test
+ public void testCompleteFinishing_keepStateOfNextInvisible() {
+ final ActivityRecord currentTop = mActivity;
+ currentTop.visible = currentTop.nowVisible = true;
+
+ // Simulates that {@code currentTop} starts an existing activity from background (so its
+ // state is stopped) and the starting flow just goes to place it at top.
+ final ActivityStack nextStack = new StackBuilder(mRootActivityContainer).build();
+ final ActivityRecord nextTop = nextStack.getTopActivity();
+ nextTop.setState(STOPPED, "test");
+
+ mStack.mPausingActivity = currentTop;
+ currentTop.finishing = true;
+ currentTop.setState(PAUSED, "test");
+ currentTop.completeFinishing("completePauseLocked");
+
+ // Current top becomes stopping because it is visible and the next is invisible.
+ assertEquals(STOPPING, currentTop.getState());
+ // The state of next activity shouldn't be changed.
+ assertEquals(STOPPED, nextTop.getState());
+ }
+
+ /**
* Verify that complete finish request for visible activity must be delayed before the next one
* becomes visible.
*/
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
old mode 100755
new mode 100644
index 047b220..58e15b9
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -1448,6 +1448,15 @@
"stk_disable_launch_browser_bool";
/**
+ * Boolean indicating if the helper text for STK GET INKEY/INPUT commands with the digit only
+ * mode is displayed on the input screen.
+ * The helper text is dispayed regardless of the input mode, if {@code false}.
+ * @hide
+ */
+ public static final String KEY_HIDE_DIGITS_HELPER_TEXT_ON_STK_INPUT_SCREEN_BOOL =
+ "hide_digits_helper_text_on_stk_input_screen_bool";
+
+ /**
* Boolean indicating if show data RAT icon on status bar even when data is disabled
* @hide
*/
@@ -3525,6 +3534,7 @@
sDefaults.putBoolean(KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL, false);
sDefaults.putBoolean(KEY_STK_DISABLE_LAUNCH_BROWSER_BOOL, false);
sDefaults.putBoolean(KEY_ALLOW_METERED_NETWORK_FOR_CERT_DOWNLOAD_BOOL, false);
+ sDefaults.putBoolean(KEY_HIDE_DIGITS_HELPER_TEXT_ON_STK_INPUT_SCREEN_BOOL, true);
sDefaults.putStringArray(KEY_CARRIER_WIFI_STRING_ARRAY, null);
sDefaults.putInt(KEY_PREF_NETWORK_NOTIFICATION_DELAY_INT, -1);
sDefaults.putInt(KEY_EMERGENCY_NOTIFICATION_DELAY_INT, -1);
diff --git a/tests/RollbackTest/Android.bp b/tests/RollbackTest/Android.bp
index 085c53c..2bc129a 100644
--- a/tests/RollbackTest/Android.bp
+++ b/tests/RollbackTest/Android.bp
@@ -25,6 +25,7 @@
name: "StagedRollbackTest",
srcs: ["StagedRollbackTest/src/**/*.java"],
libs: ["tradefed"],
+ static_libs: ["testng"],
test_suites: ["general-tests"],
test_config: "StagedRollbackTest.xml",
}
diff --git a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java
index b51aad1..bfb4968 100644
--- a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java
+++ b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java
@@ -229,13 +229,21 @@
RollbackManager rm = RollbackUtils.getRollbackManager();
assertThat(getUniqueRollbackInfoForPackage(rm.getAvailableRollbacks(),
getNetworkStackPackageName())).isNotNull();
+
+ // Sleep for < health check deadline
+ Thread.sleep(TimeUnit.SECONDS.toMillis(5));
+ // Verify rollback was not executed before health check deadline
+ assertThat(getUniqueRollbackInfoForPackage(rm.getRecentlyCommittedRollbacks(),
+ getNetworkStackPackageName())).isNull();
}
@Test
public void testNetworkFailedRollback_Phase3() throws Exception {
- RollbackManager rm = RollbackUtils.getRollbackManager();
- assertThat(getUniqueRollbackInfoForPackage(rm.getRecentlyCommittedRollbacks(),
- getNetworkStackPackageName())).isNull();
+ // Sleep for > health check deadline
+ // The device is expected to reboot during sleeping. This device method will fail and
+ // the host will catch the assertion. If reboot doesn't happen, the host will fail the
+ // assertion.
+ Thread.sleep(TimeUnit.SECONDS.toMillis(120));
}
@Test
diff --git a/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java b/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java
index f7fe6c7..c10169b 100644
--- a/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java
+++ b/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java
@@ -17,6 +17,7 @@
package com.android.tests.rollback.host;
import static org.junit.Assert.assertTrue;
+import static org.testng.Assert.assertThrows;
import com.android.ddmlib.Log.LogLevel;
import com.android.tradefed.log.LogUtil.CLog;
@@ -124,7 +125,7 @@
runPhase("testNetworkFailedRollback_Phase1");
// Reduce health check deadline
getDevice().executeShellCommand("device_config put rollback "
- + "watchdog_request_timeout_millis 300000");
+ + "watchdog_request_timeout_millis 120000");
// Simulate re-installation of new NetworkStack with rollbacks enabled
getDevice().executeShellCommand("pm install -r --staged --enable-rollback "
+ "/system/priv-app/NetworkStack/NetworkStack.apk");
@@ -136,22 +137,7 @@
// Verify rollback was enabled
runPhase("testNetworkFailedRollback_Phase2");
-
- // Sleep for < health check deadline
- Thread.sleep(5000);
- // Verify rollback was not executed before health check deadline
- runPhase("testNetworkFailedRollback_Phase3");
- try {
- // This is expected to fail due to the device being rebooted out
- // from underneath the test. If this fails for reasons other than
- // the device reboot, those failures should result in failure of
- // the testNetworkFailedRollback_Phase4 phase.
- CLog.logAndDisplay(LogLevel.INFO, "Sleep and expect to fail while sleeping");
- // Sleep for > health check deadline
- Thread.sleep(260000);
- } catch (AssertionError e) {
- // AssertionError is expected.
- }
+ assertThrows(AssertionError.class, () -> runPhase("testNetworkFailedRollback_Phase3"));
getDevice().waitForDeviceAvailable();
// Verify rollback was executed after health check deadline
diff --git a/tests/net/Android.bp b/tests/net/Android.bp
index b9b2238..10f27e2 100644
--- a/tests/net/Android.bp
+++ b/tests/net/Android.bp
@@ -37,7 +37,7 @@
"libvndksupport",
"libziparchive",
"libz",
- "netd_aidl_interface-V2-cpp",
+ "netd_aidl_interface-cpp",
],
}
diff --git a/tests/testables/src/android/testing/TestableSettingsProvider.java b/tests/testables/src/android/testing/TestableSettingsProvider.java
index b158476..fd92c65 100644
--- a/tests/testables/src/android/testing/TestableSettingsProvider.java
+++ b/tests/testables/src/android/testing/TestableSettingsProvider.java
@@ -14,6 +14,8 @@
package android.testing;
+import static org.junit.Assert.assertEquals;
+
import android.content.ContentProviderClient;
import android.content.Context;
import android.os.Bundle;
@@ -25,8 +27,6 @@
import java.util.HashMap;
-import static org.junit.Assert.*;
-
/**
* Allows calls to android.provider.Settings to be tested easier.
*
@@ -71,7 +71,7 @@
public Bundle call(String method, String arg, Bundle extras) {
// Methods are "GET_system", "GET_global", "PUT_secure", etc.
- final int userId = extras.getInt(Settings.CALL_METHOD_USER_KEY, 0);
+ final int userId = extras.getInt(Settings.CALL_METHOD_USER_KEY, UserHandle.myUserId());
final String[] commands = method.split("_", 2);
final String op = commands[0];
final String table = commands[1];
diff --git a/tools/codegen/src/com/android/codegen/Generators.kt b/tools/codegen/src/com/android/codegen/Generators.kt
index 431f378..bd32f9c 100644
--- a/tools/codegen/src/com/android/codegen/Generators.kt
+++ b/tools/codegen/src/com/android/codegen/Generators.kt
@@ -212,13 +212,15 @@
"Object"
}
+ val maybeFinal = if_(classAst.isFinal, "final ")
+
+"/**"
+" * A builder for {@link $ClassName}"
if (FeatureFlag.BUILDER.hidden) +" * @hide"
+" */"
+"@SuppressWarnings(\"WeakerAccess\")"
+GENERATED_MEMBER_HEADER
- !"public static class $BuilderClass$genericArgs"
+ !"public static ${maybeFinal}class $BuilderClass$genericArgs"
if (BuilderSupertype != "Object") {
appendSameLine(" extends $BuilderSupertype")
}
@@ -359,7 +361,7 @@
private fun ClassPrinter.generateBuilderBuild() {
+"/** Builds the instance. This builder should not be touched after calling this! */"
- "public $ClassType build()" {
+ "public @$NonNull $ClassType build()" {
+"checkNotUsed();"
+"mBuilderFieldsSet |= ${bitAtExpr(fields.size)}; // Mark builder used"
+""
diff --git a/tools/codegen/src/com/android/codegen/SharedConstants.kt b/tools/codegen/src/com/android/codegen/SharedConstants.kt
index 3eb9e7b..270d34a 100644
--- a/tools/codegen/src/com/android/codegen/SharedConstants.kt
+++ b/tools/codegen/src/com/android/codegen/SharedConstants.kt
@@ -1,7 +1,7 @@
package com.android.codegen
const val CODEGEN_NAME = "codegen"
-const val CODEGEN_VERSION = "1.0.9"
+const val CODEGEN_VERSION = "1.0.11"
const val CANONICAL_BUILDER_CLASS = "Builder"
const val BASE_BUILDER_CLASS = "BaseBuilder"