summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobService.java8
-rw-r--r--apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java4
-rw-r--r--core/api/current.txt2
-rw-r--r--core/java/android/app/IActivityManager.aidl19
-rw-r--r--core/java/android/app/Instrumentation.java7
-rw-r--r--core/java/android/content/pm/InstallSourceInfo.java4
-rw-r--r--core/java/android/credentials/ui/RequestInfo.java38
-rw-r--r--core/java/android/hardware/input/InputManager.java111
-rw-r--r--core/java/android/hardware/input/InputManagerGlobal.java217
-rw-r--r--core/java/android/os/RemoteException.java6
-rw-r--r--core/java/android/service/credentials/CredentialProviderInfoFactory.java26
-rw-r--r--core/java/android/service/credentials/PermissionUtils.java50
-rw-r--r--core/java/android/util/SafetyProtectionUtils.java24
-rw-r--r--core/java/android/view/InputDevice.java39
-rw-r--r--core/java/android/view/OWNERS3
-rw-r--r--core/java/android/view/accessibility/AccessibilityNodeInfo.java51
-rw-r--r--core/res/res/values/config_telephony.xml5
-rw-r--r--core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java2
-rw-r--r--data/etc/platform.xml3
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java3
-rw-r--r--libs/WindowManager/Shell/res/color-night/taskbar_background.xml2
-rw-r--r--libs/WindowManager/Shell/res/color/taskbar_background.xml2
-rw-r--r--libs/WindowManager/Shell/res/values-mr/strings_tv.xml2
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java2
-rw-r--r--libs/hwui/Properties.cpp2
-rw-r--r--packages/CarrierDefaultApp/res/values-af/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-am/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-as/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-az/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-b+sr+Latn/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-bg/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-bn/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-bs/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-ca/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-de/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-el/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-en-rAU/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-en-rCA/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-en-rGB/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-en-rIN/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-en-rXC/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-es-rUS/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-es/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-et/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-eu/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-fa/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-fr/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-gu/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-hi/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-hr/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-hu/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-in/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-is/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-iw/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-ka/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-kk/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-km/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-kn/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-ko/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-ky/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-lo/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-lt/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-lv/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-mk/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-ml/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-mn/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-mr/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-ms/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-my/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-ne/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-nl/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-or/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-pl/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-pt-rBR/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-pt-rPT/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-pt/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-ro/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-ru/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-sk/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-sl/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-sq/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-sr/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-sv/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-sw/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-te/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-th/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-tl/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-ur/strings.xml7
-rw-r--r--packages/CarrierDefaultApp/res/values-uz/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-vi/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-zh-rCN/strings.xml9
-rw-r--r--packages/CarrierDefaultApp/res/values-zu/strings.xml9
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt42
-rw-r--r--packages/CtsShim/Android.bp6
-rw-r--r--packages/SystemUI/res/drawable/ic_sysbar_back.xml10
-rw-r--r--packages/SystemUI/res/drawable/ic_sysbar_home.xml10
-rw-r--r--packages/SystemUI/res/drawable/ic_sysbar_recent.xml10
-rw-r--r--packages/SystemUI/res/layout/dream_overlay_container.xml11
-rw-r--r--packages/SystemUI/res/values/dimens.xml10
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java19
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java17
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/HomeWifiViewModel.kt45
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/KeyguardWifiViewModel.kt42
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/LocationBasedWifiViewModel.kt66
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/QsWifiViewModel.kt42
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt46
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelCommon.kt42
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java10
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java12
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt29
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt74
-rw-r--r--services/companion/java/com/android/server/companion/securechannel/SecureChannel.java93
-rw-r--r--services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java29
-rw-r--r--services/companion/java/com/android/server/companion/transport/RawTransport.java36
-rw-r--r--services/companion/java/com/android/server/companion/transport/SecureTransport.java30
-rw-r--r--services/companion/java/com/android/server/companion/transport/Transport.java21
-rw-r--r--services/core/java/com/android/server/am/BatteryStatsService.java6
-rw-r--r--services/core/java/com/android/server/appop/AppOpsService.java81
-rwxr-xr-xservices/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java3
-rw-r--r--services/core/java/com/android/server/input/InputShellCommand.java7
-rw-r--r--services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java3
-rw-r--r--services/core/java/com/android/server/pm/ApkChecksums.java3
-rw-r--r--services/core/java/com/android/server/pm/BackgroundInstallControlService.java2
-rw-r--r--services/core/java/com/android/server/pm/InstallPackageHelper.java3
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerService.java4
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerSession.java6
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java8
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerServiceUtils.java8
-rw-r--r--services/core/java/com/android/server/power/stats/CpuWakeupStats.java23
-rw-r--r--services/core/java/com/android/server/tv/interactive/TvInteractiveAppManagerService.java2
-rw-r--r--services/core/java/com/android/server/wm/TaskFragment.java9
-rw-r--r--services/core/java/com/android/server/wm/WindowContainer.java8
-rw-r--r--services/credentials/java/com/android/server/credentials/CreateRequestSession.java6
-rw-r--r--services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java4
-rw-r--r--services/credentials/java/com/android/server/credentials/ProviderGetSession.java21
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/appop/AppOpsServiceTest.java48
-rw-r--r--services/tests/servicestests/src/com/android/server/job/BiasSchedulingTest.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/BackgroundInstallControlServiceTest.java60
-rw-r--r--telephony/java/android/telephony/ims/ImsService.java27
-rw-r--r--telephony/java/android/telephony/ims/aidl/IImsServiceController.aidl1
145 files changed, 1284 insertions, 1079 deletions
diff --git a/apex/jobscheduler/framework/java/android/app/job/JobService.java b/apex/jobscheduler/framework/java/android/app/job/JobService.java
index 2ab432488df5..cd92f3d953c0 100644
--- a/apex/jobscheduler/framework/java/android/app/job/JobService.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobService.java
@@ -166,7 +166,8 @@ public abstract class JobService extends Service {
* the job in the {@link #onStartJob(JobParameters)} callback.
* @param wantsReschedule {@code true} if this job should be rescheduled according
* to the back-off criteria specified when it was first scheduled; {@code false}
- * otherwise.
+ * otherwise. When {@code false} is returned for a periodic job,
+ * the job will be rescheduled according to its periodic policy.
*/
public final void jobFinished(JobParameters params, boolean wantsReschedule) {
mEngine.jobFinished(params, wantsReschedule);
@@ -217,7 +218,7 @@ public abstract class JobService extends Service {
* {@link android.app.job.JobInfo.Builder#setRequiredNetworkType(int)}, yet while your
* job was executing the user toggled WiFi. Another example is if you had specified
* {@link android.app.job.JobInfo.Builder#setRequiresDeviceIdle(boolean)}, and the phone left
- * its idle maintenance window. There are many other reasons a job can be stopped early besides
+ * its idle state. There are many other reasons a job can be stopped early besides
* constraints no longer being satisfied. {@link JobParameters#getStopReason()} will return the
* reason this method was called. You are solely responsible for the behavior of your
* application upon receipt of this message; your app will likely start to misbehave if you
@@ -241,7 +242,8 @@ public abstract class JobService extends Service {
* included.
* @return {@code true} to indicate to the JobManager whether you'd like to reschedule
* this job based on the retry criteria provided at job creation-time; or {@code false}
- * to end the job entirely. Regardless of the value returned, your job must stop executing.
+ * to end the job entirely (or, for a periodic job, to reschedule it according to its
+ * requested periodic criteria). Regardless of the value returned, your job must stop executing.
*/
public abstract boolean onStopJob(JobParameters params);
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java
index 17dde9098926..8585740908e2 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java
@@ -2124,9 +2124,9 @@ public final class JobStatus {
sb.append(" READY");
} else {
sb.append(" satisfied:0x").append(Integer.toHexString(satisfiedConstraints));
+ final int requiredConstraints = mRequiredConstraintsOfInterest | IMPLICIT_CONSTRAINTS;
sb.append(" unsatisfied:0x").append(Integer.toHexString(
- (satisfiedConstraints & (mRequiredConstraintsOfInterest | IMPLICIT_CONSTRAINTS))
- ^ mRequiredConstraintsOfInterest));
+ (satisfiedConstraints & requiredConstraints) ^ requiredConstraints));
}
sb.append("}");
return sb.toString();
diff --git a/core/api/current.txt b/core/api/current.txt
index c7063db2a184..4332d21b297c 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -54328,7 +54328,6 @@ package android.view.accessibility {
method public android.view.accessibility.AccessibilityWindowInfo getWindow();
method public int getWindowId();
method public boolean hasRequestInitialAccessibilityFocus();
- method public boolean hasRequestTouchPassthrough();
method public boolean isAccessibilityDataSensitive();
method public boolean isAccessibilityFocused();
method public boolean isCheckable();
@@ -54412,7 +54411,6 @@ package android.view.accessibility {
method public void setQueryFromAppProcessEnabled(@NonNull android.view.View, boolean);
method public void setRangeInfo(android.view.accessibility.AccessibilityNodeInfo.RangeInfo);
method public void setRequestInitialAccessibilityFocus(boolean);
- method public void setRequestTouchPassthrough(boolean);
method public void setScreenReaderFocusable(boolean);
method public void setScrollable(boolean);
method public void setSelected(boolean);
diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index 403acad6bba1..97d45623d3da 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -108,6 +108,15 @@ interface IActivityManager {
int getUidProcessState(int uid, in String callingPackage);
@UnsupportedAppUsage
int checkPermission(in String permission, int pid, int uid);
+
+ /** Logs start of an API call to associate with an FGS, used for FGS Type Metrics */
+ void logFgsApiBegin(int apiType, int appUid, int appPid);
+
+ /** Logs stop of an API call to associate with an FGS, used for FGS Type Metrics */
+ void logFgsApiEnd(int apiType, int appUid, int appPid);
+
+ /** Logs API state change to associate with an FGS, used for FGS Type Metrics */
+ void logFgsApiStateChanged(int apiType, int state, int appUid, int appPid);
// =============== End of transactions used on native side as well ============================
// Special low-level communication with activity manager.
@@ -870,16 +879,6 @@ interface IActivityManager {
/** Returns if the service is a short-service is still "alive" and past the timeout. */
boolean shouldServiceTimeOut(in ComponentName className, in IBinder token);
- /** Logs start of an API call to associate with an FGS, used for FGS Type Metrics */
- void logFgsApiBegin(int apiType, int appUid, int appPid);
-
- /** Logs stop of an API call to associate with an FGS, used for FGS Type Metrics */
- void logFgsApiEnd(int apiType, int appUid, int appPid);
-
- /** Logs API state change to associate with an FGS, used for FGS Type Metrics */
- void logFgsApiStateChanged(int apiType, int state, int appUid, int appPid);
-
- @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS)")
void registerUidFrozenStateChangedCallback(in IUidFrozenStateChangedCallback callback);
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS)")
void unregisterUidFrozenStateChangedCallback(in IUidFrozenStateChangedCallback callback);
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index 4dc7253c27dc..c131ce574d2c 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -28,6 +28,7 @@ import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.hardware.input.InputManager;
+import android.hardware.input.InputManagerGlobal;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@@ -1130,7 +1131,7 @@ public class Instrumentation {
newEvent.setFlags(event.getFlags() | KeyEvent.FLAG_FROM_SYSTEM);
setDisplayIfNeeded(newEvent);
- InputManager.getInstance().injectInputEvent(newEvent,
+ InputManagerGlobal.getInstance().injectInputEvent(newEvent,
InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
}
@@ -1229,7 +1230,7 @@ public class Instrumentation {
}
// Direct the injected event into windows owned by the instrumentation target.
- InputManager.getInstance().injectInputEvent(
+ InputManagerGlobal.getInstance().injectInputEvent(
event, InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH, Process.myUid());
if (syncAfter) {
@@ -1259,7 +1260,7 @@ public class Instrumentation {
if (!event.isFromSource(InputDevice.SOURCE_CLASS_TRACKBALL)) {
event.setSource(InputDevice.SOURCE_TRACKBALL);
}
- InputManager.getInstance().injectInputEvent(event,
+ InputManagerGlobal.getInstance().injectInputEvent(event,
InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
}
diff --git a/core/java/android/content/pm/InstallSourceInfo.java b/core/java/android/content/pm/InstallSourceInfo.java
index 67123e87a265..006d7cdcb2b6 100644
--- a/core/java/android/content/pm/InstallSourceInfo.java
+++ b/core/java/android/content/pm/InstallSourceInfo.java
@@ -95,8 +95,8 @@ public final class InstallSourceInfo implements Parcelable {
* remains unchanged. It continues to identify the actual package that performed the install
* or update.
* <p>
- * Null may be returned if the app was not installed by a package (e.g. a system app or an app
- * installed via adb) or if the initiating package has itself been uninstalled.
+ * Null may be returned if the app was not installed by a package (e.g. a system app) or if the
+ * initiating package has itself been uninstalled.
*/
@Nullable
public String getInitiatingPackageName() {
diff --git a/core/java/android/credentials/ui/RequestInfo.java b/core/java/android/credentials/ui/RequestInfo.java
index 49ae9e97b840..09d2db89a043 100644
--- a/core/java/android/credentials/ui/RequestInfo.java
+++ b/core/java/android/credentials/ui/RequestInfo.java
@@ -74,13 +74,30 @@ public final class RequestInfo implements Parcelable {
@NonNull
private final String mAppPackageName;
+ private final boolean mHasPermissionToOverrideDefault;
+
/** Creates new {@code RequestInfo} for a create-credential flow. */
@NonNull
public static RequestInfo newCreateRequestInfo(
@NonNull IBinder token, @NonNull CreateCredentialRequest createCredentialRequest,
@NonNull String appPackageName) {
return new RequestInfo(
- token, TYPE_CREATE, appPackageName, createCredentialRequest, null);
+ token, TYPE_CREATE, appPackageName, createCredentialRequest, null,
+ /*hasPermissionToOverrideDefault=*/ false);
+ }
+
+ /**
+ * Creates new {@code RequestInfo} for a create-credential flow.
+ *
+ * @hide
+ */
+ @NonNull
+ public static RequestInfo newCreateRequestInfo(
+ @NonNull IBinder token, @NonNull CreateCredentialRequest createCredentialRequest,
+ @NonNull String appPackageName, boolean hasPermissionToOverrideDefault) {
+ return new RequestInfo(
+ token, TYPE_CREATE, appPackageName, createCredentialRequest, null,
+ hasPermissionToOverrideDefault);
}
/** Creates new {@code RequestInfo} for a get-credential flow. */
@@ -89,7 +106,18 @@ public final class RequestInfo implements Parcelable {
@NonNull IBinder token, @NonNull GetCredentialRequest getCredentialRequest,
@NonNull String appPackageName) {
return new RequestInfo(
- token, TYPE_GET, appPackageName, null, getCredentialRequest);
+ token, TYPE_GET, appPackageName, null, getCredentialRequest,
+ /*hasPermissionToOverrideDefault=*/ false);
+ }
+
+
+ /**
+ * Returns whether the calling package has the permission
+ *
+ * @hide
+ */
+ public boolean hasPermissionToOverrideDefault() {
+ return mHasPermissionToOverrideDefault;
}
/** Returns the request token matching the user request. */
@@ -132,12 +160,14 @@ public final class RequestInfo implements Parcelable {
private RequestInfo(@NonNull IBinder token, @NonNull @RequestType String type,
@NonNull String appPackageName,
@Nullable CreateCredentialRequest createCredentialRequest,
- @Nullable GetCredentialRequest getCredentialRequest) {
+ @Nullable GetCredentialRequest getCredentialRequest,
+ boolean hasPermissionToOverrideDefault) {
mToken = token;
mType = type;
mAppPackageName = appPackageName;
mCreateCredentialRequest = createCredentialRequest;
mGetCredentialRequest = getCredentialRequest;
+ mHasPermissionToOverrideDefault = hasPermissionToOverrideDefault;
}
private RequestInfo(@NonNull Parcel in) {
@@ -157,6 +187,7 @@ public final class RequestInfo implements Parcelable {
AnnotationValidations.validate(NonNull.class, null, mAppPackageName);
mCreateCredentialRequest = createCredentialRequest;
mGetCredentialRequest = getCredentialRequest;
+ mHasPermissionToOverrideDefault = in.readBoolean();
}
@Override
@@ -166,6 +197,7 @@ public final class RequestInfo implements Parcelable {
dest.writeString8(mAppPackageName);
dest.writeTypedObject(mCreateCredentialRequest, flags);
dest.writeTypedObject(mGetCredentialRequest, flags);
+ dest.writeBoolean(mHasPermissionToOverrideDefault);
}
@Override
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index 5dc3825215c0..8a4a0e40d54a 100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
@@ -34,12 +34,10 @@ import android.content.Context;
import android.hardware.BatteryState;
import android.hardware.SensorManager;
import android.hardware.lights.LightsManager;
-import android.os.Binder;
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.os.InputEventInjectionSync;
-import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.Vibrator;
@@ -392,12 +390,7 @@ public final class InputManager {
* @hide
*/
public boolean isInputDeviceEnabled(int id) {
- try {
- return mIm.isInputDeviceEnabled(id);
- } catch (RemoteException ex) {
- Log.w(TAG, "Could not check enabled status of input device with id = " + id);
- throw ex.rethrowFromSystemServer();
- }
+ return mGlobal.isInputDeviceEnabled(id);
}
/**
@@ -411,12 +404,7 @@ public final class InputManager {
* @hide
*/
public void enableInputDevice(int id) {
- try {
- mIm.enableInputDevice(id);
- } catch (RemoteException ex) {
- Log.w(TAG, "Could not enable input device with id = " + id);
- throw ex.rethrowFromSystemServer();
- }
+ mGlobal.enableInputDevice(id);
}
/**
@@ -430,12 +418,7 @@ public final class InputManager {
* @hide
*/
public void disableInputDevice(int id) {
- try {
- mIm.disableInputDevice(id);
- } catch (RemoteException ex) {
- Log.w(TAG, "Could not disable input device with id = " + id);
- throw ex.rethrowFromSystemServer();
- }
+ mGlobal.disableInputDevice(id);
}
/**
@@ -1007,13 +990,7 @@ public final class InputManager {
* @hide
*/
public boolean[] deviceHasKeys(int id, int[] keyCodes) {
- boolean[] ret = new boolean[keyCodes.length];
- try {
- mIm.hasKeys(id, InputDevice.SOURCE_ANY, keyCodes, ret);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- return ret;
+ return mGlobal.deviceHasKeys(id, keyCodes);
}
/**
@@ -1038,11 +1015,7 @@ public final class InputManager {
* @hide
*/
public int getKeyCodeForKeyLocation(int deviceId, int locationKeyCode) {
- try {
- return mIm.getKeyCodeForKeyLocation(deviceId, locationKeyCode);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
+ return mGlobal.getKeyCodeForKeyLocation(deviceId, locationKeyCode);
}
/**
@@ -1075,20 +1048,7 @@ public final class InputManager {
*/
@RequiresPermission(Manifest.permission.INJECT_EVENTS)
public boolean injectInputEvent(InputEvent event, int mode, int targetUid) {
- if (event == null) {
- throw new IllegalArgumentException("event must not be null");
- }
- if (mode != InputEventInjectionSync.NONE
- && mode != InputEventInjectionSync.WAIT_FOR_FINISHED
- && mode != InputEventInjectionSync.WAIT_FOR_RESULT) {
- throw new IllegalArgumentException("mode is invalid");
- }
-
- try {
- return mIm.injectInputEventToTarget(event, mode, targetUid);
- } catch (RemoteException ex) {
- throw ex.rethrowFromSystemServer();
- }
+ return mGlobal.injectInputEvent(event, mode, targetUid);
}
/**
@@ -1114,7 +1074,7 @@ public final class InputManager {
@RequiresPermission(Manifest.permission.INJECT_EVENTS)
@UnsupportedAppUsage
public boolean injectInputEvent(InputEvent event, int mode) {
- return injectInputEvent(event, mode, Process.INVALID_UID);
+ return mGlobal.injectInputEvent(event, mode);
}
/**
@@ -1149,20 +1109,12 @@ public final class InputManager {
*/
@UnsupportedAppUsage
public void setPointerIconType(int iconId) {
- try {
- mIm.setPointerIconType(iconId);
- } catch (RemoteException ex) {
- throw ex.rethrowFromSystemServer();
- }
+ mGlobal.setPointerIconType(iconId);
}
/** @hide */
public void setCustomPointerIcon(PointerIcon icon) {
- try {
- mIm.setCustomPointerIcon(icon);
- } catch (RemoteException ex) {
- throw ex.rethrowFromSystemServer();
- }
+ mGlobal.setCustomPointerIcon(icon);
}
/**
@@ -1191,11 +1143,7 @@ public final class InputManager {
* @hide
*/
public void requestPointerCapture(IBinder windowToken, boolean enable) {
- try {
- mIm.requestPointerCapture(windowToken, enable);
- } catch (RemoteException ex) {
- throw ex.rethrowFromSystemServer();
- }
+ mGlobal.requestPointerCapture(windowToken, enable);
}
/**
@@ -1204,11 +1152,7 @@ public final class InputManager {
* @hide
*/
public InputMonitor monitorGestureInput(String name, int displayId) {
- try {
- return mIm.monitorGestureInput(new Binder(), name, displayId);
- } catch (RemoteException ex) {
- throw ex.rethrowFromSystemServer();
- }
+ return mGlobal.monitorGestureInput(name, displayId);
}
/**
@@ -1313,12 +1257,9 @@ public final class InputManager {
* @hide
*/
@TestApi
- public void addUniqueIdAssociation(@NonNull String inputPort, @NonNull String displayUniqueId) {
- try {
- mIm.addUniqueIdAssociation(inputPort, displayUniqueId);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
+ public void addUniqueIdAssociation(@NonNull String inputPort,
+ @NonNull String displayUniqueId) {
+ mGlobal.addUniqueIdAssociation(inputPort, displayUniqueId);
}
/**
@@ -1331,11 +1272,7 @@ public final class InputManager {
*/
@TestApi
public void removeUniqueIdAssociation(@NonNull String inputPort) {
- try {
- mIm.removeUniqueIdAssociation(inputPort);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
+ mGlobal.removeUniqueIdAssociation(inputPort);
}
/**
@@ -1361,11 +1298,7 @@ public final class InputManager {
@RequiresPermission(Manifest.permission.BLUETOOTH)
@Nullable
public String getInputDeviceBluetoothAddress(int deviceId) {
- try {
- return mIm.getInputDeviceBluetoothAddress(deviceId);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
+ return mGlobal.getInputDeviceBluetoothAddress(deviceId);
}
/**
@@ -1423,11 +1356,7 @@ public final class InputManager {
* @hide
*/
public void cancelCurrentTouch() {
- try {
- mIm.cancelCurrentTouch();
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
+ mGlobal.cancelCurrentTouch();
}
/**
@@ -1451,11 +1380,7 @@ public final class InputManager {
*/
@RequiresPermission(Manifest.permission.MONITOR_INPUT)
public void pilferPointers(IBinder inputChannelToken) {
- try {
- mIm.pilferPointers(inputChannelToken);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
+ mGlobal.pilferPointers(inputChannelToken);
}
/**
diff --git a/core/java/android/hardware/input/InputManagerGlobal.java b/core/java/android/hardware/input/InputManagerGlobal.java
index 08d81bd3c325..6e7e90e103e8 100644
--- a/core/java/android/hardware/input/InputManagerGlobal.java
+++ b/core/java/android/hardware/input/InputManagerGlobal.java
@@ -30,19 +30,27 @@ import android.hardware.input.InputManager.OnTabletModeChangedListener;
import android.hardware.lights.Light;
import android.hardware.lights.LightState;
import android.hardware.lights.LightsRequest;
+import android.os.Binder;
import android.os.CombinedVibration;
import android.os.Handler;
import android.os.IBinder;
import android.os.IVibratorStateListener;
+import android.os.InputEventInjectionSync;
import android.os.Looper;
import android.os.Message;
+import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.os.VibratorManager;
import android.util.Log;
import android.util.SparseArray;
import android.view.Display;
import android.view.InputDevice;
+import android.view.InputEvent;
+import android.view.InputMonitor;
+import android.view.PointerIcon;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.os.SomeArgs;
@@ -359,6 +367,42 @@ public final class InputManagerGlobal {
}
/**
+ * @see InputManager#isInputDeviceEnabled(int)
+ */
+ public boolean isInputDeviceEnabled(int id) {
+ try {
+ return mIm.isInputDeviceEnabled(id);
+ } catch (RemoteException ex) {
+ Log.w(TAG, "Could not check enabled status of input device with id = " + id);
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see InputManager#enableInputDevice(int)
+ */
+ public void enableInputDevice(int id) {
+ try {
+ mIm.enableInputDevice(id);
+ } catch (RemoteException ex) {
+ Log.w(TAG, "Could not enable input device with id = " + id);
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see InputManager#disableInputDevice(int)
+ */
+ public void disableInputDevice(int id) {
+ try {
+ mIm.disableInputDevice(id);
+ } catch (RemoteException ex) {
+ Log.w(TAG, "Could not disable input device with id = " + id);
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* @see InputManager#getInputDeviceByDescriptor
*/
InputDevice getInputDeviceByDescriptor(String descriptor) {
@@ -672,7 +716,7 @@ public final class InputManagerGlobal {
* @see InputManager#getInputDeviceBatteryState(int, boolean)
*/
@NonNull
- BatteryState getInputDeviceBatteryState(int deviceId, boolean hasBattery) {
+ public BatteryState getInputDeviceBatteryState(int deviceId, boolean hasBattery) {
if (!hasBattery) {
return new LocalBatteryState();
}
@@ -835,7 +879,7 @@ public final class InputManagerGlobal {
* @see InputManager#getInputDeviceSensorManager(int)
*/
@NonNull
- SensorManager getInputDeviceSensorManager(int deviceId) {
+ public SensorManager getInputDeviceSensorManager(int deviceId) {
if (mInputDeviceSensorManager == null) {
mInputDeviceSensorManager = new InputDeviceSensorManager(this);
}
@@ -980,6 +1024,21 @@ public final class InputManagerGlobal {
}
}
+ /**
+ * @see InputManager#getInputDeviceVibrator(int, int)
+ */
+ public Vibrator getInputDeviceVibrator(int deviceId, int vibratorId) {
+ return new InputDeviceVibrator(deviceId, vibratorId);
+ }
+
+ /**
+ * @see InputManager#getInputDeviceVibratorManager(int)
+ */
+ @NonNull
+ public VibratorManager getInputDeviceVibratorManager(int deviceId) {
+ return new InputDeviceVibratorManager(deviceId);
+ }
+
/*
* Get the list of device vibrators
* @return The list of vibrators IDs
@@ -1057,4 +1116,158 @@ public final class InputManagerGlobal {
throw ex.rethrowFromSystemServer();
}
}
+
+ /**
+ * @see InputManager#deviceHasKeys(int, int[])
+ */
+ public boolean[] deviceHasKeys(int id, int[] keyCodes) {
+ boolean[] ret = new boolean[keyCodes.length];
+ try {
+ mIm.hasKeys(id, InputDevice.SOURCE_ANY, keyCodes, ret);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ return ret;
+ }
+
+ /**
+ * @see InputManager#getKeyCodeforKeyLocation(int, int)
+ */
+ public int getKeyCodeForKeyLocation(int deviceId, int locationKeyCode) {
+ try {
+ return mIm.getKeyCodeForKeyLocation(deviceId, locationKeyCode);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see InputManager#injectInputEvent(InputEvent, int, int)
+ */
+
+ public boolean injectInputEvent(InputEvent event, int mode, int targetUid) {
+ if (event == null) {
+ throw new IllegalArgumentException("event must not be null");
+ }
+ if (mode != InputEventInjectionSync.NONE
+ && mode != InputEventInjectionSync.WAIT_FOR_FINISHED
+ && mode != InputEventInjectionSync.WAIT_FOR_RESULT) {
+ throw new IllegalArgumentException("mode is invalid");
+ }
+
+ try {
+ return mIm.injectInputEventToTarget(event, mode, targetUid);
+ } catch (RemoteException ex) {
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see InputManager#injectInputEvent(InputEvent, int)
+ */
+ public boolean injectInputEvent(InputEvent event, int mode) {
+ return injectInputEvent(event, mode, Process.INVALID_UID);
+ }
+
+ /**
+ * @see InputManager#setPointerIconType(int)
+ */
+ public void setPointerIconType(int iconId) {
+ try {
+ mIm.setPointerIconType(iconId);
+ } catch (RemoteException ex) {
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see InputManager#setCustomPointerIcon(PointerIcon)
+ */
+ public void setCustomPointerIcon(PointerIcon icon) {
+ try {
+ mIm.setCustomPointerIcon(icon);
+ } catch (RemoteException ex) {
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see InputManager#requestPointerCapture(IBinder, boolean)
+ */
+ void requestPointerCapture(IBinder windowToken, boolean enable) {
+ try {
+ mIm.requestPointerCapture(windowToken, enable);
+ } catch (RemoteException ex) {
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see Inputmanager#monitorGestureInput(String, int)
+ */
+ InputMonitor monitorGestureInput(String name, int displayId) {
+ try {
+ return mIm.monitorGestureInput(new Binder(), name, displayId);
+ } catch (RemoteException ex) {
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see InputManager#addUniqueIdAssociation(String, String)
+ */
+ void addUniqueIdAssociation(@NonNull String inputPort, @NonNull String displayUniqueId) {
+ try {
+ mIm.addUniqueIdAssociation(inputPort, displayUniqueId);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see InputManager#removeUniqueIdAssociation(String)
+ */
+ public void removeUniqueIdAssociation(@NonNull String inputPort) {
+ try {
+ mIm.removeUniqueIdAssociation(inputPort);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see InputManager#getInputDeviceBluetoothAddress(int)
+ */
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @Nullable
+ public String getInputDeviceBluetoothAddress(int deviceId) {
+ try {
+ return mIm.getInputDeviceBluetoothAddress(deviceId);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see InputManager#cancelCurrentTouch()
+ */
+ void cancelCurrentTouch() {
+ try {
+ mIm.cancelCurrentTouch();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see InputManager#pilferPointers(IBinder)
+ */
+ @RequiresPermission(Manifest.permission.MONITOR_INPUT)
+ void pilferPointers(IBinder inputChannelToken) {
+ try {
+ mIm.pilferPointers(inputChannelToken);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
}
diff --git a/core/java/android/os/RemoteException.java b/core/java/android/os/RemoteException.java
index 878e1413a8c9..970f4192c36c 100644
--- a/core/java/android/os/RemoteException.java
+++ b/core/java/android/os/RemoteException.java
@@ -21,6 +21,12 @@ import android.util.AndroidException;
/**
* Parent exception for all Binder remote-invocation errors
+ *
+ * Note: not all exceptions from binder services will be subclasses of this.
+ * For instance, RuntimeException and several subclasses of it may be
+ * thrown as well as OutOfMemoryException.
+ *
+ * One common subclass is {@link DeadObjectException}.
*/
public class RemoteException extends AndroidException {
public RemoteException() {
diff --git a/core/java/android/service/credentials/CredentialProviderInfoFactory.java b/core/java/android/service/credentials/CredentialProviderInfoFactory.java
index 8069414c3e6e..47b75d135813 100644
--- a/core/java/android/service/credentials/CredentialProviderInfoFactory.java
+++ b/core/java/android/service/credentials/CredentialProviderInfoFactory.java
@@ -163,28 +163,12 @@ public final class CredentialProviderInfoFactory {
private static boolean isSystemProviderWithValidPermission(
ServiceInfo serviceInfo, Context context) {
- requireNonNull(context, "context must not be null");
-
- final String permission = Manifest.permission.PROVIDE_DEFAULT_ENABLED_CREDENTIAL_SERVICE;
- try {
- ApplicationInfo appInfo =
- context.getPackageManager()
- .getApplicationInfo(
- serviceInfo.packageName,
- PackageManager.ApplicationInfoFlags.of(
- PackageManager.MATCH_SYSTEM_ONLY));
- if (appInfo != null
- && context.checkPermission(permission, /* pid= */ -1, appInfo.uid)
- == PackageManager.PERMISSION_GRANTED) {
- Slog.i(TAG, "SYS permission granted for: " + serviceInfo.packageName);
- return true;
- } else {
- Slog.i(TAG, "SYS permission failed for: " + serviceInfo.packageName);
- }
- } catch (PackageManager.NameNotFoundException e) {
- Slog.e(TAG, "Error getting info for " + serviceInfo + ": " + e);
+ if (context == null) {
+ Slog.w(TAG, "Context is null in isSystemProviderWithValidPermission");
+ return false;
}
- return false;
+ return PermissionUtils.hasPermission(context, serviceInfo.packageName,
+ Manifest.permission.PROVIDE_DEFAULT_ENABLED_CREDENTIAL_SERVICE);
}
private static boolean isValidSystemProvider(
diff --git a/core/java/android/service/credentials/PermissionUtils.java b/core/java/android/service/credentials/PermissionUtils.java
new file mode 100644
index 000000000000..c8bb202c35f7
--- /dev/null
+++ b/core/java/android/service/credentials/PermissionUtils.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2023 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.service.credentials;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+
+/**
+ * Utils for checking permissions, or any other permission related function
+ *
+ * @hide
+ */
+public class PermissionUtils {
+ //TODO(274838409): Move all CredentialManagerService permission checks here
+
+ /** Checks whether the given package name hold the given permission **/
+ public static boolean hasPermission(Context context, String packageName, String permission) {
+ try {
+ ApplicationInfo appInfo =
+ context.getPackageManager()
+ .getApplicationInfo(
+ packageName,
+ PackageManager.ApplicationInfoFlags.of(
+ PackageManager.MATCH_SYSTEM_ONLY));
+ if (appInfo != null
+ && context.checkPermission(permission, /* pid= */ -1, appInfo.uid)
+ == PackageManager.PERMISSION_GRANTED) {
+ return true;
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ }
+ return false;
+ }
+}
+
diff --git a/core/java/android/util/SafetyProtectionUtils.java b/core/java/android/util/SafetyProtectionUtils.java
index af985c573063..75eaa9ed84af 100644
--- a/core/java/android/util/SafetyProtectionUtils.java
+++ b/core/java/android/util/SafetyProtectionUtils.java
@@ -40,14 +40,20 @@ public class SafetyProtectionUtils {
* @hide
*/
public static boolean shouldShowSafetyProtectionResources(Context context) {
- return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
- SAFETY_PROTECTION_RESOURCES_ENABLED, false)
- && context.getResources().getBoolean(
- Resources.getSystem()
- .getIdentifier("config_safetyProtectionEnabled",
- "bool", "android"))
- && context.getDrawable(android.R.drawable.ic_safety_protection) != null
- && context.getString(android.R.string.safety_protection_display_text) != null
- && !context.getString(android.R.string.safety_protection_display_text).isEmpty();
+ try {
+ return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
+ SAFETY_PROTECTION_RESOURCES_ENABLED, false)
+ && context.getResources().getBoolean(
+ Resources.getSystem()
+ .getIdentifier("config_safetyProtectionEnabled",
+ "bool", "android"))
+ && context.getDrawable(android.R.drawable.ic_safety_protection) != null
+ && !context.getString(
+ android.R.string.safety_protection_display_text).isEmpty();
+ } catch (Resources.NotFoundException e) {
+ // We should expect the resources to not exist for non-pixel devices
+ // (except for the OEMs that opt-in)
+ return false;
+ }
}
}
diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java
index 61864d776cab..e81aecb23c24 100644
--- a/core/java/android/view/InputDevice.java
+++ b/core/java/android/view/InputDevice.java
@@ -776,7 +776,7 @@ public final class InputDevice implements Parcelable {
* Each gamepad or joystick is given a unique, positive controller number when initially
* configured by the system. This number may change due to events such as device disconnects /
* reconnects or user initiated reassignment. Any change in number will trigger an event that
- * can be observed by registering an {@link InputManager.InputDeviceListener}.
+ * can be observed by registering an {@link InputManagerGlobal.InputDeviceListener}.
* </p>
* <p>
* All input devices which are not gamepads or joysticks will be assigned a controller number
@@ -981,7 +981,7 @@ public final class InputDevice implements Parcelable {
* generating the keycode given by the corresponding value at the same index in the keys array.
*/
public boolean[] hasKeys(int... keys) {
- return InputManager.getInstance().deviceHasKeys(mId, keys);
+ return InputManagerGlobal.getInstance().deviceHasKeys(mId, keys);
}
/**
@@ -1028,7 +1028,8 @@ public final class InputDevice implements Parcelable {
* {@link InputDevice#SOURCE_KEYBOARD} or the requested mapping cannot be determined.
*/
public int getKeyCodeForKeyLocation(int locationKeyCode) {
- return InputManager.getInstance().getKeyCodeForKeyLocation(mId, locationKeyCode);
+ return InputManagerGlobal.getInstance()
+ .getKeyCodeForKeyLocation(mId, locationKeyCode);
}
/**
@@ -1109,9 +1110,11 @@ public final class InputDevice implements Parcelable {
@RequiresPermission(Manifest.permission.BLUETOOTH)
@Nullable
public String getBluetoothAddress() {
- // We query the address via a separate InputManager API instead of pre-populating it in
- // this class to avoid leaking it to apps that do not have sufficient permissions.
- return InputManager.getInstance().getInputDeviceBluetoothAddress(mId);
+ // We query the address via a separate InputManagerGlobal API
+ // instead of pre-populating it in this class to avoid
+ // leaking it to apps that do not have sufficient permissions.
+ return InputManagerGlobal.getInstance()
+ .getInputDeviceBluetoothAddress(mId);
}
/**
@@ -1132,7 +1135,8 @@ public final class InputDevice implements Parcelable {
synchronized (mMotionRanges) {
if (mVibrator == null) {
if (mHasVibrator) {
- mVibrator = InputManager.getInstance().getInputDeviceVibrator(mId,
+ mVibrator = InputManagerGlobal.getInstance()
+ .getInputDeviceVibrator(mId,
VIBRATOR_ID_ALL);
} else {
mVibrator = NullVibrator.getInstance();
@@ -1154,7 +1158,8 @@ public final class InputDevice implements Parcelable {
public VibratorManager getVibratorManager() {
synchronized (mMotionRanges) {
if (mVibratorManager == null) {
- mVibratorManager = InputManager.getInstance().getInputDeviceVibratorManager(mId);
+ mVibratorManager = InputManagerGlobal.getInstance()
+ .getInputDeviceVibratorManager(mId);
}
}
return mVibratorManager;
@@ -1170,7 +1175,8 @@ public final class InputDevice implements Parcelable {
*/
@NonNull
public BatteryState getBatteryState() {
- return InputManager.getInstance().getInputDeviceBatteryState(mId, mHasBattery);
+ return InputManagerGlobal.getInstance()
+ .getInputDeviceBatteryState(mId, mHasBattery);
}
/**
@@ -1206,7 +1212,8 @@ public final class InputDevice implements Parcelable {
public SensorManager getSensorManager() {
synchronized (mMotionRanges) {
if (mSensorManager == null) {
- mSensorManager = InputManager.getInstance().getInputDeviceSensorManager(mId);
+ mSensorManager = InputManagerGlobal.getInstance()
+ .getInputDeviceSensorManager(mId);
}
}
return mSensorManager;
@@ -1217,7 +1224,7 @@ public final class InputDevice implements Parcelable {
* @return Whether the input device is enabled.
*/
public boolean isEnabled() {
- return InputManager.getInstance().isInputDeviceEnabled(mId);
+ return InputManagerGlobal.getInstance().isInputDeviceEnabled(mId);
}
/**
@@ -1228,7 +1235,7 @@ public final class InputDevice implements Parcelable {
@RequiresPermission(android.Manifest.permission.DISABLE_INPUT_DEVICE)
@TestApi
public void enable() {
- InputManager.getInstance().enableInputDevice(mId);
+ InputManagerGlobal.getInstance().enableInputDevice(mId);
}
/**
@@ -1239,7 +1246,7 @@ public final class InputDevice implements Parcelable {
@RequiresPermission(android.Manifest.permission.DISABLE_INPUT_DEVICE)
@TestApi
public void disable() {
- InputManager.getInstance().disableInputDevice(mId);
+ InputManagerGlobal.getInstance().disableInputDevice(mId);
}
/**
@@ -1274,7 +1281,7 @@ public final class InputDevice implements Parcelable {
* @hide
*/
public void setPointerType(int pointerType) {
- InputManager.getInstance().setPointerIconType(pointerType);
+ InputManagerGlobal.getInstance().setPointerIconType(pointerType);
}
/**
@@ -1283,7 +1290,7 @@ public final class InputDevice implements Parcelable {
* @hide
*/
public void setCustomPointerIcon(PointerIcon icon) {
- InputManager.getInstance().setCustomPointerIcon(icon);
+ InputManagerGlobal.getInstance().setCustomPointerIcon(icon);
}
/**
@@ -1301,7 +1308,7 @@ public final class InputDevice implements Parcelable {
*
* @return the supported USI version, or null if the device does not support USI
* @see <a href="https://universalstylus.org">Universal Stylus Initiative</a>
- * @see InputManager#getHostUsiVersion(int)
+ * @see InputManagerGlobal#getHostUsiVersion(int)
* @hide
*/
@Nullable
diff --git a/core/java/android/view/OWNERS b/core/java/android/view/OWNERS
index 66fd794e64fc..42ac74ce7353 100644
--- a/core/java/android/view/OWNERS
+++ b/core/java/android/view/OWNERS
@@ -64,6 +64,9 @@ per-file SurfaceView.java = file:/services/core/java/com/android/server/wm/OWNER
per-file SurfaceHolder.java = file:/graphics/java/android/graphics/OWNERS
per-file SurfaceHolder.java = file:/services/core/java/com/android/server/wm/OWNERS
+# Text
+per-file HandwritingInitiator.java = file:/core/java/android/text/OWNERS
+
# View
per-file View.java = file:/services/accessibility/OWNERS
per-file View.java = file:/core/java/android/service/autofill/OWNERS
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index b17d2b947c66..ddd7734fd1dd 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -832,9 +832,7 @@ public class AccessibilityNodeInfo implements Parcelable {
private static final int BOOLEAN_PROPERTY_REQUEST_INITIAL_ACCESSIBILITY_FOCUS = 1 << 24;
- private static final int BOOLEAN_PROPERTY_REQUEST_TOUCH_PASSTHROUGH = 1 << 25;
-
- private static final int BOOLEAN_PROPERTY_ACCESSIBILITY_DATA_SENSITIVE = 1 << 26;
+ private static final int BOOLEAN_PROPERTY_ACCESSIBILITY_DATA_SENSITIVE = 1 << 25;
/**
* Bits that provide the id of a virtual descendant of a view.
@@ -2599,53 +2597,6 @@ public class AccessibilityNodeInfo implements Parcelable {
}
/**
- * Gets whether this node is one of the candidates that wants touch interaction within its
- * screen bounds to bypass the touch exploration and go straight to the underlying view
- * hierarchy.
- *
- * <p>
- * {@link android.accessibilityservice.AccessibilityService} could aggregate the {@link
- * #getBoundsInScreen()} that has request touch passthrough, and/or doing complex calculation
- * with other views that doesn't request touch passthrough, and call {@link
- * AccessibilityService#setTouchExplorationPassthroughRegion(int, Region)} to bypass the touch
- * interactions to the underlying views within the region.
- * </p>
- *
- * @return True if the node wants touch interaction within its screen bounds to bypass touch
- * exploration and go straight to the underlying view hierarchy; false otherwise.
- */
- public boolean hasRequestTouchPassthrough() {
- return getBooleanProperty(BOOLEAN_PROPERTY_REQUEST_TOUCH_PASSTHROUGH);
- }
-
- /**
- * Sets whether this node wants touch interaction within its screen bounds to bypass touch
- * exploration and go straight to the underlying view hierarchy.
- * <p>
- * <strong>Note:</strong> This property allows the
- * {@link android.accessibilityservice.AccessibilityService} to calculate the
- * aggregated touch passthrough region. App developers need to ensure that the
- * {@link #getBoundsInScreen()} of
- * the node align with the region they want touchable, and that child nodes overlapping these
- * bounds may cause that region to be reduced.
- * </p>
- *
- * <p>
- * <strong>Note:</strong> Cannot be called from an
- * {@link android.accessibilityservice.AccessibilityService}.
- * This class is made immutable before being delivered to an AccessibilityService.
- * </p>
- *
- * @param touchPassthrough True if the node wants touch interaction within its screen bounds
- * to bypass touch exploration and go straight to the underlying view
- * hierarchy.
- * @throws IllegalStateException If called from an AccessibilityService.
- */
- public void setRequestTouchPassthrough(boolean touchPassthrough) {
- setBooleanProperty(BOOLEAN_PROPERTY_REQUEST_TOUCH_PASSTHROUGH, touchPassthrough);
- }
-
- /**
* Gets if the node's accessibility data is considered sensitive.
*
* @return True if the node's data is considered sensitive, false otherwise.
diff --git a/core/res/res/values/config_telephony.xml b/core/res/res/values/config_telephony.xml
index c0f2157646eb..fab760948787 100644
--- a/core/res/res/values/config_telephony.xml
+++ b/core/res/res/values/config_telephony.xml
@@ -62,6 +62,11 @@
<integer name="auto_data_switch_validation_max_retry">7</integer>
<java-symbol type="integer" name="auto_data_switch_validation_max_retry" />
+ <!-- Boolean indicating whether ping test is required to pass on the target data SIM before the
+ device automatically switch to it. -->
+ <bool name="auto_data_switch_ping_test_before_switch">true</bool>
+ <java-symbol type="bool" name="auto_data_switch_ping_test_before_switch" />
+
<!-- Boolean indicating whether the Iwlan data service supports persistence of iwlan ipsec
tunnels across service restart. If iwlan tunnels are not persisted across restart,
Framework will clean up dangling data connections when service restarts -->
diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java
index 3d4918b1bd42..6d635af20645 100644
--- a/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java
+++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java
@@ -58,7 +58,7 @@ public class AccessibilityNodeInfoTest {
// The number of flags held in boolean properties. Their values should also be double-checked
// in the methods above.
- private static final int NUM_BOOLEAN_PROPERTIES = 27;
+ private static final int NUM_BOOLEAN_PROPERTIES = 26;
@Test
public void testStandardActions_serializationFlagIsValid() {
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index 6328b02cf56a..2c85fe4e9206 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -160,6 +160,7 @@
<assign-permission name="android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER" uid="media" />
<assign-permission name="android.permission.REGISTER_STATS_PULL_ATOM" uid="media" />
<assign-permission name="android.permission.INTERACT_ACROSS_USERS" uid="media" />
+ <assign-permission name="android.permission.LOG_FOREGROUND_RESOURCE_USE" uid="media" />
<assign-permission name="android.permission.INTERNET" uid="media" />
@@ -173,6 +174,7 @@
<assign-permission name="android.permission.PACKAGE_USAGE_STATS" uid="audioserver" />
<assign-permission name="android.permission.INTERACT_ACROSS_USERS_FULL" uid="audioserver" />
<assign-permission name="android.permission.OBSERVE_SENSOR_PRIVACY" uid="audioserver" />
+ <assign-permission name="android.permission.LOG_FOREGROUND_RESOURCE_USE" uid="audioserver" />
<assign-permission name="android.permission.MODIFY_AUDIO_SETTINGS" uid="cameraserver" />
<assign-permission name="android.permission.INTERACT_ACROSS_USERS_FULL" uid="cameraserver" />
@@ -186,6 +188,7 @@
<assign-permission name="android.permission.MANAGE_APP_OPS_MODES" uid="cameraserver" />
<assign-permission name="android.permission.OBSERVE_SENSOR_PRIVACY" uid="cameraserver" />
<assign-permission name="android.permission.REAL_GET_TASKS" uid="cameraserver" />
+ <assign-permission name="android.permission.LOG_FOREGROUND_RESOURCE_USE" uid="cameraserver" />
<assign-permission name="android.permission.ACCESS_SURFACE_FLINGER" uid="graphics" />
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java
index dcc12ac07589..7fc8310ed303 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java
@@ -214,7 +214,8 @@ class TaskFragmentAnimationRunner extends IRemoteAnimationRunner.Stub {
openingWholeScreenBounds.union(target.screenSpaceBounds);
} else {
closingTargets.add(target);
- closingWholeScreenBounds.union(target.screenSpaceBounds);
+ // Union the start bounds since this may be the ClosingChanging animation.
+ closingWholeScreenBounds.union(target.startBounds);
}
}
diff --git a/libs/WindowManager/Shell/res/color-night/taskbar_background.xml b/libs/WindowManager/Shell/res/color-night/taskbar_background.xml
index 9473cdd607d6..01df006f1bd2 100644
--- a/libs/WindowManager/Shell/res/color-night/taskbar_background.xml
+++ b/libs/WindowManager/Shell/res/color-night/taskbar_background.xml
@@ -16,5 +16,5 @@
-->
<!-- Should be the same as in packages/apps/Launcher3/res/color-night-v31/taskbar_background.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="@android:color/system_neutral1_500" android:lStar="15" />
+ <item android:color="@android:color/system_neutral1_500" android:lStar="20" />
</selector> \ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/color/taskbar_background.xml b/libs/WindowManager/Shell/res/color/taskbar_background.xml
index 0e165fca4fd3..876ee02a8adf 100644
--- a/libs/WindowManager/Shell/res/color/taskbar_background.xml
+++ b/libs/WindowManager/Shell/res/color/taskbar_background.xml
@@ -16,5 +16,5 @@
-->
<!-- Should be the same as in packages/apps/Launcher3/res/color-v31/taskbar_background.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="@android:color/system_neutral1_500" android:lStar="95" />
+ <item android:color="@android:color/system_neutral1_500" android:lStar="98" />
</selector> \ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/values-mr/strings_tv.xml b/libs/WindowManager/Shell/res/values-mr/strings_tv.xml
index 8a8977979217..89654d0a5750 100644
--- a/libs/WindowManager/Shell/res/values-mr/strings_tv.xml
+++ b/libs/WindowManager/Shell/res/values-mr/strings_tv.xml
@@ -24,7 +24,7 @@
<string name="pip_move" msgid="158770205886688553">"हलवा"</string>
<string name="pip_expand" msgid="1051966011679297308">"विस्तार करा"</string>
<string name="pip_collapse" msgid="3903295106641385962">"कोलॅप्स करा"</string>
- <string name="pip_edu_text" msgid="7930546669915337998">"नियंत्रणांसाठी "<annotation icon="home_icon">"होम"</annotation>" दोनदा दाबा"</string>
+ <string name="pip_edu_text" msgid="7930546669915337998">"नियंत्रणांसाठी "<annotation icon="home_icon">"होम"</annotation>" दोनदा प्रेस करा"</string>
<string name="a11y_pip_menu_entered" msgid="5106343214776801614">"चित्रात-चित्र मेनू."</string>
<string name="a11y_action_pip_move_left" msgid="6612980937817141583">"डावीकडे हलवा"</string>
<string name="a11y_action_pip_move_right" msgid="1119409122645529936">"उजवीकडे हलवा"</string>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java
index 1df6ecda78c3..1e3d79567d1e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java
@@ -224,7 +224,7 @@ class ActivityEmbeddingAnimationRunner {
openingWholeScreenBounds.union(change.getEndAbsBounds());
} else {
closingChanges.add(change);
- closingWholeScreenBounds.union(change.getEndAbsBounds());
+ closingWholeScreenBounds.union(change.getStartAbsBounds());
}
}
diff --git a/libs/hwui/Properties.cpp b/libs/hwui/Properties.cpp
index 9df6822b4867..7af6efb7da41 100644
--- a/libs/hwui/Properties.cpp
+++ b/libs/hwui/Properties.cpp
@@ -104,7 +104,7 @@ bool Properties::load() {
debugOverdraw = false;
std::string debugOverdrawProperty = base::GetProperty(PROPERTY_DEBUG_OVERDRAW, "");
if (debugOverdrawProperty != "") {
- INIT_LOGD(" Overdraw debug enabled: %s", debugOverdrawProperty);
+ INIT_LOGD(" Overdraw debug enabled: %s", debugOverdrawProperty.c_str());
if (debugOverdrawProperty == "show") {
debugOverdraw = true;
overdrawColorSet = OverdrawColorSet::Default;
diff --git a/packages/CarrierDefaultApp/res/values-af/strings.xml b/packages/CarrierDefaultApp/res/values-af/strings.xml
index 64cc776abc9c..56dd89a05bba 100644
--- a/packages/CarrierDefaultApp/res/values-af/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-af/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Diensverskafferkommunikasie"</string>
<string name="android_system_label" msgid="2797790869522345065">"Selfoondiensverskaffer"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobiele data is op"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Jou mobiele data is gedeaktiveer"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Byvoorbeeld, die aanmeldbladsy behoort dalk nie aan die organisasie wat gewys word nie."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Gaan in elk geval deur blaaier voort"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Prestasiehupstoot"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G-opsies van jou diensverskaffer"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Besoek %s se webwerf om opsies vir jou appervaring te sien"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Nie nou nie"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Bestuur"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Koop ’n prestasiehupstoot."</string>
diff --git a/packages/CarrierDefaultApp/res/values-am/strings.xml b/packages/CarrierDefaultApp/res/values-am/strings.xml
index 1bbc190ecb3f..e62610583c7c 100644
--- a/packages/CarrierDefaultApp/res/values-am/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-am/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"የአገልግሎት አቅራቢ ግንኙነቶች"</string>
<string name="android_system_label" msgid="2797790869522345065">"የተንቀሳቃሽ ስልክ አገልግሎት አቅራቢ"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"የተንቀሳቃሽ ስልክ ውሂብ አልቋል"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"የእርስዎ የተንቀሳቃሽ ስልክ ውሂብ ቦዝኗል"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"ለምሳሌ፣ የመግቢያ ገጹ የሚታየው ድርጅት ላይሆን ይችላል።"</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"ለማንኛውም በአሳሽ በኩል ይቀጥሉ"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"የአፈጻጸም ጭማሪ"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5ጂ አማራጮች ከአገልግሎት አቅራቢዎ"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"ለመተግበሪያዎ ተሞክሮ አማራጮችን ለማየት የ%s ድር ጣቢያን ይጎብኙ"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"አሁን አይደለም"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"አስተዳድር"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"የአፈጻጸም ጭማሪ ይግዙ።"</string>
diff --git a/packages/CarrierDefaultApp/res/values-as/strings.xml b/packages/CarrierDefaultApp/res/values-as/strings.xml
index 56e2da507616..860b82c7dbaa 100644
--- a/packages/CarrierDefaultApp/res/values-as/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-as/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"বাহকৰ যোগাযোগ"</string>
<string name="android_system_label" msgid="2797790869522345065">"ম’বাইল সেৱা প্ৰদান কৰা কোম্পানী"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"ম’বাইল ডেটা শেষ হৈছে"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"আপোনাৰ ম’বাইল ডেটা সেৱা নিষ্ক্ৰিয় কৰা হৈছে"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"উদাহৰণস্বৰূপে, আপোনাক দেখুওৱা লগ ইনৰ পৃষ্ঠাটো প্ৰতিষ্ঠানটোৰ নিজা নহ\'বও পাৰে।"</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"তথাপিও ব্ৰাউজাৰৰ জৰিয়তে অব্যাহত ৰাখক"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"কাৰ্যক্ষমতা পৰিৱৰ্ধন"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"আপোনাৰ বাহকে আগবঢ়োৱা 5G বিকল্পসমূহ"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"আপোনাৰ এপৰ অভিজ্ঞতাৰ বাবে বিকল্পসমূহ চাবলৈ %sৰ ৱেবছাইটলৈ যাওক"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"এতিয়া নহয়"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"পৰিচালনা কৰক"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"এটা কাৰ্যক্ষমতা পৰিৱৰ্ধন ক্ৰয় কৰক।"</string>
diff --git a/packages/CarrierDefaultApp/res/values-az/strings.xml b/packages/CarrierDefaultApp/res/values-az/strings.xml
index 9677b62d3da0..5be5740a002d 100644
--- a/packages/CarrierDefaultApp/res/values-az/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-az/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Operator Kommunikasiyaları"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobil Operator"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobil data bitib"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Mobil data deaktiv edilib"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Məsələn, giriş səhifəsi göstərilən təşkilata aid olmaya bilər."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Hər bir halda brazuer ilə davam edin"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Performans artırması"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Operatorunuzdan 5G seçimləri"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Tətbiq təcrübəsi üzrə seçimlərə baxmaq üçün %s veb-saytına daxil olun"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"İndi yox"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"İdarə edin"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Performans artırması alın."</string>
diff --git a/packages/CarrierDefaultApp/res/values-b+sr+Latn/strings.xml b/packages/CarrierDefaultApp/res/values-b+sr+Latn/strings.xml
index fc16b14742fa..3d2e4805f79a 100644
--- a/packages/CarrierDefaultApp/res/values-b+sr+Latn/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-b+sr+Latn/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Obaveštenja mobilnog operatera"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobilni operater"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobilni podaci su potrošeni"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Mobilni podaci su deaktivirani"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Na primer, stranica za prijavljivanje možda ne pripada prikazanoj organizaciji."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Ipak nastavi preko pregledača"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Poboljšanje učinka"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G opcije mobilnog operatera"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Opcije za doživljaj aplikacije potražite na veb-sajtu mobilnog operatera %s"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Ne sada"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Upravljaj"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Kupite poboljšanje učinka."</string>
diff --git a/packages/CarrierDefaultApp/res/values-bg/strings.xml b/packages/CarrierDefaultApp/res/values-bg/strings.xml
index 966ec33da8ce..95bd04b767c4 100644
--- a/packages/CarrierDefaultApp/res/values-bg/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-bg/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Съобщения от оператора"</string>
<string name="android_system_label" msgid="2797790869522345065">"Мобилен оператор"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Мобилните данни са изразходвани"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Мобилните ви данни са деактивирани"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Например страницата за вход може да не принадлежи на показаната организация."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Продължаване през браузър въпреки това"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Увеличаване на ефективността"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Опции за 5G от оператора ви"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"За да видите опции за практическата си работа с приложението, посетете уебсайта на %s"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Не сега"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Управление"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Купете пакет за увеличаване на ефективността."</string>
diff --git a/packages/CarrierDefaultApp/res/values-bn/strings.xml b/packages/CarrierDefaultApp/res/values-bn/strings.xml
index 46eeb749f0d0..516dd89d9bc3 100644
--- a/packages/CarrierDefaultApp/res/values-bn/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-bn/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"পরিষেবা প্রদানকারীর সাথে যোগাযোগ"</string>
<string name="android_system_label" msgid="2797790869522345065">"পরিষেবা প্রদানকারী"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"মোবাইল ডেটা ফুরিয়ে গেছে"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"আপনার মোবাইল ডেটা নিষ্ক্রিয় করা হয়েছে"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"যেমন, লগ-ইন পৃষ্ঠাটি যে প্রতিষ্ঠানের পৃষ্ঠা বলে দেখানো আছে, আসলে তা নাও হতে পারে৷"</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"যাই হোক, ব্রাউজারের মাধ্যমে চালিয়ে যান"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"পারফর্ম্যান্স বুস্ট"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"আপনার পরিষেবা প্রদানকারীর থেকে পাওয়া 5G বিকল্প"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"আপনার অ্যাপ সংক্রান্ত অভিজ্ঞতা উন্নত করার বিকল্পগুলি দেখতে, %s-এর ওয়েবসাইট ভিজিট করুন"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"এখন নয়"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"ম্যানেজ করুন"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"পারফর্ম্যান্স বুস্ট সংক্রান্ত ফিচার কিনুন।"</string>
diff --git a/packages/CarrierDefaultApp/res/values-bs/strings.xml b/packages/CarrierDefaultApp/res/values-bs/strings.xml
index d41ad211314f..61d8dc8712ff 100644
--- a/packages/CarrierDefaultApp/res/values-bs/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-bs/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Komunikacije putem operatera"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobilni operater"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobilni internet je potrošen"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Prijenos podataka na mobilnoj mreži je deaktiviran"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Naprimjer, stranica za prijavljivanje možda ne pripada prikazanoj organizaciji."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Ipak nastavi preko preglednika"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Pojačavanje performansi"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Opcije 5G mreže operatera"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Posjetite web lokaciju operatera %s da vidite opcije za iskustvo u aplikaciji"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Ne sada"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Upravljajte"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Kupite pojačavanje performansi."</string>
diff --git a/packages/CarrierDefaultApp/res/values-ca/strings.xml b/packages/CarrierDefaultApp/res/values-ca/strings.xml
index afde9193c9a9..ec032d5281df 100644
--- a/packages/CarrierDefaultApp/res/values-ca/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ca/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Comunicacions de l\'operador"</string>
<string name="android_system_label" msgid="2797790869522345065">"Operador de telefonia mòbil"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"S\'han esgotat les dades mòbils"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"S\'han desactivat les dades mòbils"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Per exemple, la pàgina d\'inici de sessió podria no pertànyer a l\'organització que es mostra."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Continua igualment mitjançant el navegador"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Optimització de rendiment"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Opcions 5G del teu operador"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Visita el lloc web de %s per veure les opcions relacionades amb la teva experiència a l\'aplicació"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Ara no"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Gestiona"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Compra una optimització de rendiment."</string>
diff --git a/packages/CarrierDefaultApp/res/values-de/strings.xml b/packages/CarrierDefaultApp/res/values-de/strings.xml
index 65e2fd5aa44f..b4cdc561163a 100644
--- a/packages/CarrierDefaultApp/res/values-de/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-de/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Kommunikation mit Mobilfunkanbieter"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobilfunkanbieter"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobile Daten sind aufgebraucht"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Deine mobilen Daten wurden deaktiviert"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Beispiel: Die Log-in-Seite gehört eventuell nicht zur angezeigten Organisation."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Trotzdem in einem Browser fortfahren"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Leistungs-Boost"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G-Optionen von deinem Mobilfunkanbieter"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Besuche die Website von %s, um dir die Optionen für deine App anzusehen"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Nicht jetzt"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Verwalten"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Leistungs-Boost erwerben."</string>
diff --git a/packages/CarrierDefaultApp/res/values-el/strings.xml b/packages/CarrierDefaultApp/res/values-el/strings.xml
index 7a55d3a8c68e..8a6430d39b31 100644
--- a/packages/CarrierDefaultApp/res/values-el/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-el/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Επικοινωνίες εταιρείας κινητής τηλεφωνίας"</string>
<string name="android_system_label" msgid="2797790869522345065">"Εταιρεία κινητής τηλεφωνίας"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Τα δεδομένα κινητής τηλεφωνίας εξαντλήθηκαν"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Τα δεδομένα κινητής τηλεφωνίας έχουν απενεργοποιηθεί"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Για παράδειγμα, η σελίδα σύνδεσης ενδέχεται να μην ανήκει στον οργανισμό που εμφανίζεται."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Συνέχεια ούτως ή άλλως μέσω του προγράμματος περιήγησης"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Ενίσχυση απόδοσης"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Επιλογές 5G από την εταιρεία κινητής τηλεφωνίας σας"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Επισκεφτείτε τον ιστότοπο %s για να δείτε επιλογές για την εμπειρία της εφαρμογής σας"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Όχι τώρα"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Διαχείριση"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Αγοράστε μια ενίσχυση απόδοσης."</string>
diff --git a/packages/CarrierDefaultApp/res/values-en-rAU/strings.xml b/packages/CarrierDefaultApp/res/values-en-rAU/strings.xml
index 9d6b0132e6a5..1f2089667f2e 100644
--- a/packages/CarrierDefaultApp/res/values-en-rAU/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-en-rAU/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Operator communications"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobile Operator"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobile data has run out"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Your mobile data has been deactivated"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"For example, the login page might not belong to the organisation shown."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Continue anyway via browser"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Performance boost"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G options from your operator"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Visit %s\'s website to see options for your app experience"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Not now"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Manage"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Purchase a performance boost."</string>
diff --git a/packages/CarrierDefaultApp/res/values-en-rCA/strings.xml b/packages/CarrierDefaultApp/res/values-en-rCA/strings.xml
index 00c03577c179..c084a0a7c74e 100644
--- a/packages/CarrierDefaultApp/res/values-en-rCA/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-en-rCA/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Carrier Communications"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobile Carrier"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobile data has run out"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Your mobile data has been deactivated"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"For example, the login page may not belong to the organization shown."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Continue anyway via browser"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Performance boost"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G options from your carrier"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Visit %s\'s website to see options for your app experience"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Not now"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Manage"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Purchase a performance boost."</string>
diff --git a/packages/CarrierDefaultApp/res/values-en-rGB/strings.xml b/packages/CarrierDefaultApp/res/values-en-rGB/strings.xml
index 9d6b0132e6a5..1f2089667f2e 100644
--- a/packages/CarrierDefaultApp/res/values-en-rGB/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-en-rGB/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Operator communications"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobile Operator"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobile data has run out"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Your mobile data has been deactivated"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"For example, the login page might not belong to the organisation shown."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Continue anyway via browser"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Performance boost"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G options from your operator"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Visit %s\'s website to see options for your app experience"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Not now"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Manage"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Purchase a performance boost."</string>
diff --git a/packages/CarrierDefaultApp/res/values-en-rIN/strings.xml b/packages/CarrierDefaultApp/res/values-en-rIN/strings.xml
index 9d6b0132e6a5..1f2089667f2e 100644
--- a/packages/CarrierDefaultApp/res/values-en-rIN/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-en-rIN/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Operator communications"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobile Operator"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobile data has run out"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Your mobile data has been deactivated"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"For example, the login page might not belong to the organisation shown."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Continue anyway via browser"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Performance boost"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G options from your operator"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Visit %s\'s website to see options for your app experience"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Not now"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Manage"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Purchase a performance boost."</string>
diff --git a/packages/CarrierDefaultApp/res/values-en-rXC/strings.xml b/packages/CarrierDefaultApp/res/values-en-rXC/strings.xml
index 7f7456d10c63..01789251e3d0 100644
--- a/packages/CarrierDefaultApp/res/values-en-rXC/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-en-rXC/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎Carrier Communications‎‏‎‎‏‎"</string>
<string name="android_system_label" msgid="2797790869522345065">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎Mobile Carrier‎‏‎‎‏‎"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎Mobile data has run out‎‏‎‎‏‎"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‏‎Your mobile data has been deactivated‎‏‎‎‏‎"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎For example, the login page may not belong to the organization shown.‎‏‎‎‏‎"</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎Continue anyway via browser‎‏‎‎‏‎"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎Performance boost‎‏‎‎‏‎"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎5G options from your carrier‎‏‎‎‏‎"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎Visit %s\'s website to see options for your app experience‎‏‎‎‏‎"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎Not now‎‏‎‎‏‎"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎Manage‎‏‎‎‏‎"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎Purchase a performance boost.‎‏‎‎‏‎"</string>
diff --git a/packages/CarrierDefaultApp/res/values-es-rUS/strings.xml b/packages/CarrierDefaultApp/res/values-es-rUS/strings.xml
index 85598235fe46..5bf0e6e15f77 100644
--- a/packages/CarrierDefaultApp/res/values-es-rUS/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-es-rUS/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Comunicaciones de operadores"</string>
<string name="android_system_label" msgid="2797790869522345065">"Compañía de telefonía móvil"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Se agotó el servicio de datos móviles"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Se desactivaron los datos móviles"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Por ejemplo, es posible que la página de acceso no pertenezca a la organización que aparece."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Continuar de todos modos desde el navegador"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Aumento de rendimiento"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Opciones de 5G de tu operador"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Visita el sitio web de %s para ver opciones de tu experiencia en la app"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Ahora no"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Administrar"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Compra un aumento de rendimiento."</string>
diff --git a/packages/CarrierDefaultApp/res/values-es/strings.xml b/packages/CarrierDefaultApp/res/values-es/strings.xml
index b9fa4c0d4c25..2a41c8993eed 100644
--- a/packages/CarrierDefaultApp/res/values-es/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-es/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Comunicaciones del operador"</string>
<string name="android_system_label" msgid="2797790869522345065">"Operador de telefonía móvil"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Se han agotado los datos móviles"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Se han desactivado los datos móviles"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Por ejemplo, es posible que la página de inicio de sesión no pertenezca a la organización mostrada."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Continuar de todos modos a través del navegador"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Mejora de rendimiento"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Opciones 5G de tu operador"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Visita el sitio web de %s para ver opciones relacionadas con tu experiencia en la aplicación"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Ahora no"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Gestionar"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Comprar una mejora de rendimiento."</string>
diff --git a/packages/CarrierDefaultApp/res/values-et/strings.xml b/packages/CarrierDefaultApp/res/values-et/strings.xml
index e51b76c328a9..c1a33d0f4761 100644
--- a/packages/CarrierDefaultApp/res/values-et/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-et/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Carrier Communications"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobiilioperaator"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobiilse andmeside limiit on täis"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Teie mobiilne andmeside on inaktiveeritud"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Näiteks ei pruugi sisselogimisleht kuuluda kuvatavale organisatsioonile."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Jätka siiski brauseris"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Jõudluse võimendus"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G valikud teie operaatorilt"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Külastage operaatori %s veebisaiti, et näha oma rakenduse kasutuskogemuse valikuid"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Mitte praegu"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Haldamine"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Ostke jõudluse võimendus."</string>
diff --git a/packages/CarrierDefaultApp/res/values-eu/strings.xml b/packages/CarrierDefaultApp/res/values-eu/strings.xml
index 36506351d9f5..86e12915a23c 100644
--- a/packages/CarrierDefaultApp/res/values-eu/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-eu/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Operadorearekiko komunikazioa"</string>
<string name="android_system_label" msgid="2797790869522345065">"Telefonia mugikorreko operadorea"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Agortu egin da datu-konexioa"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Desaktibatu da datu-konexioa"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Adibidez, baliteke saioa hasteko orria adierazitako erakundearena ez izatea."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Jarraitu arakatzailearen bidez, halere"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Errendimendu-hobekuntza"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Operadoreak eskaintzen dituen 5G-aren aukerak"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Joan %s operadorearen webgunera aplikazioaren erabileraren inguruko aukerak ikusteko"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Orain ez"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Kudeatu"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Erosi errendimendu-hobekuntza bat."</string>
diff --git a/packages/CarrierDefaultApp/res/values-fa/strings.xml b/packages/CarrierDefaultApp/res/values-fa/strings.xml
index 0738cbfe57d5..89c184cf2e73 100644
--- a/packages/CarrierDefaultApp/res/values-fa/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-fa/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"ارتباطات شرکت مخابراتی"</string>
<string name="android_system_label" msgid="2797790869522345065">"شرکت مخابراتی دستگاه همراه"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"داده تلفن همراه تمام شده است"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"داده شبکه تلفن همراه شما غیرفعال شده است"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"به عنوان مثال، صفحه ورود به سیستم ممکن است متعلق به سازمان نشان داده شده نباشد."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"درهر صورت ازطریق مرورگر ادامه یابد"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"تقویت‌کننده عملکرد"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"گزینه‌های نسل پنجم شرکت مخابراتی شما"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"‏برای دیدن گزینه‌های مرتبط با تجربه برنامه، به وب‌سایت %s مراجعه کنید"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"اکنون نه"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"مدیریت"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"تقویت‌کننده عملکرد خریداری کنید."</string>
diff --git a/packages/CarrierDefaultApp/res/values-fr/strings.xml b/packages/CarrierDefaultApp/res/values-fr/strings.xml
index 1d06a1d7cb7d..4bc03ffab291 100644
--- a/packages/CarrierDefaultApp/res/values-fr/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-fr/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Opérateur des communications"</string>
<string name="android_system_label" msgid="2797790869522345065">"Opérateur mobile"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Les données mobiles sont épuisées"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Les données mobiles ont été désactivées pour votre compte"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Par exemple, la page de connexion peut ne pas appartenir à l\'organisation représentée."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Continuer quand même dans le navigateur"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Boost de performances"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Options 5G de votre opérateur"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Accédez au site Web de %s pour consulter les options pour l\'expérience de votre appli"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Pas maintenant"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Gérer"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Achetez un boost de performances."</string>
diff --git a/packages/CarrierDefaultApp/res/values-gu/strings.xml b/packages/CarrierDefaultApp/res/values-gu/strings.xml
index d003a44926cd..1d42e8f8340c 100644
--- a/packages/CarrierDefaultApp/res/values-gu/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-gu/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"મોબાઇલ ઑપરેટર તરફથી કમ્યુનિકેશન"</string>
<string name="android_system_label" msgid="2797790869522345065">"મોબાઇલ કૅરિઅર"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"મોબાઇલ ડેટા પૂરો થઈ ગયો છે"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"તમારો મોબાઇલ ડેટા નિષ્ક્રિય કરવામાં આવ્યો છે"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"ઉદાહરણ તરીકે, લોગિન પૃષ્ઠ બતાવવામાં આવેલી સંસ્થાનું ન પણ હોય."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"તો પણ બ્રાઉઝર મારફતે ચાલુ રાખો"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"પર્ફોર્મન્સ બૂસ્ટ"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"તમારા મોબાઇલ ઑપરેટર તરફથી 5G વિકલ્પો"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"તમારા ઍપ અનુભવ માટેના વિકલ્પો જોવા માટે %sની વેબસાઇટની મુલાકાત લો"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"હમણાં નહીં"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"મેનેજ કરો"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"પર્ફોર્મન્સ બૂસ્ટ ખરીદો."</string>
diff --git a/packages/CarrierDefaultApp/res/values-hi/strings.xml b/packages/CarrierDefaultApp/res/values-hi/strings.xml
index 6b3c5444d944..a830d7764b8c 100644
--- a/packages/CarrierDefaultApp/res/values-hi/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-hi/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Carrier Communications"</string>
<string name="android_system_label" msgid="2797790869522345065">"मोबाइल सेवा देने वाली कंपनी"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"मोबाइल डेटा खत्म हो गया है"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"आपका मोबाइल डेटा बंद कर दिया गया है"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"उदाहरण के लिए, हो सकता है कि लॉगिन पेज दिखाए गए संगठन का ना हो."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"ब्राउज़र के ज़रिए किसी भी तरह जारी रखें"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"परफ़ॉर्मेंस बूस्ट"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"मोबाइल और इंटरनेट सेवा देने वाली कंपनी से मिले 5G के विकल्प"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"ऐप्लिकेशन का बेहतर अनुभव पाने के लिए, %s की वेबसाइट पर जाकर विकल्प देखें"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"अभी नहीं"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"मैनेज करें"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"कोई परफ़ॉर्मेंस बूस्ट खरीदें."</string>
diff --git a/packages/CarrierDefaultApp/res/values-hr/strings.xml b/packages/CarrierDefaultApp/res/values-hr/strings.xml
index 1a58080eaa86..34bf6015a222 100644
--- a/packages/CarrierDefaultApp/res/values-hr/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-hr/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Komunikacije operatera"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobilni operater"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobilni su podaci potrošeni"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Mobilni su podaci deaktivirani"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Na primjer, stranica za prijavu možda ne pripada prikazanoj organizaciji."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Ipak nastavi putem preglednika"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Poboljšanje izvedbe"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Opcije 5G mreže vašeg operatera"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Posjetite web-lokaciju %s za prikaz opcija za doživljaj aplikacije"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Ne sad"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Upravljajte"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Kupite poboljšanje izvedbe."</string>
diff --git a/packages/CarrierDefaultApp/res/values-hu/strings.xml b/packages/CarrierDefaultApp/res/values-hu/strings.xml
index 6ed1efe7cebd..13ac0a16a439 100644
--- a/packages/CarrierDefaultApp/res/values-hu/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-hu/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Szolgáltatói értesítések"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobilszolgáltató"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Elérte a rendelkezésre álló mobiladat-mennyiséget"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"A rendszer deaktiválta a mobiladat-forgalmat"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Például lehetséges, hogy a bejelentkezési oldal nem a megjelenített szervezethez tartozik."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Folytatás ennek ellenére böngészőn keresztül"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Teljesítménynövelés"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G-beállítások a szolgáltatótól"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"A(z) %s webhelyén megtekintheti az alkalmazás által nyújtott élményekhez tartozó beállításokat"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Most nem"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Kezelés"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Vásároljon teljesítménynövelést."</string>
diff --git a/packages/CarrierDefaultApp/res/values-in/strings.xml b/packages/CarrierDefaultApp/res/values-in/strings.xml
index cb0f35b0ef7d..f9a9732112b9 100644
--- a/packages/CarrierDefaultApp/res/values-in/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-in/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Komunikasi Operator"</string>
<string name="android_system_label" msgid="2797790869522345065">"Operator Seluler"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Data seluler telah habis"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Data seluler telah dinonaktifkan"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Misalnya, halaman login mungkin bukan milik organisasi yang ditampilkan."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Tetap lanjutkan melalui browser"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Penguat sinyal"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Opsi 5G dari operator Anda"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Buka situs %s untuk melihat opsi pengalaman aplikasi Anda"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Lain kali"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Kelola"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Beli penguat sinyal."</string>
diff --git a/packages/CarrierDefaultApp/res/values-is/strings.xml b/packages/CarrierDefaultApp/res/values-is/strings.xml
index 1e5fa784f1c1..ca9d6c7887e0 100644
--- a/packages/CarrierDefaultApp/res/values-is/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-is/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Samskipti við símafyrirtæki"</string>
<string name="android_system_label" msgid="2797790869522345065">"Símafyrirtæki"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Farsímagögn kláruðust"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Slökkt hefur verið á farsímagögnum"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Til dæmis getur verið að innskráningarsíðan tilheyri ekki fyrirtækinu sem birtist."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Halda samt áfram í vafra"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Afkastaaukning"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G-valkostir frá símafyrirtækinu"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Opnaðu vefsvæði %s til að sjá valkosti varðandi upplifun í forritinu"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Ekki núna"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Stjórna"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Kaupa afkastaaukningu."</string>
diff --git a/packages/CarrierDefaultApp/res/values-iw/strings.xml b/packages/CarrierDefaultApp/res/values-iw/strings.xml
index 3551acf22dc6..9e5a8b55bae6 100644
--- a/packages/CarrierDefaultApp/res/values-iw/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-iw/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"מידע מהספק"</string>
<string name="android_system_label" msgid="2797790869522345065">"ספק שירות לנייד"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"ניצלת את מכסת הנתונים הסלולריים"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"חבילת הגלישה שלך הושבתה"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"לדוגמה, ייתכן שדף ההתחברות אינו שייך לארגון המוצג."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"המשך בכל זאת באמצעות דפדפן"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"שיפור ביצועים"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"‏אפשרויות של רשת 5G מהספק"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"‏ניתן להיכנס לאתר של %s כדי לראות אפשרויות נוספות לחוויית השימוש באפליקציה"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"לא עכשיו"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"ניהול"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"רכישת שיפור ביצועים."</string>
diff --git a/packages/CarrierDefaultApp/res/values-ka/strings.xml b/packages/CarrierDefaultApp/res/values-ka/strings.xml
index ee281d78a436..4488a55a8afe 100644
--- a/packages/CarrierDefaultApp/res/values-ka/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ka/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"ოპერატორთან კომუნიკაცია"</string>
<string name="android_system_label" msgid="2797790869522345065">"მობილური ოპერატორი"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"მობილური ინტერნეტის პაკეტი ამოიწურა"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"მობილური ინტერნეტი დეაქტივირებულია"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"მაგალითად, სისტემაში შესვლის გვერდი შეიძლება არ ეკუთვნოდეს ნაჩვენებ ორგანიზაციას."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"მაინც ბრაუზერში გაგრძელება"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"ეფექტურობის გაძლიერება"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G ვარიანტები თქვენი ოპერატორისგან"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"ეწვიეთ %s-ის ვებსაიტს თქვენი აპის გამოცდილების ვარიანტების სანახავად"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"ახლა არა"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"მართვა"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"ეფექტურობის გაძლიერების შეძენა."</string>
diff --git a/packages/CarrierDefaultApp/res/values-kk/strings.xml b/packages/CarrierDefaultApp/res/values-kk/strings.xml
index b5f69504de62..ad91c79f458e 100644
--- a/packages/CarrierDefaultApp/res/values-kk/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-kk/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Оператор байланыстары"</string>
<string name="android_system_label" msgid="2797790869522345065">"Мобильдік байланыс операторы"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Мобильдік интернет бітті"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Мобильдік интернет өшірілді"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Мысалы, кіру беті көрсетілген ұйымға тиесілі болмауы мүмкін."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Бәрібір браузер арқылы жалғастыру"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Өнімділікті арттыру"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Оператор ұсынған 5G опциялары"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Қолданбаның жұмысына арналған опцияларды көру үшін %s веб-сайтына кіріңіз."</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Қазір емес"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Басқару"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Өнімділікті арттыру құралын сатып алыңыз."</string>
diff --git a/packages/CarrierDefaultApp/res/values-km/strings.xml b/packages/CarrierDefaultApp/res/values-km/strings.xml
index 20199a7b06f4..18524899af1f 100644
--- a/packages/CarrierDefaultApp/res/values-km/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-km/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"ទំនាក់ទំនងរបស់ក្រុមហ៊ុន​សេវាទូរសព្ទ"</string>
<string name="android_system_label" msgid="2797790869522345065">"ក្រុមហ៊ុនបម្រើសេវាទូរសព្ទចល័ត"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"ទិន្នន័យ​ចល័ត​បាន​អស់​ហើយ"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"ទិន្នន័យ​ចល័ត​របស់អ្នក​ត្រូវបាន​បិទដំណើរការហើយ"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"ឧទាហរណ៍៖ ទំព័រចូលនេះអាចនឹងមិនមែនជាកម្មសិទ្ធិរបស់ស្ថាប័នដែលបានបង្ហាញនេះទេ។"</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"យ៉ាងណាក៏ដោយនៅតែបន្តតាមរយៈកម្មវិធីរុករកតាមអ៊ីនធឺណិត"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"ការបង្កើនប្រតិបត្តិការ"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"ជម្រើស 5G ពីក្រុមហ៊ុន​សេវាទូរសព្ទរបស់អ្នក"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"ចូលទៅកាន់គេហទំព័ររបស់ %s ដើម្បីមើលជម្រើសសម្រាប់បទពិសោធន៍ប្រើកម្មវិធីរបស់អ្នក"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"កុំទាន់"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"គ្រប់គ្រង"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"ទិញការបង្កើនប្រតិបត្តិការ។"</string>
diff --git a/packages/CarrierDefaultApp/res/values-kn/strings.xml b/packages/CarrierDefaultApp/res/values-kn/strings.xml
index 619b92a0dc5a..bc3e1cc16f9d 100644
--- a/packages/CarrierDefaultApp/res/values-kn/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-kn/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"ವಾಹಕ ಸಂವಹನಗಳು"</string>
<string name="android_system_label" msgid="2797790869522345065">"ಮೊಬೈಲ್ ವಾಹಕ"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"ಮೊಬೈಲ್ ಡೇಟಾ ಮುಗಿದುಹೋಗಿದೆ"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"ನಿಮ್ಮ ಮೊಬೈಲ್ ಡೇಟಾ ನಿಷ್ಕ್ರಿಯಗೊಂಡಿದೆ"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"ಉದಾಹರಣೆಗೆ, ಲಾಗಿನ್ ಪುಟವು ತೋರಿಸಲಾಗಿರುವ ಸಂಸ್ಥೆಗೆ ಸಂಬಂಧಿಸಿಲ್ಲದಿರಬಹುದು."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"ಪರವಾಗಿಲ್ಲ, ಬ್ರೌಸರ್ ಮೂಲಕ ಮುಂದುವರಿಸಿ"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"ಕಾರ್ಯಕ್ಷಮತೆ ಬೂಸ್ಟ್"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"ನಿಮ್ಮ ವಾಹಕದಿಂದ 5G ಆಯ್ಕೆಗಳು"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"ನಿಮ್ಮ ಆ್ಯಪ್ ಅನುಭವಕ್ಕಾಗಿ ಆಯ್ಕೆಗಳನ್ನು ನೋಡಲು %s ನ ವೆಬ್‌ಸೈಟ್‌ಗೆ ಭೇಟಿ ನೀಡಿ"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"ಈಗ ಬೇಡ"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"ನಿರ್ವಹಿಸಿ"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"ಕಾರ್ಯಕ್ಷಮತೆ ಬೂಸ್ಟ್ ಅನ್ನು ಖರೀದಿಸಿ."</string>
diff --git a/packages/CarrierDefaultApp/res/values-ko/strings.xml b/packages/CarrierDefaultApp/res/values-ko/strings.xml
index 46e172da378e..4e82d251c83d 100644
--- a/packages/CarrierDefaultApp/res/values-ko/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ko/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"이동통신사 커뮤니케이션"</string>
<string name="android_system_label" msgid="2797790869522345065">"이동통신사"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"모바일 데이터가 소진되었습니다."</string>
<string name="no_data_notification_id" msgid="668400731803969521">"모바일 데이터가 비활성화되었습니다."</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"예를 들어 로그인 페이지가 표시된 조직에 속하지 않을 수 있습니다."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"브라우저를 통해 계속하기"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"성능 향상"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"이동통신사의 5G 옵션"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"%s 웹사이트에 방문하여 앱 환경에 관한 옵션을 확인하세요."</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"나중에"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"관리"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"성능 향상 구매"</string>
diff --git a/packages/CarrierDefaultApp/res/values-ky/strings.xml b/packages/CarrierDefaultApp/res/values-ky/strings.xml
index f2a96bc8ef77..aa6a1320ac92 100644
--- a/packages/CarrierDefaultApp/res/values-ky/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ky/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Байланыш операторунун билдирмелери"</string>
<string name="android_system_label" msgid="2797790869522345065">"Мобилдик байланыш оператору"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Мобилдик Интернетиңиздин трафиги түгөндү"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Мобилдик Интернет өчүрүлгөн"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Мисалы, аккаунтка кирүү баракчасы көрсөтүлгөн уюмга таандык эмес болушу мүмкүн."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Баары бир серепчи аркылуу улантуу"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Иштин майнаптуулугун жогорулатуу"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Байланыш операторунун 5G варианттары"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Колдонмону иштетүү параметрлерин көрүү үчүн %s сайтына өтүңүз"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Азыр эмес"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Тескөө"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Иштин майнаптуулугун жогорулатууну сатып алыңыз."</string>
diff --git a/packages/CarrierDefaultApp/res/values-lo/strings.xml b/packages/CarrierDefaultApp/res/values-lo/strings.xml
index 28af8307bbee..0624c72375f9 100644
--- a/packages/CarrierDefaultApp/res/values-lo/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-lo/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"ການສື່ສານຈາກຜູ້ໃຫ້ບໍລິການ"</string>
<string name="android_system_label" msgid="2797790869522345065">"ຜູ້ໃຫ້ບໍລິການມືຖື"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"ອິນເຕີເນັດມືຖືໝົດແລ້ວ"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"ປິດການນຳໃຊ້ອິນເຕີເນັດມືຖືຂອງທ່ານແລ້ວ"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"ຕົວຢ່າງ, ໜ້າເຂົ້າສູ່ລະບົບອາດຈະບໍ່ແມ່ນຂອງອົງກອນທີ່ປາກົດ."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"ດຳເນີນການຕໍ່ຜ່ານໂປຣແກຣມທ່ອງເວັບ"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"ເລັ່ງປະສິດທິພາບ"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"ຕົວເລືອກ 5G ຈາກຜູ້ໃຫ້ບໍລິການຂອງທ່ານ"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"ເບິ່ງຕົວເລືອກຕ່າງໆສຳລັບປະສົບການການນຳໃຊ້ແອັບຂອງທ່ານໄດ້ຢູ່ເວັບໄຊຂອງ %s"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"ບໍ່ຟ້າວເທື່ອ"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"ຈັດການ"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"ຊື້ການເລັ່ງປະສິດທິພາບ."</string>
diff --git a/packages/CarrierDefaultApp/res/values-lt/strings.xml b/packages/CarrierDefaultApp/res/values-lt/strings.xml
index b9be33303ba2..8780eb0f0889 100644
--- a/packages/CarrierDefaultApp/res/values-lt/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-lt/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Operatoriaus pranešimai"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobiliojo ryšio operatorius"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobiliojo ryšio duomenys baigėsi"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Mobiliojo ryšio duomenys išaktyvinti"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Pavyzdžiui, prisijungimo puslapis gali nepriklausyti rodomai organizacijai."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Vis tiek tęsti naudojant naršyklę"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Našumo pagerinimas"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Operatoriaus teikiamos 5G parinktys"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Apsilankykite „%s“ svetainėje ir peržiūrėkite programos funkcijų parinktis"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Ne dabar"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Tvarkyti"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Įsigykite našumo pagerinimo paslaugą."</string>
diff --git a/packages/CarrierDefaultApp/res/values-lv/strings.xml b/packages/CarrierDefaultApp/res/values-lv/strings.xml
index d539947925e7..a65fa5872c01 100644
--- a/packages/CarrierDefaultApp/res/values-lv/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-lv/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Paziņojumi no mobilo sakaru operatora"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobilo sakaru operators"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Sasniegts mobilo datu ierobežojums."</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Jūsu mobilie dati ir deaktivizēti"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Piemēram, pieteikšanās lapa, iespējams, nepieder norādītajai organizācijai."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Tomēr turpināt, izmantojot pārlūkprogrammu"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Veiktspējas uzlabojums"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Mobilo sakaru operatora piedāvātās 5G iespējas"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Apmeklējiet operatora %s vietni, lai skatītu pieejamās iespējas lietotnē"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Vēlāk"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Pārvaldīt"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Iegādājieties veiktspējas uzlabojumu."</string>
diff --git a/packages/CarrierDefaultApp/res/values-mk/strings.xml b/packages/CarrierDefaultApp/res/values-mk/strings.xml
index 4efecb05c2ea..4965d563d9f3 100644
--- a/packages/CarrierDefaultApp/res/values-mk/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-mk/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Комуникации со давателот на услугата"</string>
<string name="android_system_label" msgid="2797790869522345065">"Мобилен оператор"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Мобилниот интернет е искористен"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Мобилниот интернет ви е деактивиран"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"На пример, страницата за најавување може да не припаѓа на прикажаната организација."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Сепак продолжи преку прелистувач"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Засилување на изведбата"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G опции од вашиот давател на услуга"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Посетете го веб-сајтот на %s за да ги видите опциите за искуството со апликацијата"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Не сега"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Управувајте"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Купете засилување на изведбата."</string>
diff --git a/packages/CarrierDefaultApp/res/values-ml/strings.xml b/packages/CarrierDefaultApp/res/values-ml/strings.xml
index f4c19a3a274a..cfeacbe70fd7 100644
--- a/packages/CarrierDefaultApp/res/values-ml/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ml/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"സേവനദാതാവ് നടത്തുന്ന ആശയവിനിമയങ്ങൾ"</string>
<string name="android_system_label" msgid="2797790869522345065">"മൊബൈൽ കാരിയർ"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"മൊബൈൽ ഡാറ്റ തീർന്നിരിക്കുന്നു"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"നിങ്ങളുടെ മൊബൈൽ ഡാറ്റ നിർജീവമാക്കി"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"ഉദാഹരണത്തിന്, കാണിച്ചിരിക്കുന്ന ഓർഗനൈസേഷന്റേതായിരിക്കില്ല ലോഗിൻ പേജ്."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"എന്തായാലും ബ്രൗസർ വഴി തുടരുക"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"പ്രകടന ബൂസ്റ്റ്"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"നിങ്ങളുടെ സേവനദാതാവിൽ നിന്നുള്ള 5G ഓപ്‌ഷനുകൾ"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"നിങ്ങളുടെ ആപ്പ് അനുഭവം സംബന്ധിച്ച ഓപ്‌ഷനുകൾക്ക് %s എന്നതിന്റെ വെബ്‌സൈറ്റ് സന്ദർശിക്കുക"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"ഇപ്പോൾ വേണ്ട"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"മാനേജ് ചെയ്യുക"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"പ്രകടന ബൂസ്റ്റ് വാങ്ങൂ."</string>
diff --git a/packages/CarrierDefaultApp/res/values-mn/strings.xml b/packages/CarrierDefaultApp/res/values-mn/strings.xml
index 2f33eb2e71c6..3476ff072ebb 100644
--- a/packages/CarrierDefaultApp/res/values-mn/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-mn/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Оператор компанийн харилцаа холбоо"</string>
<string name="android_system_label" msgid="2797790869522345065">"Мобайл оператор компани"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Мобайл дата дууссан"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Таны мобайл датаг идэвхгүй болгосон"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Жишээлбэл нэвтрэх хуудас нь харагдаж буй байгууллагынх биш байж болно."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Ямар ч тохиолдолд хөтчөөр үргэлжлүүлэх"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Гүйцэтгэлийн идэвхжүүлэлт"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Таны оператор компанийн 5G сонголт"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Аппын хэрэглээнийхээ сонголтыг харахын тулд %s-н вебсайтад зочилно уу"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Одоо биш"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Удирдах"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Гүйцэтгэлийн идэвхжүүлэлтийг худалдаж аваарай."</string>
diff --git a/packages/CarrierDefaultApp/res/values-mr/strings.xml b/packages/CarrierDefaultApp/res/values-mr/strings.xml
index 941454592d5f..412304574996 100644
--- a/packages/CarrierDefaultApp/res/values-mr/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-mr/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"वाहकसह संभाषणे"</string>
<string name="android_system_label" msgid="2797790869522345065">"मोबाइल वाहक"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"मोबाइल डेटा संपला आहे"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"तुमचा मोबाइल डेटा निष्क्रिय केला गेला"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"उदाहरणार्थ, लॉग इन पृष्‍ठ दर्शवलेल्या संस्थेच्या मालकीचे नसू शकते."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"तरीही ब्राउझरद्वारे सुरू ठेवा"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"परफॉर्मन्स बूस्ट"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"तुमच्या वाहकाकडून 5G पर्याय"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"तुमच्या अ‍ॅप अनुभवासाठी पर्याय पाहण्याकरिता %s च्या वेबसाइटला भेट द्या"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"आता नको"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"व्यवस्थापित करा"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"परफॉर्मन्स बूस्ट खरेदी करा."</string>
diff --git a/packages/CarrierDefaultApp/res/values-ms/strings.xml b/packages/CarrierDefaultApp/res/values-ms/strings.xml
index 4fb377e674dd..004d092b5f41 100644
--- a/packages/CarrierDefaultApp/res/values-ms/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ms/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Komunikasi Pembawa"</string>
<string name="android_system_label" msgid="2797790869522345065">"Pembawa Mudah Alih"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Data mudah alih telah habis"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Data mudah alih anda telah dinyahaktifkan"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Contohnya, halaman log masuk mungkin bukan milik organisasi yang ditunjukkan."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Teruskan juga melalui penyemak imbas"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Peningkatan prestasi"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Pilihan 5G daripada pembawa anda"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Lawati laman web %s untuk melihat pilihan pengalaman apl anda"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Bukan sekarang"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Urus"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Beli perangsang prestasi."</string>
diff --git a/packages/CarrierDefaultApp/res/values-my/strings.xml b/packages/CarrierDefaultApp/res/values-my/strings.xml
index 002edd86d38d..6e1381f85220 100644
--- a/packages/CarrierDefaultApp/res/values-my/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-my/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"မိုဘိုင်းဖုန်းကုမ္ပဏီ ဆက်သွယ်မှုများ"</string>
<string name="android_system_label" msgid="2797790869522345065">"မိုဘိုင်း ဝန်ဆောင်မှုပေးသူ"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"မိုဘိုင်းဒေတာ ကုန်သွားပါပြီ"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"သင်၏ မိုဘိုင်း ဒေတာကို ပိတ်ထားပါသည်"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"ဥပမာ− ဝင်ရောက်ရန် စာမျက်နှာသည် ပြသထားသည့် အဖွဲ့အစည်းနှင့် သက်ဆိုင်မှုမရှိခြင်း ဖြစ်နိုင်ပါသည်။"</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"မည်သို့ပင်ဖြစ်စေ ဘရောက်ဇာမှတစ်ဆင့် ရှေ့ဆက်ရန်"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"စွမ်းဆောင်ရည် မြှင့်တင်အက်ပ်"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"သင်၏ မိုဘိုင်းဖုန်းကုမ္ပဏီထံမှ 5G ရွေးစရာများ"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"သင့်အက်ပ်အသုံးပြုမှုအတွက် ရွေးစရာများကြည့်ရန် %s ၏ ဝဘ်ဆိုက်သို့ ဝင်ကြည့်ပါ"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"ယခုမလုပ်ပါ"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"စီမံရန်"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"စွမ်းဆောင်ရည် မြှင့်တင်အက်ပ် ဝယ်ယူရန်။"</string>
diff --git a/packages/CarrierDefaultApp/res/values-ne/strings.xml b/packages/CarrierDefaultApp/res/values-ne/strings.xml
index 169ceff4a304..9bf2fb104ae9 100644
--- a/packages/CarrierDefaultApp/res/values-ne/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ne/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"सेवा प्रदायकसँग गरिएका कुराकानीहरू"</string>
<string name="android_system_label" msgid="2797790869522345065">"मोबाइलको सेवा प्रदायक छनौट गर्नुहोस्"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"मोबाइल डेटा सकियो"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"तपाईंको मोबाइल डेटा निष्क्रिय पारिएको छ"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"उदाहरणका लागि, लग इन पृष्ठ देखाइएको संस्थाको नहुन सक्छ।"</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"जे भए पनि ब्राउजर मार्फत जारी राख्नुहोस्"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"पर्फर्मेन्स बुस्ट"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"तपाईंको सेवा प्रदायकले उपलब्ध गराएका 5G सम्बन्धी विकल्पहरू"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"एप प्रयोग गर्दा अझ राम्रो सुविधा पाउन %s को वेबसाइटमा गई विकल्पहरू हेर्नुहोस्"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"अहिले होइन"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"व्यवस्थापन गर्नुहोस्"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"पर्फर्मेन्स बुस्ट किन्नुहोस्।"</string>
diff --git a/packages/CarrierDefaultApp/res/values-nl/strings.xml b/packages/CarrierDefaultApp/res/values-nl/strings.xml
index 35ecb3cf904a..b2850c0c1537 100644
--- a/packages/CarrierDefaultApp/res/values-nl/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-nl/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Berichten van provider"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobiele provider"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobiele data verbruikt"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Je mobiele data zijn uitgeschakeld"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Zo hoort de weergegeven inlogpagina misschien niet bij de weergegeven organisatie."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Toch doorgaan via browser"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Prestatieboost"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G-opties van je provider"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Ga naar de website van %s om opties voor de app-functionaliteit te zien"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Niet nu"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Beheren"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Koop een prestatieboost."</string>
diff --git a/packages/CarrierDefaultApp/res/values-or/strings.xml b/packages/CarrierDefaultApp/res/values-or/strings.xml
index dc13b65f2e19..884af9ae4ce7 100644
--- a/packages/CarrierDefaultApp/res/values-or/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-or/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"କେରିଅର କମ୍ୟୁନିକେସନ୍ସ"</string>
<string name="android_system_label" msgid="2797790869522345065">"ମୋବାଇଲ୍‌ କେରିଅର୍‍"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"ମୋବାଇଲ୍‍ ଡାଟା ଶେଷ ହୋଇଯାଇଛି"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"ଆପଣଙ୍କ ମୋବାଇଲ୍‍ ଡାଟା ନିଷ୍କ୍ରୀୟ କରାଯାଇଛି"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"ଉଦାହରଣସ୍ୱରୂପ, ଲଗଇନ୍‍ ପୃଷ୍ଠା ଦେଖାଯାଇଥିବା ସଂସ୍ଥାର ହୋଇନଥାଇପାରେ।"</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"ବ୍ରାଉଜର୍‍ ଜରିଆରେ ଯେମିତିବି ହେଉ ଜାରି ରଖନ୍ତୁ"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"ପରଫରମାନ୍ସ ବୁଷ୍ଟ"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"ଆପଣଙ୍କ କେରିଅରରୁ 5G ବିକଳ୍ପଗୁଡ଼ିକ"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"ଆପଣଙ୍କ ଆପ ଅନୁଭୂତି ପାଇଁ ବିକଳ୍ପ ଦେଖିବାକୁ %sର ୱେବସାଇଟକୁ ଭିଜିଟ କରନ୍ତୁ"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"ବର୍ତ୍ତମାନ ନୁହେଁ"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"ପରିଚାଳନା କରନ୍ତୁ"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"ଏକ ପରଫରମାନ୍ସ ବୁଷ୍ଟ କିଣନ୍ତୁ।"</string>
diff --git a/packages/CarrierDefaultApp/res/values-pl/strings.xml b/packages/CarrierDefaultApp/res/values-pl/strings.xml
index 3ca001ba12e5..3f499a7828b4 100644
--- a/packages/CarrierDefaultApp/res/values-pl/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-pl/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Informacje od operatora"</string>
<string name="android_system_label" msgid="2797790869522345065">"Operator komórkowy"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Osiągnięto limit komórkowej transmisji danych"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Mobilna transmisja danych została wyłączona"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Na przykład strona logowania może nie należeć do wyświetlanej organizacji."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Kontynuuj mimo to w przeglądarce"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Zwiększenie wydajności"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Opcje 5G u Twojego operatora"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Opcje dotyczące korzystania z aplikacji znajdziesz na stronie firmy %s"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Nie teraz"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Zarządzaj"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Kup wzmocnienie wydajności"</string>
diff --git a/packages/CarrierDefaultApp/res/values-pt-rBR/strings.xml b/packages/CarrierDefaultApp/res/values-pt-rBR/strings.xml
index cb8329c77d2d..cb3bca94ac68 100644
--- a/packages/CarrierDefaultApp/res/values-pt-rBR/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-pt-rBR/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Comunicações da operadora"</string>
<string name="android_system_label" msgid="2797790869522345065">"Operadora de celular"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Os dados móveis se esgotaram"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Os dados móveis foram desativados"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Por exemplo, a página de login pode não pertencer à organização mostrada."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Continuar mesmo assim pelo navegador"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Aumento de performance"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Opções 5G da sua operadora"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Visite o site de %s para conferir opções da sua experiência no app"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Agora não"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Gerenciar"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Comprar um aumento de performance."</string>
diff --git a/packages/CarrierDefaultApp/res/values-pt-rPT/strings.xml b/packages/CarrierDefaultApp/res/values-pt-rPT/strings.xml
index 7e435cff2dd5..137a1c628402 100644
--- a/packages/CarrierDefaultApp/res/values-pt-rPT/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-pt-rPT/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Comunicações do operador"</string>
<string name="android_system_label" msgid="2797790869522345065">"Operador móvel"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Dados móveis esgotados"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Os seus dados móveis foram desativados"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Por exemplo, a página de início de sessão pode não pertencer à entidade apresentada."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Continuar mesmo assim através do navegador"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Aumento do desempenho"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Opções 5G do seu operador"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Visite o Website de %s para ver opções para a experiência da sua app"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Agora não"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Gerir"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Compre um aumento do desempenho."</string>
diff --git a/packages/CarrierDefaultApp/res/values-pt/strings.xml b/packages/CarrierDefaultApp/res/values-pt/strings.xml
index cb8329c77d2d..cb3bca94ac68 100644
--- a/packages/CarrierDefaultApp/res/values-pt/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-pt/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Comunicações da operadora"</string>
<string name="android_system_label" msgid="2797790869522345065">"Operadora de celular"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Os dados móveis se esgotaram"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Os dados móveis foram desativados"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Por exemplo, a página de login pode não pertencer à organização mostrada."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Continuar mesmo assim pelo navegador"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Aumento de performance"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Opções 5G da sua operadora"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Visite o site de %s para conferir opções da sua experiência no app"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Agora não"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Gerenciar"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Comprar um aumento de performance."</string>
diff --git a/packages/CarrierDefaultApp/res/values-ro/strings.xml b/packages/CarrierDefaultApp/res/values-ro/strings.xml
index 042d9ec407af..78b910e074f3 100644
--- a/packages/CarrierDefaultApp/res/values-ro/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ro/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Comunicări de la operator"</string>
<string name="android_system_label" msgid="2797790869522345065">"Operator de telefonie mobilă"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Datele mobile au expirat"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Datele mobile au fost dezactivate"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"De exemplu, este posibil ca pagina de conectare să nu aparțină organizației afișate."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Continuă oricum prin browser"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Boost de performanță"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Opțiuni 5G de la operator"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Accesează site-ul %s ca să vezi opțiunile pentru experiența ta cu aplicațiile"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Nu acum"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Gestionează"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Achiziționează un boost de performanță."</string>
diff --git a/packages/CarrierDefaultApp/res/values-ru/strings.xml b/packages/CarrierDefaultApp/res/values-ru/strings.xml
index 0c257967a9bb..936a6faa5fc0 100644
--- a/packages/CarrierDefaultApp/res/values-ru/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ru/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Оператор связи"</string>
<string name="android_system_label" msgid="2797790869522345065">"Оператор мобильной связи"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Мобильный трафик израсходован"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Мобильный Интернет отключен"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Например, страница входа в аккаунт может быть фиктивной."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Продолжить в браузере"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Повышение производительности"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Сеть 5G от оператора связи"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Посетите сайт оператора (%s), чтобы узнать, как улучшить производительность приложения."</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Не сейчас"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Настроить"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Повысьте производительность сети за плату."</string>
diff --git a/packages/CarrierDefaultApp/res/values-sk/strings.xml b/packages/CarrierDefaultApp/res/values-sk/strings.xml
index e14e0875b89f..77951cf0638b 100644
--- a/packages/CarrierDefaultApp/res/values-sk/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-sk/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Komunikácie s operátorom"</string>
<string name="android_system_label" msgid="2797790869522345065">"Poskytovateľ mobilných služieb"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobilné dáta sa minuli"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Vaše mobilné dáta boli deaktivované"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Napríklad prihlasovacia stránka nemusí patriť uvedenej organizácii."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Pokračovať pomocou prehliadača"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Zvýšenie výkonu"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Možnosti siete 5G od vášho operátora"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Ak chcete zistiť, aké sú možnosti prostredia v aplikácii, prejdite na web %s"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Teraz nie"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Spravovať"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Kúpte si zvýšenie výkonu."</string>
diff --git a/packages/CarrierDefaultApp/res/values-sl/strings.xml b/packages/CarrierDefaultApp/res/values-sl/strings.xml
index 21cb9443b819..bee2217895f8 100644
--- a/packages/CarrierDefaultApp/res/values-sl/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-sl/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Carrier Communications"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobilni operater"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Porabili ste vse mobilne podatke"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Prenos podatkov v mobilnih omrežjih je deaktiviran"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Stran za prijavo na primer morda ne pripada prikazani organizaciji."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Vseeno nadaljuj v brskalniku"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Ojačevalnik zmogljivosti"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Operaterjeve možnosti 5G"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Obiščite spletno mesto %s, da si ogledate možnosti izkušnje aplikacije."</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Ne zdaj"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Upravljanje"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Kupite ojačevalnik zmogljivosti."</string>
diff --git a/packages/CarrierDefaultApp/res/values-sq/strings.xml b/packages/CarrierDefaultApp/res/values-sq/strings.xml
index 9d501d958506..238921aaa8f0 100644
--- a/packages/CarrierDefaultApp/res/values-sq/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-sq/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Komunikimet e operatorit celular"</string>
<string name="android_system_label" msgid="2797790869522345065">"Operatori celular"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Të dhënat celulare kanë përfunduar"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Të dhënat celulare janë çaktivizuar"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"për shembull, faqja e identifikimit mund të mos i përkasë organizatës së shfaqur."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Vazhdo gjithsesi nëpërmjet shfletuesit"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Përforcimi i performancës"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Opsionet 5G nga operatori yt celular"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Vizito sajtin e uebit të %s për të parë opsione për përvojën tënde me aplikacionin"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Jo tani"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Menaxho"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Bli një paketë përforcimi të performancës."</string>
diff --git a/packages/CarrierDefaultApp/res/values-sr/strings.xml b/packages/CarrierDefaultApp/res/values-sr/strings.xml
index 257d53b56fc2..c99431b71840 100644
--- a/packages/CarrierDefaultApp/res/values-sr/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-sr/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Обавештења мобилног оператера"</string>
<string name="android_system_label" msgid="2797790869522345065">"Мобилни оператер"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Мобилни подаци су потрошени"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Мобилни подаци су деактивирани"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"На пример, страница за пријављивање можда не припада приказаној организацији."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Ипак настави преко прегледача"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Побољшање учинка"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G опције мобилног оператера"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Опције за доживљај апликације потражите на веб-сајту мобилног оператера %s"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Не сада"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Управљај"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Купите побољшање учинка."</string>
diff --git a/packages/CarrierDefaultApp/res/values-sv/strings.xml b/packages/CarrierDefaultApp/res/values-sv/strings.xml
index 1886ed9dc20f..d2e8d93be0b0 100644
--- a/packages/CarrierDefaultApp/res/values-sv/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-sv/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Carrier Communications"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobiloperatör"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Slut på mobildata"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Din mobildata har inaktiverats"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Det kan t.ex. hända att inloggningssidan inte tillhör den organisation som visas."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Fortsätt ändå via webbläsaren"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Prestandahöjning"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"5G-alternativ från operatören"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Se alternativ för appupplevelsen på webbplatsen för %s"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Inte nu"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Hantera"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Köp en prestandahöjning."</string>
diff --git a/packages/CarrierDefaultApp/res/values-sw/strings.xml b/packages/CarrierDefaultApp/res/values-sw/strings.xml
index fc3450f8d920..5dc79212b413 100644
--- a/packages/CarrierDefaultApp/res/values-sw/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-sw/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Mawasiliano ya Mtoa Huduma"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mtoa Huduma za Simu"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Data ya mtandao wa simu imekwisha"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Data yako ya mtandao wa simu imezimwa"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Kwa mfano, ukurasa wa kuingia katika akaunti unaweza usiwe unamilikiwa na shirika lililoonyeshwa."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Endelea hata hivyo kupitia kivinjari"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Kuongeza utendaji"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Chaguo za 5G kutoka kwa mtoa huduma wako"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Tembelea tovuti ya %s ili uone chaguo za hali ya matumizi ya programu yako"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Si sasa"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Dhibiti"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Nunua programu ya kuongeza utendaji."</string>
diff --git a/packages/CarrierDefaultApp/res/values-te/strings.xml b/packages/CarrierDefaultApp/res/values-te/strings.xml
index 944ee758f228..5f86828afd8b 100644
--- a/packages/CarrierDefaultApp/res/values-te/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-te/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"క్యారియర్ కమ్యూనికేషన్‌లు"</string>
<string name="android_system_label" msgid="2797790869522345065">"మొబైల్ క్యారియర్"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"మొబైల్ డేటాను పూర్తిగా ఉపయోగించారు"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"మీ మొబైల్ డేటా నిష్క్రియం చేయబడింది"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"ఉదాహరణకు, లాగిన్ పేజీ చూపిన సంస్థకు చెందినది కాకపోవచ్చు."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"ఏదేమైనా బ్రౌజర్ ద్వారా కొనసాగించండి"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"పనితీరు బూస్ట్"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"మీ క్యారియర్ నుండి 5G ఆప్షన్‌లు"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"మీ యాప్ అనుభవం కోసం ఆప్షన్‌లను చూడటానికి %s వెబ్‌సైట్‌కు వెళ్లండి"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"ఇప్పుడు కాదు"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"మేనేజ్ చేయండి"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"పనితీరు బూస్ట్‌ను కొనుగోలు చేయండి."</string>
diff --git a/packages/CarrierDefaultApp/res/values-th/strings.xml b/packages/CarrierDefaultApp/res/values-th/strings.xml
index e13ce44390a5..586ffd5a7421 100644
--- a/packages/CarrierDefaultApp/res/values-th/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-th/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"การสื่อสารจากผู้ให้บริการ"</string>
<string name="android_system_label" msgid="2797790869522345065">"ผู้ให้บริการเครือข่ายมือถือ"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"เน็ตมือถือหมดแล้ว"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"อินเทอร์เน็ตมือถือของคุณถูกปิดใช้งานแล้ว"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"ตัวอย่างเช่น หน้าเข้าสู่ระบบอาจไม่ใช่ขององค์กรที่แสดงไว้"</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"ดำเนินการต่อผ่านเบราว์เซอร์"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"การเพิ่มประสิทธิภาพ"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"ตัวเลือก 5G จากผู้ให้บริการ"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"ดูตัวเลือกต่างๆ สำหรับประสบการณ์การใช้งานแอปได้ที่เว็บไซต์ของ %s"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"ไว้ทีหลัง"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"จัดการ"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"ซื้อการเพิ่มประสิทธิภาพ"</string>
diff --git a/packages/CarrierDefaultApp/res/values-tl/strings.xml b/packages/CarrierDefaultApp/res/values-tl/strings.xml
index bdb09ac4dc59..a311a25199c9 100644
--- a/packages/CarrierDefaultApp/res/values-tl/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-tl/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Mga Pakikipag-ugnayan sa Carrier"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobile Carrier"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Naubos na ang mobile data"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Na-deactivate na ang iyong mobile data"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Halimbawa, maaaring hindi pag-aari ng ipinapakitang organisasyon ang page ng login."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Magpatuloy pa rin sa pamamagitan ng browser"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Pag-boost ng performance"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Mga opsyon sa 5G mula sa carrier mo"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Pumunta sa website ng %s para tingnan ang mga opsyon para sa iyong experience sa app"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Huwag muna"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Pamahalaan"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Bumili ng pang-boost ng performance."</string>
diff --git a/packages/CarrierDefaultApp/res/values-ur/strings.xml b/packages/CarrierDefaultApp/res/values-ur/strings.xml
index ef2677f4424d..0c7cdc5b912b 100644
--- a/packages/CarrierDefaultApp/res/values-ur/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ur/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"کیریئر سے متعلق مواصلات"</string>
<string name="android_system_label" msgid="2797790869522345065">"موبائل کیریئر"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"موبائل ڈیٹا ختم ہو چکا ہے"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"آپ کا موبائل ڈیٹا غیر فعال کر دیا گیا ہے"</string>
@@ -16,8 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"مثال کے طور پر ہو سکتا ہے کہ لاگ ان صفحہ دکھائی گئی تنظیم سے تعلق نہ رکھتا ہو۔"</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"براؤزر کے ذریعے بہرحال جاری رکھیں"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"پرفارمینس بوسٹ"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"‏آپ کے کیریئر سے 5G کے اختیارات"</string>
+ <!-- String.format failed for translation -->
<!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
<skip />
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"ابھی نہیں"</string>
diff --git a/packages/CarrierDefaultApp/res/values-uz/strings.xml b/packages/CarrierDefaultApp/res/values-uz/strings.xml
index dd489754e0d0..0f25e7ec789d 100644
--- a/packages/CarrierDefaultApp/res/values-uz/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-uz/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Operator aloqasi"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobil aloqa operatori"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobil internet tugab qoldi"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Mobil internet o‘chirildi"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Masalan, tizimga kirish sahifasi ko‘rsatilgan tashkilotga tegishli bo‘lmasligi mumkin."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Brauzerda davom ettirish"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Unumdorlikni kuchaytirish"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Operatordan 5G aloqa parametrlari"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Ilovadan foydalanish usullarini koʻrish uchun %s saytini oching"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Hozir emas"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Boshqarish"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Unumdorlikni kuchaytirish xizmatini xarid qiling."</string>
diff --git a/packages/CarrierDefaultApp/res/values-vi/strings.xml b/packages/CarrierDefaultApp/res/values-vi/strings.xml
index b01f95110490..d99aa22ad002 100644
--- a/packages/CarrierDefaultApp/res/values-vi/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-vi/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Nhà cung cấp dịch vụ truyền thông"</string>
<string name="android_system_label" msgid="2797790869522345065">"Nhà cung cấp dịch vụ di động"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Dữ liệu di động đã hết"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Dữ liệu di động của bạn đã bị hủy kích hoạt"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Ví dụ: trang đăng nhập có thể không thuộc về tổ chức được hiển thị."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Vẫn tiếp tục qua trình duyệt"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"Tăng hiệu suất"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Tuỳ chọn 5G từ nhà mạng của bạn"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Truy cập trang web của %s để xem các lựa chọn cho trải nghiệm trên ứng dụng"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Để sau"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Quản lý"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Mua gói tăng hiệu suất."</string>
diff --git a/packages/CarrierDefaultApp/res/values-zh-rCN/strings.xml b/packages/CarrierDefaultApp/res/values-zh-rCN/strings.xml
index e06cddb8797e..b05835deaf65 100644
--- a/packages/CarrierDefaultApp/res/values-zh-rCN/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-zh-rCN/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"运营商通信"</string>
<string name="android_system_label" msgid="2797790869522345065">"移动运营商"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"移动数据流量已用尽"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"您的移动数据网络已停用"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"例如,登录页面可能并不属于页面上显示的单位。"</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"仍然通过浏览器继续操作"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"性能提升方案"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"您的运营商提供的 5G 选项"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"访问%s的网站可查看您的应用体验选项"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"以后再说"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"管理"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"购买一份性能提升方案。"</string>
diff --git a/packages/CarrierDefaultApp/res/values-zu/strings.xml b/packages/CarrierDefaultApp/res/values-zu/strings.xml
index dc09c9d5ebb1..e624a193ab95 100644
--- a/packages/CarrierDefaultApp/res/values-zu/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-zu/strings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2809080280462257271) -->
- <skip />
+ <string name="app_name" msgid="2809080280462257271">"Inkampani Yezokuxhumana"</string>
<string name="android_system_label" msgid="2797790869522345065">"Inkampini yenethiwekhi yeselula"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Idatha yeselula iphelile"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Idatha yakho yeselula yenziwe yangasebenzi"</string>
@@ -16,10 +15,8 @@
<string name="ssl_error_example" msgid="6188711843183058764">"Isibonelo, ikhasi lokungena ngemvume kungenzeka lingelenhlangano ebonisiwe."</string>
<string name="ssl_error_continue" msgid="1138548463994095584">"Qhubeka noma kunjalo ngesiphequluli"</string>
<string name="performance_boost_notification_channel" msgid="3475440855635538592">"I-boost yokusebenza"</string>
- <!-- no translation found for performance_boost_notification_title (3126203390685781861) -->
- <skip />
- <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
- <skip />
+ <string name="performance_boost_notification_title" msgid="3126203390685781861">"Okukhethwa kukho kwe-5G okuvela kunkampani yakho yenethiwekhi"</string>
+ <string name="performance_boost_notification_detail" msgid="216569851036236346">"Vakashela iwebhusayithi ye-%s ukuze ubone okukhethwa kukho kolwazi lwakho lwe-app"</string>
<string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"Hhayi manje"</string>
<string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"Phatha"</string>
<string name="slice_purchase_app_label" msgid="7170191659233241166">"Thenga i-boost yokusebenza."</string>
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt
index 56324581c020..c27ac943bca7 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt
@@ -59,6 +59,8 @@ import com.android.credentialmanager.common.ui.SheetContainerCard
import com.android.credentialmanager.common.ui.SnackbarActionText
import com.android.credentialmanager.common.ui.HeadlineText
import com.android.credentialmanager.common.ui.CredentialListSectionHeader
+import com.android.credentialmanager.common.ui.HeadlineIcon
+import com.android.credentialmanager.common.ui.LargeLabelTextOnSurfaceVariant
import com.android.credentialmanager.common.ui.Snackbar
import com.android.credentialmanager.common.ui.setTransparentSystemBarsColor
import com.android.credentialmanager.common.ui.setBottomSheetSystemBarsColor
@@ -167,22 +169,42 @@ fun PrimarySelectionCard(
providerDisplayInfo.sortedUserNameToCredentialEntryList
val authenticationEntryList = providerDisplayInfo.authenticationEntryList
SheetContainerCard {
+ // When only one provider (not counting the remote-only provider) exists, display that
+ // provider's icon + name up top.
+ if (providerInfoList.size <= 2) { // It's only possible to be the single provider case
+ // if we are started with no more than 2 providers.
+ val nonRemoteProviderList = providerInfoList.filter(
+ { it.credentialEntryList.isNotEmpty() || it.authenticationEntryList.isNotEmpty() }
+ )
+ if (nonRemoteProviderList.size == 1) {
+ val providerInfo = nonRemoteProviderList.firstOrNull() // First should always work
+ // but just to be safe.
+ if (providerInfo != null) {
+ item {
+ HeadlineIcon(
+ bitmap = providerInfo.icon.toBitmap().asImageBitmap(),
+ tint = Color.Unspecified,
+ )
+ }
+ item { Divider(thickness = 4.dp, color = Color.Transparent) }
+ item { LargeLabelTextOnSurfaceVariant(text = providerInfo.displayName) }
+ item { Divider(thickness = 16.dp, color = Color.Transparent) }
+ }
+ }
+ }
+
+ val hasSingleEntry = (sortedUserNameToCredentialEntryList.size == 1 &&
+ authenticationEntryList.isEmpty()) || (sortedUserNameToCredentialEntryList.isEmpty() &&
+ authenticationEntryList.size == 1)
item {
HeadlineText(
text = stringResource(
- if (sortedUserNameToCredentialEntryList
- .size == 1 && authenticationEntryList.isEmpty()
- ) {
- if (sortedUserNameToCredentialEntryList.first()
- .sortedCredentialEntryList.first().credentialType
+ if (hasSingleEntry) {
+ if (sortedUserNameToCredentialEntryList.firstOrNull()
+ ?.sortedCredentialEntryList?.first()?.credentialType
== CredentialType.PASSKEY
) R.string.get_dialog_title_use_passkey_for
else R.string.get_dialog_title_use_sign_in_for
- } else if (
- sortedUserNameToCredentialEntryList
- .isEmpty() && authenticationEntryList.size == 1
- ) {
- R.string.get_dialog_title_use_sign_in_for
} else R.string.get_dialog_title_choose_sign_in_for,
requestDisplayInfo.appName
),
diff --git a/packages/CtsShim/Android.bp b/packages/CtsShim/Android.bp
index 31cd76079131..baafe7ba570c 100644
--- a/packages/CtsShim/Android.bp
+++ b/packages/CtsShim/Android.bp
@@ -44,6 +44,9 @@ android_app_import {
arm64: {
apk: "apk/arm/CtsShimPriv.apk",
},
+ riscv64: {
+ apk: "apk/riscv64/CtsShimPriv.apk",
+ },
x86: {
apk: "apk/x86/CtsShimPriv.apk",
},
@@ -82,6 +85,9 @@ android_app_import {
arm64: {
apk: "apk/arm/CtsShim.apk",
},
+ riscv64: {
+ apk: "apk/riscv64/CtsShim.apk",
+ },
x86: {
apk: "apk/x86/CtsShim.apk",
},
diff --git a/packages/SystemUI/res/drawable/ic_sysbar_back.xml b/packages/SystemUI/res/drawable/ic_sysbar_back.xml
index ee402622d52b..6c34655733ed 100644
--- a/packages/SystemUI/res/drawable/ic_sysbar_back.xml
+++ b/packages/SystemUI/res/drawable/ic_sysbar_back.xml
@@ -15,13 +15,13 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="28dp"
- android:height="28dp"
+ android:width="20dp"
+ android:height="20dp"
android:autoMirrored="true"
- android:viewportWidth="28"
- android:viewportHeight="28">
+ android:viewportWidth="20"
+ android:viewportHeight="20">
<path
android:fillColor="?attr/singleToneColor"
- android:pathData="M6.49,14.86c-0.66-0.39-0.66-1.34,0-1.73l6.02-3.53l5.89-3.46C19.11,5.73,20,6.26,20,7.1V14v6.9 c0,0.84-0.89,1.37-1.6,0.95l-5.89-3.46L6.49,14.86z" />
+ android:pathData="M15.5417 1.66669C15.1833 1.66669 14.8417 1.76669 14.5333 1.94169L3.21667 8.74169C2.775 9.00002 2.5 9.48335 2.5 10C2.5 10.5167 2.775 11 3.21667 11.2584L14.5333 18.05C14.8417 18.2334 15.1833 18.325 15.5417 18.325C16.625 18.325 17.5 17.45 17.5 16.3667V3.62502C17.5 2.54169 16.625 1.66669 15.5417 1.66669Z" />
</vector> \ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/ic_sysbar_home.xml b/packages/SystemUI/res/drawable/ic_sysbar_home.xml
index da239372791f..8b2a58a50224 100644
--- a/packages/SystemUI/res/drawable/ic_sysbar_home.xml
+++ b/packages/SystemUI/res/drawable/ic_sysbar_home.xml
@@ -15,12 +15,12 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="28dp"
- android:height="28dp"
- android:viewportWidth="28"
- android:viewportHeight="28">
+ android:width="20dp"
+ android:height="20dp"
+ android:viewportWidth="20"
+ android:viewportHeight="20">
<path
android:fillColor="?attr/singleToneColor"
- android:pathData="M 14 7 C 17.8659932488 7 21 10.1340067512 21 14 C 21 17.8659932488 17.8659932488 21 14 21 C 10.1340067512 21 7 17.8659932488 7 14 C 7 10.1340067512 10.1340067512 7 14 7 Z" />
+ android:pathData="M10.0001 18.3334C5.40008 18.3334 1.66675 14.6 1.66675 10C1.66675 5.40002 5.40008 1.66669 10.0001 1.66669C14.6001 1.66669 18.3334 5.40002 18.3334 10C18.3334 14.6 14.6001 18.3334 10.0001 18.3334Z" />
</vector> \ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/ic_sysbar_recent.xml b/packages/SystemUI/res/drawable/ic_sysbar_recent.xml
index 6b038d179568..6ff3ec3f47f2 100644
--- a/packages/SystemUI/res/drawable/ic_sysbar_recent.xml
+++ b/packages/SystemUI/res/drawable/ic_sysbar_recent.xml
@@ -15,12 +15,12 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="28dp"
- android:height="28dp"
- android:viewportWidth="28"
- android:viewportHeight="28">
+ android:width="20dp"
+ android:height="20dp"
+ android:viewportWidth="20"
+ android:viewportHeight="20">
<path
android:fillColor="?attr/singleToneColor"
- android:pathData="M19.9,21.5H8.1c-0.88,0-1.6-0.72-1.6-1.6V8.1c0-0.88,0.72-1.6,1.6-1.6h11.8c0.88,0,1.6,0.72,1.6,1.6v11.8 C21.5,20.78,20.78,21.5,19.9,21.5z" />
+ android:pathData="M4.47634 2.5H15.5241C16.6164 2.5 17.5002 3.38382 17.5002 4.4761V15.5239C17.5002 16.6162 16.6164 17.5 15.5241 17.5H4.47634C3.38407 17.5 2.50024 16.6162 2.50024 15.5239V4.4761C2.50024 3.38382 3.38407 2.5 4.47634 2.5Z" />
</vector> \ No newline at end of file
diff --git a/packages/SystemUI/res/layout/dream_overlay_container.xml b/packages/SystemUI/res/layout/dream_overlay_container.xml
index 8e83b4abe0dc..ae0a9374fd2c 100644
--- a/packages/SystemUI/res/layout/dream_overlay_container.xml
+++ b/packages/SystemUI/res/layout/dream_overlay_container.xml
@@ -25,11 +25,12 @@
android:id="@+id/dream_overlay_content"
android:layout_width="match_parent"
android:layout_height="0dp"
- android:layout_marginTop="@dimen/dream_overlay_container_margin_top"
- android:layout_marginEnd="@dimen/dream_overlay_container_margin_end"
- android:layout_marginBottom="@dimen/dream_overlay_container_margin_bottom"
- android:layout_marginStart="@dimen/dream_overlay_container_margin_start"
-
+ android:paddingTop="@dimen/dream_overlay_container_padding_top"
+ android:paddingEnd="@dimen/dream_overlay_container_padding_end"
+ android:paddingBottom="@dimen/dream_overlay_container_padding_bottom"
+ android:paddingStart="@dimen/dream_overlay_container_padding_start"
+ android:clipToPadding="false"
+ android:clipChildren="false"
app:layout_constraintTop_toBottomOf="@id/dream_overlay_status_bar"
app:layout_constraintBottom_toBottomOf="parent"
/>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index c4f152657efe..a52a2b7863bc 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1670,11 +1670,11 @@
.2
</item>
- <!-- The margins applied to the dream overlay container -->
- <dimen name="dream_overlay_container_margin_start">0dp</dimen>
- <dimen name="dream_overlay_container_margin_end">0dp</dimen>
- <dimen name="dream_overlay_container_margin_top">0dp</dimen>
- <dimen name="dream_overlay_container_margin_bottom">0dp</dimen>
+ <!-- The padding applied to the dream overlay container -->
+ <dimen name="dream_overlay_container_padding_start">0dp</dimen>
+ <dimen name="dream_overlay_container_padding_end">0dp</dimen>
+ <dimen name="dream_overlay_container_padding_top">0dp</dimen>
+ <dimen name="dream_overlay_container_padding_bottom">0dp</dimen>
<!-- The margin applied between complications -->
<dimen name="dream_overlay_complication_margin">0dp</dimen>
diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
index 0748bcbf020c..c28a40a91378 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
@@ -140,7 +140,8 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
private final Handler mHandler;
private final Lazy<NavigationBarController> mNavBarControllerLazy;
private final NotificationShadeWindowController mStatusBarWinController;
- private final Runnable mConnectionRunnable = this::internalConnectToCurrentUser;
+ private final Runnable mConnectionRunnable = () ->
+ internalConnectToCurrentUser("runnable: startConnectionToCurrentUser");
private final ComponentName mRecentsComponentName;
private final List<OverviewProxyListener> mConnectionCallbacks = new ArrayList<>();
private final Intent mQuickStepIntent;
@@ -406,7 +407,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
// Failed to link to death (process may have died between binding and connecting),
// just unbind the service for now and retry again
Log.e(TAG_OPS, "Lost connection to launcher service", e);
- disconnectFromLauncherService();
+ disconnectFromLauncherService("Lost connection to launcher service");
retryConnectionWithBackoff();
return;
}
@@ -501,7 +502,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
@Override
public void onUserChanged(int newUser, @NonNull Context userContext) {
mConnectionBackoffAttempts = 0;
- internalConnectToCurrentUser();
+ internalConnectToCurrentUser("User changed");
}
};
@@ -716,12 +717,12 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
if (mHandler.getLooper() != Looper.myLooper()) {
mHandler.post(mConnectionRunnable);
} else {
- internalConnectToCurrentUser();
+ internalConnectToCurrentUser("startConnectionToCurrentUser");
}
}
- private void internalConnectToCurrentUser() {
- disconnectFromLauncherService();
+ private void internalConnectToCurrentUser(String reason) {
+ disconnectFromLauncherService(reason);
// If user has not setup yet or already connected, do not try to connect
if (!isEnabled()) {
@@ -783,7 +784,9 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
return mOverviewProxy;
}
- private void disconnectFromLauncherService() {
+ private void disconnectFromLauncherService(String disconnectReason) {
+ Log.d(TAG_OPS, "disconnectFromLauncherService bound?: " + mBound +
+ " currentProxy: " + mOverviewProxy + " disconnectReason: " + disconnectReason);
if (mBound) {
// Always unbind the service (ie. if called through onNullBinding or onBindingDied)
mContext.unbindService(mOverviewServiceConnection);
@@ -1047,6 +1050,6 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
mContext.unregisterReceiver(mLauncherStateChangedReceiver);
mIsEnabled = false;
mHandler.removeCallbacks(mConnectionRunnable);
- disconnectFromLauncherService();
+ disconnectFromLauncherService("Shutdown for test");
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index 827a4c12006b..fbcc9ff583b3 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -2806,7 +2806,6 @@ public final class NotificationPanelViewController implements Dumpable {
public void setIsLaunchAnimationRunning(boolean running) {
boolean wasRunning = mIsLaunchAnimationRunning;
mIsLaunchAnimationRunning = running;
- mCentralSurfaces.updateIsKeyguard();
if (wasRunning != mIsLaunchAnimationRunning) {
mShadeExpansionStateManager.notifyLaunchingActivityChanged(running);
}
@@ -3867,10 +3866,6 @@ public final class NotificationPanelViewController implements Dumpable {
return mClosing || mIsLaunchAnimationRunning;
}
- public boolean isLaunchAnimationRunning() {
- return mIsLaunchAnimationRunning;
- }
-
public boolean isTracking() {
return mTracking;
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
index e7759df6e81b..156e4fd1889f 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
@@ -301,11 +301,9 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
}
private void applyKeyguardFlags(NotificationShadeWindowState state) {
- // Keyguard is visible if it's showing or if it's fading away (in which case we're animating
- // it out, but the wallpaper should remain visible as a backdrop for the animation);
- final boolean keyguardOrAodVisible = (state.keyguardShowing || state.keyguardFadingAway)
+ final boolean keyguardOrAod = state.keyguardShowing
|| (state.dozing && mDozeParameters.getAlwaysOn());
- if ((keyguardOrAodVisible && !state.mediaBackdropShowing && !state.lightRevealScrimOpaque)
+ if ((keyguardOrAod && !state.mediaBackdropShowing && !state.lightRevealScrimOpaque)
|| mKeyguardViewMediator.isAnimatingBetweenKeyguardAndSurfaceBehind()) {
// Show the wallpaper if we're on keyguard/AOD and the wallpaper is not occluded by a
// solid backdrop. Also, show it if we are currently animating between the
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
index 4065b98ab0c8..02055237c2b3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
@@ -110,6 +110,8 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
private final PipelineState mPipelineState = new PipelineState();
private final Map<String, GroupEntry> mGroups = new ArrayMap<>();
private Collection<NotificationEntry> mAllEntries = Collections.emptyList();
+ @Nullable
+ private Collection<NotificationEntry> mPendingEntries = null;
private int mIterationCount = 0;
private final List<NotifFilter> mNotifPreGroupFilters = new ArrayList<>();
@@ -317,11 +319,9 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
@Override
public void onBuildList(Collection<NotificationEntry> entries, String reason) {
Assert.isMainThread();
- mPipelineState.requireIsBefore(STATE_BUILD_STARTED);
-
+ mPendingEntries = new ArrayList<>(entries);
mLogger.logOnBuildList(reason);
- mAllEntries = entries;
- scheduleRebuild(/* reentrant = */ false);
+ rebuildListIfBefore(STATE_BUILD_STARTED);
}
};
@@ -398,6 +398,11 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
Trace.beginSection("ShadeListBuilder.buildList");
mPipelineState.requireIsBefore(STATE_BUILD_STARTED);
+ if (mPendingEntries != null) {
+ mAllEntries = mPendingEntries;
+ mPendingEntries = null;
+ }
+
if (!mNotifStabilityManager.isPipelineRunAllowed()) {
mLogger.logPipelineRunSuppressed();
Trace.endSection();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
index 2f404873dc7a..7f13bd83a4a8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -864,6 +864,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mStatusBarSignalPolicy = statusBarSignalPolicy;
mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager;
mFeatureFlags = featureFlags;
+ mIsShortcutListSearchEnabled = featureFlags.isEnabled(Flags.SHORTCUT_LIST_SEARCH_LAYOUT);
mKeyguardUnlockAnimationController = keyguardUnlockAnimationController;
mMainExecutor = delayableExecutor;
mMessageRouter = messageRouter;
@@ -872,7 +873,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mCameraLauncherLazy = cameraLauncherLazy;
mAlternateBouncerInteractor = alternateBouncerInteractor;
mUserTracker = userTracker;
- mIsShortcutListSearchEnabled = featureFlags.isEnabled(Flags.SHORTCUT_LIST_SEARCH_LAYOUT);
mLockscreenShadeTransitionController = lockscreenShadeTransitionController;
mStartingSurfaceOptional = startingSurfaceOptional;
@@ -1052,8 +1052,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
// The light reveal scrim should always be fully revealed by the time the keyguard
// is done going away. Double check that this is true.
if (!mKeyguardStateController.isKeyguardGoingAway()) {
- updateIsKeyguard();
-
if (mLightRevealScrim.getRevealAmount() != 1f) {
Log.e(TAG, "Keyguard is done going away, but someone left the light reveal "
+ "scrim at reveal amount: " + mLightRevealScrim.getRevealAmount());
@@ -2940,10 +2938,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
showKeyguardImpl();
}
} else {
- final boolean isLaunchingOrGoingAway =
- mNotificationPanelViewController.isLaunchAnimationRunning()
- || mKeyguardStateController.isKeyguardGoingAway();
-
// During folding a foldable device this might be called as a result of
// 'onScreenTurnedOff' call for the inner display.
// In this case:
@@ -2955,14 +2949,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
if (!mScreenOffAnimationController.isKeyguardHideDelayed()
// If we're animating occluded, there's an activity launching over the keyguard
// UI. Wait to hide it until after the animation concludes.
- && !mKeyguardViewMediator.isOccludeAnimationPlaying()
- // If we're occluded, but playing an animation (launch or going away animations)
- // the keyguard is visible behind the animation.
- && !(mKeyguardStateController.isOccluded() && isLaunchingOrGoingAway)) {
- // If we're going away and occluded, it means we are launching over the
- // unsecured keyguard, which will subsequently go away. Wait to hide it until
- // after the animation concludes to avoid the lockscreen UI changing into the
- // shade UI behind the launch animation.
+ && !mKeyguardViewMediator.isOccludeAnimationPlaying()) {
return hideKeyguardImpl(forceStateChange);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt
index 52237605caf9..174298ab6490 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt
@@ -26,6 +26,7 @@ import com.android.systemui.statusbar.phone.StatusBarLocation
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
+import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel.Companion.viewModelForLocation
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel
import javax.inject.Inject
import kotlinx.coroutines.flow.collect
@@ -60,11 +61,7 @@ constructor(
location: StatusBarLocation,
): LocationBasedWifiViewModel {
val locationViewModel =
- when (location) {
- StatusBarLocation.HOME -> wifiViewModel.home
- StatusBarLocation.KEYGUARD -> wifiViewModel.keyguard
- StatusBarLocation.QS -> wifiViewModel.qs
- }
+ viewModelForLocation(wifiViewModel, statusBarPipelineFlags, location)
statusBarIconGroup.repeatWhenAttached {
repeatOnLifecycle(Lifecycle.State.STARTED) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/HomeWifiViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/HomeWifiViewModel.kt
deleted file mode 100644
index a29c9b94e6b8..000000000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/HomeWifiViewModel.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
-
-import android.graphics.Color
-import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
-import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.StateFlow
-
-/**
- * A view model for the wifi icon shown on the "home" page (aka, when the device is unlocked and not
- * showing the shade, so the user is on the home-screen, or in an app).
- */
-class HomeWifiViewModel(
- statusBarPipelineFlags: StatusBarPipelineFlags,
- wifiIcon: StateFlow<WifiIcon>,
- isActivityInViewVisible: Flow<Boolean>,
- isActivityOutViewVisible: Flow<Boolean>,
- isActivityContainerVisible: Flow<Boolean>,
- isAirplaneSpacerVisible: Flow<Boolean>,
-) :
- LocationBasedWifiViewModel(
- statusBarPipelineFlags,
- debugTint = Color.CYAN,
- wifiIcon,
- isActivityInViewVisible,
- isActivityOutViewVisible,
- isActivityContainerVisible,
- isAirplaneSpacerVisible,
- )
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/KeyguardWifiViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/KeyguardWifiViewModel.kt
deleted file mode 100644
index 1e190fb898ff..000000000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/KeyguardWifiViewModel.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
-
-import android.graphics.Color
-import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
-import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.StateFlow
-
-/** A view model for the wifi icon shown on keyguard (lockscreen). */
-class KeyguardWifiViewModel(
- statusBarPipelineFlags: StatusBarPipelineFlags,
- wifiIcon: StateFlow<WifiIcon>,
- isActivityInViewVisible: Flow<Boolean>,
- isActivityOutViewVisible: Flow<Boolean>,
- isActivityContainerVisible: Flow<Boolean>,
- isAirplaneSpacerVisible: Flow<Boolean>,
-) :
- LocationBasedWifiViewModel(
- statusBarPipelineFlags,
- debugTint = Color.MAGENTA,
- wifiIcon,
- isActivityInViewVisible,
- isActivityOutViewVisible,
- isActivityContainerVisible,
- isAirplaneSpacerVisible,
- )
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/LocationBasedWifiViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/LocationBasedWifiViewModel.kt
index 02c3a652cc8d..b731a41d442b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/LocationBasedWifiViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/LocationBasedWifiViewModel.kt
@@ -17,10 +17,8 @@
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
import android.graphics.Color
+import com.android.systemui.statusbar.phone.StatusBarLocation
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
-import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.StateFlow
/**
* A view model for a wifi icon in a specific location. This allows us to control parameters that
@@ -29,24 +27,10 @@ import kotlinx.coroutines.flow.StateFlow
* Must be subclassed for each distinct location.
*/
abstract class LocationBasedWifiViewModel(
+ val commonImpl: WifiViewModelCommon,
statusBarPipelineFlags: StatusBarPipelineFlags,
debugTint: Int,
-
- /** The wifi icon that should be displayed. */
- val wifiIcon: StateFlow<WifiIcon>,
-
- /** True if the activity in view should be visible. */
- val isActivityInViewVisible: Flow<Boolean>,
-
- /** True if the activity out view should be visible. */
- val isActivityOutViewVisible: Flow<Boolean>,
-
- /** True if the activity container view should be visible. */
- val isActivityContainerVisible: Flow<Boolean>,
-
- /** True if the airplane spacer view should be visible. */
- val isAirplaneSpacerVisible: Flow<Boolean>,
-) {
+) : WifiViewModelCommon by commonImpl {
val useDebugColoring: Boolean = statusBarPipelineFlags.useDebugColoring()
val defaultColor: Int =
@@ -55,4 +39,48 @@ abstract class LocationBasedWifiViewModel(
} else {
Color.WHITE
}
+
+ companion object {
+ /**
+ * Returns a new instance of [LocationBasedWifiViewModel] that's specific to the given
+ * [location].
+ */
+ fun viewModelForLocation(
+ commonImpl: WifiViewModelCommon,
+ flags: StatusBarPipelineFlags,
+ location: StatusBarLocation,
+ ): LocationBasedWifiViewModel =
+ when (location) {
+ StatusBarLocation.HOME -> HomeWifiViewModel(commonImpl, flags)
+ StatusBarLocation.KEYGUARD -> KeyguardWifiViewModel(commonImpl, flags)
+ StatusBarLocation.QS -> QsWifiViewModel(commonImpl, flags)
+ }
+ }
}
+
+/**
+ * A view model for the wifi icon shown on the "home" page (aka, when the device is unlocked and not
+ * showing the shade, so the user is on the home-screen, or in an app).
+ */
+class HomeWifiViewModel(
+ commonImpl: WifiViewModelCommon,
+ statusBarPipelineFlags: StatusBarPipelineFlags,
+) :
+ WifiViewModelCommon,
+ LocationBasedWifiViewModel(commonImpl, statusBarPipelineFlags, debugTint = Color.CYAN)
+
+/** A view model for the wifi icon shown on keyguard (lockscreen). */
+class KeyguardWifiViewModel(
+ commonImpl: WifiViewModelCommon,
+ statusBarPipelineFlags: StatusBarPipelineFlags,
+) :
+ WifiViewModelCommon,
+ LocationBasedWifiViewModel(commonImpl, statusBarPipelineFlags, debugTint = Color.MAGENTA)
+
+/** A view model for the wifi icon shown in quick settings (when the shade is pulled down). */
+class QsWifiViewModel(
+ commonImpl: WifiViewModelCommon,
+ statusBarPipelineFlags: StatusBarPipelineFlags,
+) :
+ WifiViewModelCommon,
+ LocationBasedWifiViewModel(commonImpl, statusBarPipelineFlags, debugTint = Color.GREEN)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/QsWifiViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/QsWifiViewModel.kt
deleted file mode 100644
index 18e62b284cb9..000000000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/QsWifiViewModel.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
-
-import android.graphics.Color
-import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
-import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.StateFlow
-
-/** A view model for the wifi icon shown in quick settings (when the shade is pulled down). */
-class QsWifiViewModel(
- statusBarPipelineFlags: StatusBarPipelineFlags,
- wifiIcon: StateFlow<WifiIcon>,
- isActivityInViewVisible: Flow<Boolean>,
- isActivityOutViewVisible: Flow<Boolean>,
- isActivityContainerVisible: Flow<Boolean>,
- isAirplaneSpacerVisible: Flow<Boolean>,
-) :
- LocationBasedWifiViewModel(
- statusBarPipelineFlags,
- debugTint = Color.GREEN,
- wifiIcon,
- isActivityInViewVisible,
- isActivityOutViewVisible,
- isActivityContainerVisible,
- isAirplaneSpacerVisible,
- )
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt
index 4b24e7a390e4..c9a0786acc72 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt
@@ -72,7 +72,7 @@ constructor(
@Application private val scope: CoroutineScope,
statusBarPipelineFlags: StatusBarPipelineFlags,
wifiConstants: WifiConstants,
-) {
+) : WifiViewModelCommon {
/** Returns the icon to use based on the given network. */
private fun WifiNetworkModel.icon(): WifiIcon {
return when (this) {
@@ -106,8 +106,7 @@ constructor(
}
}
- /** The wifi icon that should be displayed. */
- private val wifiIcon: StateFlow<WifiIcon> =
+ override val wifiIcon: StateFlow<WifiIcon> =
combine(
interactor.isEnabled,
interactor.isDefault,
@@ -162,17 +161,17 @@ constructor(
.stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = default)
}
- private val isActivityInViewVisible: Flow<Boolean> =
+ override val isActivityInViewVisible: Flow<Boolean> =
activity
.map { it.hasActivityIn }
.stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = false)
- private val isActivityOutViewVisible: Flow<Boolean> =
+ override val isActivityOutViewVisible: Flow<Boolean> =
activity
.map { it.hasActivityOut }
.stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = false)
- private val isActivityContainerVisible: Flow<Boolean> =
+ override val isActivityContainerVisible: Flow<Boolean> =
combine(isActivityInViewVisible, isActivityOutViewVisible) { activityIn, activityOut ->
activityIn || activityOut
}
@@ -181,42 +180,9 @@ constructor(
// TODO(b/238425913): It isn't ideal for the wifi icon to need to know about whether the
// airplane icon is visible. Instead, we should have a parent StatusBarSystemIconsViewModel
// that appropriately knows about both icons and sets the padding appropriately.
- private val isAirplaneSpacerVisible: Flow<Boolean> =
+ override val isAirplaneSpacerVisible: Flow<Boolean> =
airplaneModeViewModel.isAirplaneModeIconVisible
- /** A view model for the status bar on the home screen. */
- val home: HomeWifiViewModel =
- HomeWifiViewModel(
- statusBarPipelineFlags,
- wifiIcon,
- isActivityInViewVisible,
- isActivityOutViewVisible,
- isActivityContainerVisible,
- isAirplaneSpacerVisible,
- )
-
- /** A view model for the status bar on keyguard. */
- val keyguard: KeyguardWifiViewModel =
- KeyguardWifiViewModel(
- statusBarPipelineFlags,
- wifiIcon,
- isActivityInViewVisible,
- isActivityOutViewVisible,
- isActivityContainerVisible,
- isAirplaneSpacerVisible,
- )
-
- /** A view model for the status bar in quick settings. */
- val qs: QsWifiViewModel =
- QsWifiViewModel(
- statusBarPipelineFlags,
- wifiIcon,
- isActivityInViewVisible,
- isActivityOutViewVisible,
- isActivityContainerVisible,
- isAirplaneSpacerVisible,
- )
-
companion object {
@StringRes
@VisibleForTesting
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelCommon.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelCommon.kt
new file mode 100644
index 000000000000..eccf02397a82
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelCommon.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
+
+import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.StateFlow
+
+/**
+ * A common view model interface that can be used for delegation between [WifiViewModel] and
+ * [LocationBasedWifiViewModel].
+ */
+interface WifiViewModelCommon {
+ /** The wifi icon that should be displayed. */
+ val wifiIcon: StateFlow<WifiIcon>
+
+ /** True if the activity in view should be visible. */
+ val isActivityInViewVisible: Flow<Boolean>
+
+ /** True if the activity out view should be visible. */
+ val isActivityOutViewVisible: Flow<Boolean>
+
+ /** True if the activity container view should be visible. */
+ val isActivityContainerVisible: Flow<Boolean>
+
+ /** True if the airplane spacer view should be visible. */
+ val isAirplaneSpacerVisible: Flow<Boolean>
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
index dd7929771bb2..526dc8d150fe 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
@@ -223,16 +223,6 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
}
@Test
- public void attach_fadingAway_wallpaperVisible() {
- clearInvocations(mWindowManager);
- mNotificationShadeWindowController.attach();
- mNotificationShadeWindowController.setKeyguardFadingAway(true);
-
- verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
- assertThat((mLayoutParameters.getValue().flags & FLAG_SHOW_WALLPAPER) != 0).isTrue();
- }
-
- @Test
public void setBackgroundBlurRadius_expandedWithBlurs() {
mNotificationShadeWindowController.setBackgroundBlurRadius(10);
verify(mNotificationShadeWindowView).setVisibility(eq(View.VISIBLE));
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
index 1aba1fc37b64..7db219719bf0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
@@ -1342,18 +1342,6 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
}
@Test
- public void keyguard_notHidden_ifGoingAwayAndOccluded() {
- setKeyguardShowingAndOccluded(true /* showing */, false /* occluded */);
-
- when(mKeyguardStateController.isKeyguardGoingAway()).thenReturn(true);
- when(mKeyguardStateController.isOccluded()).thenReturn(true);
-
- mCentralSurfaces.updateIsKeyguard(false);
-
- verify(mStatusBarStateController, never()).setState(eq(SHADE), anyBoolean());
- }
-
- @Test
public void frpLockedDevice_shadeDisabled() {
when(mDeviceProvisionedController.isFrpActive()).thenReturn(true);
when(mDozeServiceHost.isPulsing()).thenReturn(true);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt
index 64810d2a9308..5c19108cc17e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt
@@ -30,6 +30,7 @@ import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.statusbar.StatusBarIconView.STATE_DOT
import com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN
import com.android.systemui.statusbar.StatusBarIconView.STATE_ICON
+import com.android.systemui.statusbar.phone.StatusBarLocation
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
@@ -43,6 +44,7 @@ import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiIntera
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
+import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel.Companion.viewModelForLocation
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
@@ -93,18 +95,23 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
tableLogBuffer,
scope,
)
- viewModel =
+ val viewModelCommon =
WifiViewModel(
- airplaneModeViewModel,
- connectivityConstants,
- context,
- tableLogBuffer,
- interactor,
- scope,
- statusBarPipelineFlags,
- wifiConstants,
- )
- .home
+ airplaneModeViewModel,
+ connectivityConstants,
+ context,
+ tableLogBuffer,
+ interactor,
+ scope,
+ statusBarPipelineFlags,
+ wifiConstants,
+ )
+ viewModel =
+ viewModelForLocation(
+ viewModelCommon,
+ statusBarPipelineFlags,
+ StatusBarLocation.HOME,
+ )
}
// Note: The following tests are more like integration tests, since they stand up a full
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt
index 1c71f8ba0aa3..ffe990bf1cf6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt
@@ -130,7 +130,7 @@ internal class WifiViewModelIconParameterizedTest(private val testCase: TestCase
wifiConstants,
)
- val iconFlow = underTest.home.wifiIcon
+ val iconFlow = underTest.wifiIcon
val job = iconFlow.launchIn(this)
// WHEN we set a certain network
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt
index 7a62cb8a377d..802e360797a4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt
@@ -19,6 +19,7 @@ package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.log.table.TableLogBuffer
+import com.android.systemui.statusbar.phone.StatusBarLocation
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
@@ -34,6 +35,7 @@ import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiIntera
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
+import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel.Companion.viewModelForLocation
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -105,15 +107,20 @@ class WifiViewModelTest : SysuiTestCase() {
@Test
fun wifiIcon_allLocationViewModelsReceiveSameData() =
runBlocking(IMMEDIATE) {
+ val home =
+ viewModelForLocation(underTest, statusBarPipelineFlags, StatusBarLocation.HOME)
+ val keyguard =
+ viewModelForLocation(underTest, statusBarPipelineFlags, StatusBarLocation.KEYGUARD)
+ val qs = viewModelForLocation(underTest, statusBarPipelineFlags, StatusBarLocation.QS)
+
var latestHome: WifiIcon? = null
- val jobHome = underTest.home.wifiIcon.onEach { latestHome = it }.launchIn(this)
+ val jobHome = home.wifiIcon.onEach { latestHome = it }.launchIn(this)
var latestKeyguard: WifiIcon? = null
- val jobKeyguard =
- underTest.keyguard.wifiIcon.onEach { latestKeyguard = it }.launchIn(this)
+ val jobKeyguard = keyguard.wifiIcon.onEach { latestKeyguard = it }.launchIn(this)
var latestQs: WifiIcon? = null
- val jobQs = underTest.qs.wifiIcon.onEach { latestQs = it }.launchIn(this)
+ val jobQs = qs.wifiIcon.onEach { latestQs = it }.launchIn(this)
wifiRepository.setWifiNetwork(
WifiNetworkModel.Active(NETWORK_ID, isValidated = true, level = 1)
@@ -138,15 +145,15 @@ class WifiViewModelTest : SysuiTestCase() {
var activityIn: Boolean? = null
val activityInJob =
- underTest.home.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this)
+ underTest.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this)
var activityOut: Boolean? = null
val activityOutJob =
- underTest.home.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this)
+ underTest.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this)
var activityContainer: Boolean? = null
val activityContainerJob =
- underTest.home.isActivityContainerVisible
+ underTest.isActivityContainerVisible
.onEach { activityContainer = it }
.launchIn(this)
@@ -169,15 +176,15 @@ class WifiViewModelTest : SysuiTestCase() {
var activityIn: Boolean? = null
val activityInJob =
- underTest.home.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this)
+ underTest.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this)
var activityOut: Boolean? = null
val activityOutJob =
- underTest.home.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this)
+ underTest.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this)
var activityContainer: Boolean? = null
val activityContainerJob =
- underTest.home.isActivityContainerVisible
+ underTest.isActivityContainerVisible
.onEach { activityContainer = it }
.launchIn(this)
@@ -208,15 +215,15 @@ class WifiViewModelTest : SysuiTestCase() {
var activityIn: Boolean? = null
val activityInJob =
- underTest.home.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this)
+ underTest.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this)
var activityOut: Boolean? = null
val activityOutJob =
- underTest.home.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this)
+ underTest.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this)
var activityContainer: Boolean? = null
val activityContainerJob =
- underTest.home.isActivityContainerVisible
+ underTest.isActivityContainerVisible
.onEach { activityContainer = it }
.launchIn(this)
@@ -242,18 +249,21 @@ class WifiViewModelTest : SysuiTestCase() {
createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
+ val home =
+ viewModelForLocation(underTest, statusBarPipelineFlags, StatusBarLocation.HOME)
+ val keyguard =
+ viewModelForLocation(underTest, statusBarPipelineFlags, StatusBarLocation.KEYGUARD)
+ val qs = viewModelForLocation(underTest, statusBarPipelineFlags, StatusBarLocation.QS)
+
var latestHome: Boolean? = null
- val jobHome =
- underTest.home.isActivityInViewVisible.onEach { latestHome = it }.launchIn(this)
+ val jobHome = home.isActivityInViewVisible.onEach { latestHome = it }.launchIn(this)
var latestKeyguard: Boolean? = null
val jobKeyguard =
- underTest.keyguard.isActivityInViewVisible
- .onEach { latestKeyguard = it }
- .launchIn(this)
+ keyguard.isActivityInViewVisible.onEach { latestKeyguard = it }.launchIn(this)
var latestQs: Boolean? = null
- val jobQs = underTest.qs.isActivityInViewVisible.onEach { latestQs = it }.launchIn(this)
+ val jobQs = qs.isActivityInViewVisible.onEach { latestQs = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
wifiRepository.setWifiActivity(activity)
@@ -276,7 +286,7 @@ class WifiViewModelTest : SysuiTestCase() {
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null
- val job = underTest.home.isActivityInViewVisible.onEach { latest = it }.launchIn(this)
+ val job = underTest.isActivityInViewVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
wifiRepository.setWifiActivity(activity)
@@ -295,7 +305,7 @@ class WifiViewModelTest : SysuiTestCase() {
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null
- val job = underTest.home.isActivityInViewVisible.onEach { latest = it }.launchIn(this)
+ val job = underTest.isActivityInViewVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
wifiRepository.setWifiActivity(activity)
@@ -314,7 +324,7 @@ class WifiViewModelTest : SysuiTestCase() {
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null
- val job = underTest.home.isActivityOutViewVisible.onEach { latest = it }.launchIn(this)
+ val job = underTest.isActivityOutViewVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
wifiRepository.setWifiActivity(activity)
@@ -333,7 +343,7 @@ class WifiViewModelTest : SysuiTestCase() {
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null
- val job = underTest.home.isActivityOutViewVisible.onEach { latest = it }.launchIn(this)
+ val job = underTest.isActivityOutViewVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
wifiRepository.setWifiActivity(activity)
@@ -352,8 +362,7 @@ class WifiViewModelTest : SysuiTestCase() {
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null
- val job =
- underTest.home.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
+ val job = underTest.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
wifiRepository.setWifiActivity(activity)
@@ -372,8 +381,7 @@ class WifiViewModelTest : SysuiTestCase() {
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null
- val job =
- underTest.home.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
+ val job = underTest.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
wifiRepository.setWifiActivity(activity)
@@ -392,8 +400,7 @@ class WifiViewModelTest : SysuiTestCase() {
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null
- val job =
- underTest.home.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
+ val job = underTest.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
wifiRepository.setWifiActivity(activity)
@@ -412,8 +419,7 @@ class WifiViewModelTest : SysuiTestCase() {
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null
- val job =
- underTest.home.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
+ val job = underTest.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = false)
wifiRepository.setWifiActivity(activity)
@@ -428,7 +434,7 @@ class WifiViewModelTest : SysuiTestCase() {
fun airplaneSpacer_notAirplaneMode_outputsFalse() =
runBlocking(IMMEDIATE) {
var latest: Boolean? = null
- val job = underTest.qs.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
+ val job = underTest.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
airplaneModeRepository.setIsAirplaneMode(false)
yield()
@@ -442,7 +448,7 @@ class WifiViewModelTest : SysuiTestCase() {
fun airplaneSpacer_airplaneForceHidden_outputsFalse() =
runBlocking(IMMEDIATE) {
var latest: Boolean? = null
- val job = underTest.qs.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
+ val job = underTest.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
airplaneModeRepository.setIsAirplaneMode(true)
connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.AIRPLANE))
@@ -457,7 +463,7 @@ class WifiViewModelTest : SysuiTestCase() {
fun airplaneSpacer_airplaneIconVisible_outputsTrue() =
runBlocking(IMMEDIATE) {
var latest: Boolean? = null
- val job = underTest.qs.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
+ val job = underTest.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
airplaneModeRepository.setIsAirplaneMode(true)
yield()
diff --git a/services/companion/java/com/android/server/companion/securechannel/SecureChannel.java b/services/companion/java/com/android/server/companion/securechannel/SecureChannel.java
index 05b6022ce569..a8519e388525 100644
--- a/services/companion/java/com/android/server/companion/securechannel/SecureChannel.java
+++ b/services/companion/java/com/android/server/companion/securechannel/SecureChannel.java
@@ -128,6 +128,9 @@ public class SecureChannel {
* Start listening for incoming messages.
*/
public void start() {
+ if (DEBUG) {
+ Slog.d(TAG, "Starting secure channel.");
+ }
new Thread(() -> {
try {
// 1. Wait for the next handshake message and process it.
@@ -151,14 +154,14 @@ public class SecureChannel {
// TODO: Handle different types errors.
Slog.e(TAG, "Secure channel encountered an error.", e);
- stop();
+ close();
mCallback.onError(e);
}
}).start();
}
/**
- * Stop listening to incoming messages and close the channel.
+ * Stop listening to incoming messages.
*/
public void stop() {
if (DEBUG) {
@@ -166,7 +169,17 @@ public class SecureChannel {
}
mStopped = true;
mInProgress = false;
+ }
+
+ /**
+ * Stop listening to incoming messages and close the channel.
+ */
+ public void close() {
+ stop();
+ if (DEBUG) {
+ Slog.d(TAG, "Closing secure channel.");
+ }
IoUtils.closeQuietly(mInput);
IoUtils.closeQuietly(mOutput);
KeyStoreUtils.cleanUp(mAlias);
@@ -240,60 +253,64 @@ public class SecureChannel {
if (isSecured()) {
Slog.d(TAG, "Waiting to receive next secure message.");
} else {
- Slog.d(TAG, "Waiting to receive next message.");
+ Slog.d(TAG, "Waiting to receive next " + expected + " message.");
}
}
// TODO: Handle message timeout
- // Header is _not_ encrypted, but will be covered by MAC
- final byte[] headerBytes = new byte[HEADER_LENGTH];
- Streams.readFully(mInput, headerBytes);
- final ByteBuffer header = ByteBuffer.wrap(headerBytes);
- final int version = header.getInt();
- final short type = header.getShort();
+ synchronized (mInput) {
+ // Header is _not_ encrypted, but will be covered by MAC
+ final byte[] headerBytes = new byte[HEADER_LENGTH];
+ Streams.readFully(mInput, headerBytes);
+ final ByteBuffer header = ByteBuffer.wrap(headerBytes);
+ final int version = header.getInt();
+ final short type = header.getShort();
+
+ if (version != VERSION) {
+ Streams.skipByReading(mInput, Long.MAX_VALUE);
+ throw new SecureChannelException("Secure channel version mismatch. "
+ + "Currently on version " + VERSION + ". Skipping rest of data.");
+ }
- if (version != VERSION) {
- Streams.skipByReading(mInput, Long.MAX_VALUE);
- throw new SecureChannelException("Secure channel version mismatch. "
- + "Currently on version " + VERSION + ". Skipping rest of data.");
- }
+ if (type != expected.mValue) {
+ Streams.skipByReading(mInput, Long.MAX_VALUE);
+ throw new SecureChannelException(
+ "Unexpected message type. Expected " + expected.name()
+ + "; Found " + MessageType.from(type).name()
+ + ". Skipping rest of data.");
+ }
- if (type != expected.mValue) {
- Streams.skipByReading(mInput, Long.MAX_VALUE);
- throw new SecureChannelException("Unexpected message type. Expected " + expected.name()
- + "; Found " + MessageType.from(type).name() + ". Skipping rest of data.");
- }
+ // Length of attached data is prepended as plaintext
+ final byte[] lengthBytes = new byte[4];
+ Streams.readFully(mInput, lengthBytes);
+ final int length = ByteBuffer.wrap(lengthBytes).getInt();
- // Length of attached data is prepended as plaintext
- final byte[] lengthBytes = new byte[4];
- Streams.readFully(mInput, lengthBytes);
- final int length = ByteBuffer.wrap(lengthBytes).getInt();
+ // Read data based on the length
+ final byte[] data;
+ try {
+ data = new byte[length];
+ } catch (OutOfMemoryError error) {
+ throw new SecureChannelException("Payload is too large.", error);
+ }
- // Read data based on the length
- final byte[] data;
- try {
- data = new byte[length];
- } catch (OutOfMemoryError error) {
- throw new SecureChannelException("Payload is too large.", error);
- }
+ Streams.readFully(mInput, data);
+ if (!MessageType.shouldEncrypt(expected)) {
+ return data;
+ }
- Streams.readFully(mInput, data);
- if (!MessageType.shouldEncrypt(expected)) {
- return data;
+ return mConnectionContext.decodeMessageFromPeer(data, headerBytes);
}
-
- return mConnectionContext.decodeMessageFromPeer(data, headerBytes);
}
- private void sendMessage(MessageType messageType, byte[] payload)
+ private void sendMessage(MessageType messageType, final byte[] payload)
throws IOException, BadHandleException {
synchronized (mOutput) {
- byte[] header = ByteBuffer.allocate(HEADER_LENGTH)
+ final byte[] header = ByteBuffer.allocate(HEADER_LENGTH)
.putInt(VERSION)
.putShort(messageType.mValue)
.array();
- byte[] data = MessageType.shouldEncrypt(messageType)
+ final byte[] data = MessageType.shouldEncrypt(messageType)
? mConnectionContext.encodeMessageToPeer(payload, header)
: payload;
mOutput.write(header);
diff --git a/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java b/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java
index 539020519f84..092eb4ea9014 100644
--- a/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java
+++ b/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java
@@ -46,6 +46,7 @@ import com.android.server.companion.AssociationStore;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@@ -296,26 +297,32 @@ public class CompanionTransportManager {
Slog.i(TAG, "Remote device SDK: " + remoteSdk + ", release:" + new String(remoteRelease));
Transport transport = mTempTransport;
- mTempTransport = null;
+ mTempTransport.stop();
int sdk = Build.VERSION.SDK_INT;
String release = Build.VERSION.RELEASE;
- if (remoteSdk == NON_ANDROID) {
+ if (Build.isDebuggable()) {
+ // Debug builds cannot pass attestation verification. Use hardcoded key instead.
+ Slog.d(TAG, "Creating an unauthenticated secure channel");
+ final byte[] testKey = "CDM".getBytes(StandardCharsets.UTF_8);
+ transport = new SecureTransport(transport.getAssociationId(), transport.getFd(),
+ mContext, testKey, null);
+ } else if (remoteSdk == NON_ANDROID) {
// TODO: pass in a real preSharedKey
transport = new SecureTransport(transport.getAssociationId(), transport.getFd(),
- mContext, null, null);
- } else if (sdk < SECURE_CHANNEL_AVAILABLE_SDK
- || remoteSdk < SECURE_CHANNEL_AVAILABLE_SDK) {
- // TODO: depending on the release version, either
- // 1) using a RawTransport for old T versions
- // 2) or an Ukey2 handshaked transport for UKey2 backported T versions
- } else {
+ mContext, new byte[0], null);
+ } else if (sdk >= SECURE_CHANNEL_AVAILABLE_SDK
+ && remoteSdk >= SECURE_CHANNEL_AVAILABLE_SDK) {
Slog.i(TAG, "Creating a secure channel");
transport = new SecureTransport(transport.getAssociationId(), transport.getFd(),
mContext);
- addMessageListenersToTransport(transport);
- transport.start();
+ } else {
+ // TODO: depending on the release version, either
+ // 1) using a RawTransport for old T versions
+ // 2) or an Ukey2 handshaked transport for UKey2 backported T versions
}
+ addMessageListenersToTransport(transport);
+ transport.start();
mTransports.put(transport.getAssociationId(), transport);
// Doesn't need to notifyTransportsChanged here, it'll be done in attachSystemDataTransport
}
diff --git a/services/companion/java/com/android/server/companion/transport/RawTransport.java b/services/companion/java/com/android/server/companion/transport/RawTransport.java
index 4060f6efe0ca..41589018b149 100644
--- a/services/companion/java/com/android/server/companion/transport/RawTransport.java
+++ b/services/companion/java/com/android/server/companion/transport/RawTransport.java
@@ -36,6 +36,9 @@ class RawTransport extends Transport {
@Override
public void start() {
+ if (DEBUG) {
+ Slog.d(TAG, "Starting raw transport.");
+ }
new Thread(() -> {
try {
while (!mStopped) {
@@ -44,7 +47,7 @@ class RawTransport extends Transport {
} catch (IOException e) {
if (!mStopped) {
Slog.w(TAG, "Trouble during transport", e);
- stop();
+ close();
}
}
}).start();
@@ -52,8 +55,19 @@ class RawTransport extends Transport {
@Override
public void stop() {
+ if (DEBUG) {
+ Slog.d(TAG, "Stopping raw transport.");
+ }
mStopped = true;
+ }
+ @Override
+ public void close() {
+ stop();
+
+ if (DEBUG) {
+ Slog.d(TAG, "Closing raw transport.");
+ }
IoUtils.closeQuietly(mRemoteIn);
IoUtils.closeQuietly(mRemoteOut);
}
@@ -79,15 +93,17 @@ class RawTransport extends Transport {
}
private void receiveMessage() throws IOException {
- final byte[] headerBytes = new byte[HEADER_LENGTH];
- Streams.readFully(mRemoteIn, headerBytes);
- final ByteBuffer header = ByteBuffer.wrap(headerBytes);
- final int message = header.getInt();
- final int sequence = header.getInt();
- final int length = header.getInt();
- final byte[] data = new byte[length];
- Streams.readFully(mRemoteIn, data);
+ synchronized (mRemoteIn) {
+ final byte[] headerBytes = new byte[HEADER_LENGTH];
+ Streams.readFully(mRemoteIn, headerBytes);
+ final ByteBuffer header = ByteBuffer.wrap(headerBytes);
+ final int message = header.getInt();
+ final int sequence = header.getInt();
+ final int length = header.getInt();
+ final byte[] data = new byte[length];
+ Streams.readFully(mRemoteIn, data);
- handleMessage(message, sequence, data);
+ handleMessage(message, sequence, data);
+ }
}
}
diff --git a/services/companion/java/com/android/server/companion/transport/SecureTransport.java b/services/companion/java/com/android/server/companion/transport/SecureTransport.java
index cca08435c0a5..4054fc95f04a 100644
--- a/services/companion/java/com/android/server/companion/transport/SecureTransport.java
+++ b/services/companion/java/com/android/server/companion/transport/SecureTransport.java
@@ -21,6 +21,7 @@ import android.content.Context;
import android.os.ParcelFileDescriptor;
import android.util.Slog;
+import com.android.internal.annotations.GuardedBy;
import com.android.server.companion.securechannel.AttestationVerifier;
import com.android.server.companion.securechannel.SecureChannel;
@@ -35,6 +36,7 @@ class SecureTransport extends Transport implements SecureChannel.Callback {
private volatile boolean mShouldProcessRequests = false;
+ @GuardedBy("mRequestQueue")
private final BlockingQueue<byte[]> mRequestQueue = new ArrayBlockingQueue<>(100);
SecureTransport(int associationId, ParcelFileDescriptor fd, Context context) {
@@ -60,6 +62,12 @@ class SecureTransport extends Transport implements SecureChannel.Callback {
}
@Override
+ public void close() {
+ mSecureChannel.close();
+ mShouldProcessRequests = false;
+ }
+
+ @Override
public Future<byte[]> requestForResponse(int message, byte[] data) {
// Check if channel is secured and start securing
if (!mShouldProcessRequests) {
@@ -85,12 +93,14 @@ class SecureTransport extends Transport implements SecureChannel.Callback {
}
// Queue up a message to send
- mRequestQueue.add(ByteBuffer.allocate(HEADER_LENGTH + data.length)
- .putInt(message)
- .putInt(sequence)
- .putInt(data.length)
- .put(data)
- .array());
+ synchronized (mRequestQueue) {
+ mRequestQueue.add(ByteBuffer.allocate(HEADER_LENGTH + data.length)
+ .putInt(message)
+ .putInt(sequence)
+ .putInt(data.length)
+ .put(data)
+ .array());
+ }
}
@Override
@@ -102,9 +112,11 @@ class SecureTransport extends Transport implements SecureChannel.Callback {
new Thread(() -> {
try {
while (mShouldProcessRequests) {
- byte[] request = mRequestQueue.poll();
- if (request != null) {
- mSecureChannel.sendSecureMessage(request);
+ synchronized (mRequestQueue) {
+ byte[] request = mRequestQueue.poll();
+ if (request != null) {
+ mSecureChannel.sendSecureMessage(request);
+ }
}
}
} catch (IOException e) {
diff --git a/services/companion/java/com/android/server/companion/transport/Transport.java b/services/companion/java/com/android/server/companion/transport/Transport.java
index d69ce8909c74..d30104a095cf 100644
--- a/services/companion/java/com/android/server/companion/transport/Transport.java
+++ b/services/companion/java/com/android/server/companion/transport/Transport.java
@@ -110,13 +110,26 @@ public abstract class Transport {
return mFd;
}
+ /**
+ * Start listening to messages.
+ */
public abstract void start();
+
+ /**
+ * Soft stop listening to the incoming data without closing the streams.
+ */
public abstract void stop();
+
+ /**
+ * Stop listening to the incoming data and close the streams.
+ */
+ public abstract void close();
+
protected abstract void sendMessage(int message, int sequence, @NonNull byte[] data)
throws IOException;
/**
- * Send a message
+ * Send a message.
*/
public void sendMessage(int message, @NonNull byte[] data) throws IOException {
sendMessage(message, mNextSequence.incrementAndGet(), data);
@@ -170,7 +183,11 @@ public abstract class Transport {
sendMessage(MESSAGE_RESPONSE_SUCCESS, sequence, data);
break;
}
- case MESSAGE_REQUEST_PLATFORM_INFO:
+ case MESSAGE_REQUEST_PLATFORM_INFO: {
+ callback(message, data);
+ // DO NOT SEND A RESPONSE!
+ break;
+ }
case MESSAGE_REQUEST_CONTEXT_SYNC: {
callback(message, data);
sendMessage(MESSAGE_RESPONSE_SUCCESS, sequence, EmptyArray.BYTE);
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 7c84b7230816..d9ba8453fffa 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -66,6 +66,7 @@ import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
+import android.os.Trace;
import android.os.UserHandle;
import android.os.WakeLockStats;
import android.os.WorkSource;
@@ -140,6 +141,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
BatteryStatsImpl.EnergyStatsRetriever,
Watchdog.Monitor {
static final String TAG = "BatteryStatsService";
+ static final String TRACE_TRACK_WAKEUP_REASON = "wakeup_reason";
static final boolean DBG = false;
private static final boolean BATTERY_USAGE_STORE_ENABLED = true;
@@ -2482,6 +2484,10 @@ public final class BatteryStatsService extends IBatteryStats.Stub
while ((reason = waitWakeup()) != null) {
final long nowElapsed = SystemClock.elapsedRealtime();
final long nowUptime = SystemClock.uptimeMillis();
+
+ Trace.instantForTrack(Trace.TRACE_TAG_POWER, TRACE_TRACK_WAKEUP_REASON,
+ nowElapsed + " " + reason);
+
// Wait for the completion of pending works if there is any
awaitCompletion();
mCpuWakeupStats.noteWakeupTimeAndReason(nowElapsed, nowUptime, reason);
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index fc22935736a3..965a07b51e12 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -157,10 +157,10 @@ import com.android.server.LockGuard;
import com.android.server.SystemServerInitThreadPool;
import com.android.server.SystemServiceManager;
import com.android.server.pm.PackageList;
+import com.android.server.pm.PackageManagerLocal;
import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageState;
-import com.android.server.pm.pkg.PackageStateInternal;
import com.android.server.pm.pkg.component.ParsedAttribution;
import com.android.server.policy.AppOpsPolicy;
@@ -367,6 +367,9 @@ public class AppOpsService extends IAppOpsService.Stub {
/** Package Manager internal. Access via {@link #getPackageManagerInternal()} */
private @Nullable PackageManagerInternal mPackageManagerInternal;
+ /** Package Manager local. Access via {@link #getPackageManagerLocal()} */
+ private @Nullable PackageManagerLocal mPackageManagerLocal;
+
/** User Manager internal. Access via {@link #getUserManagerInternal()} */
private @Nullable UserManagerInternal mUserManagerInternal;
@@ -1189,42 +1192,64 @@ public class AppOpsService extends IAppOpsService.Stub {
/**
* Initialize uid state objects for state contained in the checking service.
*/
- private void initializeUidStates() {
+ @VisibleForTesting
+ void initializeUidStates() {
UserManagerInternal umi = getUserManagerInternal();
- int[] userIds = umi.getUserIds();
synchronized (this) {
- for (int i = 0; i < userIds.length; i++) {
- int userId = userIds[i];
- initializeUserUidStatesLocked(userId);
+ int[] userIds = umi.getUserIds();
+ try (PackageManagerLocal.UnfilteredSnapshot snapshot =
+ getPackageManagerLocal().withUnfilteredSnapshot()) {
+ Map<String, PackageState> packageStates = snapshot.getPackageStates();
+ for (int i = 0; i < userIds.length; i++) {
+ int userId = userIds[i];
+ initializeUserUidStatesLocked(userId, packageStates);
+ }
}
}
}
private void initializeUserUidStates(int userId) {
synchronized (this) {
- initializeUserUidStatesLocked(userId);
+ try (PackageManagerLocal.UnfilteredSnapshot snapshot =
+ getPackageManagerLocal().withUnfilteredSnapshot()) {
+ initializeUserUidStatesLocked(userId, snapshot.getPackageStates());
+ }
}
}
- private void initializeUserUidStatesLocked(int userId) {
- ArrayMap<String, ? extends PackageStateInternal> packageStates =
- getPackageManagerInternal().getPackageStates();
- for (int j = 0; j < packageStates.size(); j++) {
- PackageStateInternal packageState = packageStates.valueAt(j);
- int uid = UserHandle.getUid(userId, packageState.getAppId());
- UidState uidState = getUidStateLocked(uid, true);
- String packageName = packageStates.keyAt(j);
- Ops ops = new Ops(packageName, uidState);
+ private void initializeUserUidStatesLocked(int userId, Map<String,
+ PackageState> packageStates) {
+ for (Map.Entry<String, PackageState> entry : packageStates.entrySet()) {
+ int appId = entry.getValue().getAppId();
+ String packageName = entry.getKey();
+
+ initializePackageUidStateLocked(userId, appId, packageName);
+ }
+ }
+
+ /*
+ Be careful not to clear any existing data; only want to add objects that don't already exist.
+ */
+ private void initializePackageUidStateLocked(int userId, int appId, String packageName) {
+ int uid = UserHandle.getUid(userId, appId);
+ UidState uidState = getUidStateLocked(uid, true);
+ Ops ops = uidState.pkgOps.get(packageName);
+ if (ops == null) {
+ ops = new Ops(packageName, uidState);
uidState.pkgOps.put(packageName, ops);
+ }
+
+ SparseIntArray packageModes =
+ mAppOpsCheckingService.getNonDefaultPackageModes(packageName, userId);
+ for (int k = 0; k < packageModes.size(); k++) {
+ int code = packageModes.keyAt(k);
- SparseIntArray packageModes =
- mAppOpsCheckingService.getNonDefaultPackageModes(packageName, userId);
- for (int k = 0; k < packageModes.size(); k++) {
- int code = packageModes.get(k);
+ if (ops.indexOfKey(code) < 0) {
ops.put(code, new Op(uidState, packageName, code, uid));
}
- uidState.evalForegroundOps();
}
+
+ uidState.evalForegroundOps();
}
/**
@@ -3649,6 +3674,20 @@ public class AppOpsService extends IAppOpsService.Stub {
}
/**
+ * @return {@link PackageManagerLocal}
+ */
+ private @NonNull PackageManagerLocal getPackageManagerLocal() {
+ if (mPackageManagerLocal == null) {
+ mPackageManagerLocal = LocalManagerRegistry.getManager(PackageManagerLocal.class);
+ }
+ if (mPackageManagerLocal == null) {
+ throw new IllegalStateException("PackageManagerLocal not loaded");
+ }
+
+ return mPackageManagerLocal;
+ }
+
+ /**
* @return {@link UserManagerInternal}
*/
private @NonNull UserManagerInternal getUserManagerInternal() {
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
index 91f58db407f2..35c70fbce8ad 100755
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
@@ -22,6 +22,7 @@ import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.IHdmiControlCallback;
import android.hardware.input.InputManager;
+import android.hardware.input.InputManagerGlobal;
import android.hardware.tv.cec.V1_0.Result;
import android.hardware.tv.cec.V1_0.SendMessageResult;
import android.media.AudioManager;
@@ -827,7 +828,7 @@ abstract class HdmiCecLocalDevice extends HdmiLocalDevice {
KeyEvent.FLAG_FROM_SYSTEM,
InputDevice.SOURCE_HDMI,
null);
- InputManager.getInstance()
+ InputManagerGlobal.getInstance()
.injectInputEvent(keyEvent, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
keyEvent.recycle();
}
diff --git a/services/core/java/com/android/server/input/InputShellCommand.java b/services/core/java/com/android/server/input/InputShellCommand.java
index 773dc680d4cb..513259145da0 100644
--- a/services/core/java/com/android/server/input/InputShellCommand.java
+++ b/services/core/java/com/android/server/input/InputShellCommand.java
@@ -42,6 +42,7 @@ import static android.view.KeyEvent.META_SHIFT_RIGHT_ON;
import static java.util.Collections.unmodifiableMap;
import android.hardware.input.InputManager;
+import android.hardware.input.InputManagerGlobal;
import android.os.ShellCommand;
import android.os.SystemClock;
import android.util.ArrayMap;
@@ -109,7 +110,7 @@ public class InputShellCommand extends ShellCommand {
}
private void injectKeyEvent(KeyEvent event) {
- InputManager.getInstance().injectInputEvent(event,
+ InputManagerGlobal.getInstance().injectInputEvent(event,
InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
}
@@ -178,7 +179,7 @@ public class InputShellCommand extends ShellCommand {
pointerProperties, pointerCoords, DEFAULT_META_STATE, DEFAULT_BUTTON_STATE,
DEFAULT_PRECISION_X, DEFAULT_PRECISION_Y, getInputDeviceId(inputSource),
DEFAULT_EDGE_FLAGS, inputSource, displayId, DEFAULT_FLAGS);
- InputManager.getInstance().injectInputEvent(event,
+ InputManagerGlobal.getInstance().injectInputEvent(event,
InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
}
@@ -530,7 +531,7 @@ public class InputShellCommand extends ShellCommand {
}
private void injectKeyEventAsync(KeyEvent event) {
- InputManager.getInstance().injectInputEvent(event,
+ InputManagerGlobal.getInstance().injectInputEvent(event,
InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
}
diff --git a/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java b/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java
index 991930fd049f..ec03d9d43539 100644
--- a/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java
+++ b/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java
@@ -65,6 +65,7 @@ import com.android.server.LocalServices;
import com.android.server.integrity.engine.RuleEvaluationEngine;
import com.android.server.integrity.model.IntegrityCheckResult;
import com.android.server.integrity.model.RuleMetadata;
+import com.android.server.pm.PackageManagerServiceUtils;
import com.android.server.pm.parsing.PackageParser2;
import com.android.server.pm.pkg.parsing.ParsingPackageUtils;
@@ -383,7 +384,7 @@ public class AppIntegrityManagerServiceImpl extends IAppIntegrityManager.Stub {
private String getInstallerPackageName(Intent intent) {
String installer =
intent.getStringExtra(PackageManager.EXTRA_VERIFICATION_INSTALLER_PACKAGE);
- if (installer == null) {
+ if (PackageManagerServiceUtils.isInstalledByAdb(installer)) {
return ADB_INSTALLER;
}
int installerUid = intent.getIntExtra(PackageManager.EXTRA_VERIFICATION_INSTALLER_UID, -1);
diff --git a/services/core/java/com/android/server/pm/ApkChecksums.java b/services/core/java/com/android/server/pm/ApkChecksums.java
index 9e93fe04d112..2e1c72e66e55 100644
--- a/services/core/java/com/android/server/pm/ApkChecksums.java
+++ b/services/core/java/com/android/server/pm/ApkChecksums.java
@@ -47,7 +47,6 @@ import android.os.RemoteException;
import android.os.SystemClock;
import android.os.incremental.IncrementalManager;
import android.os.incremental.IncrementalStorage;
-import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Pair;
@@ -424,7 +423,7 @@ public class ApkChecksums {
@Nullable Certificate[] trustedInstallers,
Map<Integer, ApkChecksum> checksums,
@NonNull Injector injector) {
- if (TextUtils.isEmpty(installerPackageName)) {
+ if (PackageManagerServiceUtils.isInstalledByAdb(installerPackageName)) {
return;
}
if (trustedInstallers != null && trustedInstallers.length == 0) {
diff --git a/services/core/java/com/android/server/pm/BackgroundInstallControlService.java b/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
index 8d40adfb29f0..0bb05aab4394 100644
--- a/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
+++ b/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
@@ -248,7 +248,7 @@ public class BackgroundInstallControlService extends SystemService {
// ADB sets installerPackageName to null, this creates a loophole to bypass BIC which will be
// addressed with b/265203007
private boolean installedByAdb(String initiatingPackageName) {
- return initiatingPackageName == null;
+ return PackageManagerServiceUtils.isInstalledByAdb(initiatingPackageName);
}
private boolean wasForegroundInstallation(String installerPackageName,
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index 3ac7aa750bf9..5f424edb15c4 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -90,6 +90,7 @@ import static com.android.server.pm.PackageManagerServiceUtils.comparePackageSig
import static com.android.server.pm.PackageManagerServiceUtils.compareSignatures;
import static com.android.server.pm.PackageManagerServiceUtils.compressedFileExists;
import static com.android.server.pm.PackageManagerServiceUtils.deriveAbiOverride;
+import static com.android.server.pm.PackageManagerServiceUtils.isInstalledByAdb;
import static com.android.server.pm.PackageManagerServiceUtils.logCriticalInfo;
import static com.android.server.pm.PackageManagerServiceUtils.makeDirRecursive;
import static com.android.server.pm.SharedUidMigration.BEST_EFFORT;
@@ -333,7 +334,7 @@ final class InstallPackageHelper {
if (installSource != null) {
// If this is part of a standard install, set the initiating package name, else rely on
// previous device state.
- if (installSource.mInitiatingPackageName != null) {
+ if (!isInstalledByAdb(installSource.mInitiatingPackageName)) {
final PackageSetting ips = mPm.mSettings.getPackageLPr(
installSource.mInitiatingPackageName);
if (ips != null) {
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index adc0b0b6fc6a..69e92e075b51 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -19,6 +19,8 @@ package com.android.server.pm;
import static android.app.admin.DevicePolicyResources.Strings.Core.PACKAGE_DELETED_BY_DO;
import static android.os.Process.INVALID_UID;
+import static com.android.server.pm.PackageManagerService.SHELL_PACKAGE_NAME;
+
import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
import static org.xmlpull.v1.XmlPullParser.START_TAG;
@@ -679,7 +681,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
params.installFlags |= PackageManager.INSTALL_FROM_ADB;
// adb installs can override the installingPackageName, but not the
// initiatingPackageName
- installerPackageName = null;
+ installerPackageName = SHELL_PACKAGE_NAME;
} else {
if (callingUid != Process.SYSTEM_UID) {
// The supplied installerPackageName must always belong to the calling app.
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 36aeca142f5c..ea6383e14969 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -51,6 +51,7 @@ import static com.android.internal.util.XmlUtils.writeStringAttribute;
import static com.android.internal.util.XmlUtils.writeUriAttribute;
import static com.android.server.pm.PackageInstallerService.prepareStageDir;
import static com.android.server.pm.PackageManagerService.APP_METADATA_FILE_NAME;
+import static com.android.server.pm.PackageManagerServiceUtils.isInstalledByAdb;
import android.Manifest;
import android.annotation.AnyThread;
@@ -1395,9 +1396,10 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
return;
}
+ final String initiatingPackageName = getInstallSource().mInitiatingPackageName;
final String installerPackageName;
- if (!TextUtils.isEmpty(getInstallSource().mInitiatingPackageName)) {
- installerPackageName = getInstallSource().mInitiatingPackageName;
+ if (!isInstalledByAdb(initiatingPackageName)) {
+ installerPackageName = initiatingPackageName;
} else {
installerPackageName = getInstallSource().mInstallerPackageName;
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index a6faff85ab06..d630ff471188 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -43,6 +43,7 @@ import static com.android.server.pm.DexOptHelper.useArtService;
import static com.android.server.pm.InstructionSets.getDexCodeInstructionSet;
import static com.android.server.pm.InstructionSets.getPreferredInstructionSet;
import static com.android.server.pm.PackageManagerServiceUtils.compareSignatures;
+import static com.android.server.pm.PackageManagerServiceUtils.isInstalledByAdb;
import static com.android.server.pm.PackageManagerServiceUtils.logCriticalInfo;
import android.Manifest;
@@ -351,6 +352,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
static final boolean DEBUG_ABI_SELECTION = false;
public static final boolean DEBUG_INSTANT = Build.IS_DEBUGGABLE;
+ static final String SHELL_PACKAGE_NAME = "com.android.shell";
+
static final boolean HIDE_EPHEMERAL_APIS = false;
static final String PRECOMPILE_LAYOUTS = "pm.precompile_layouts";
@@ -1330,10 +1333,11 @@ public class PackageManagerService implements PackageSender, TestUtilityService
final InstallSourceInfo installSourceInfo = snapshot.getInstallSourceInfo(packageName,
userId);
+ final String initiatingPackageName = installSourceInfo.getInitiatingPackageName();
final String installerPackageName;
if (installSourceInfo != null) {
- if (!TextUtils.isEmpty(installSourceInfo.getInitiatingPackageName())) {
- installerPackageName = installSourceInfo.getInitiatingPackageName();
+ if (!isInstalledByAdb(initiatingPackageName)) {
+ installerPackageName = initiatingPackageName;
} else {
installerPackageName = installSourceInfo.getInstallingPackageName();
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
index 3f9a0bc89641..77e4688cecb5 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
@@ -32,6 +32,7 @@ import static com.android.server.pm.PackageManagerService.DEBUG_INTENT_MATCHING;
import static com.android.server.pm.PackageManagerService.DEBUG_PREFERRED;
import static com.android.server.pm.PackageManagerService.RANDOM_CODEPATH_PREFIX;
import static com.android.server.pm.PackageManagerService.RANDOM_DIR_PREFIX;
+import static com.android.server.pm.PackageManagerService.SHELL_PACKAGE_NAME;
import static com.android.server.pm.PackageManagerService.STUB_SUFFIX;
import static com.android.server.pm.PackageManagerService.TAG;
@@ -1516,4 +1517,11 @@ public class PackageManagerServiceUtils {
}
}
}
+
+ /**
+ * Check if package name is com.android.shell or is null.
+ */
+ public static boolean isInstalledByAdb(String initiatingPackageName) {
+ return initiatingPackageName == null || SHELL_PACKAGE_NAME.equals(initiatingPackageName);
+ }
}
diff --git a/services/core/java/com/android/server/power/stats/CpuWakeupStats.java b/services/core/java/com/android/server/power/stats/CpuWakeupStats.java
index b05b662dc1e8..d55fbc27e109 100644
--- a/services/core/java/com/android/server/power/stats/CpuWakeupStats.java
+++ b/services/core/java/com/android/server/power/stats/CpuWakeupStats.java
@@ -23,6 +23,7 @@ import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_WIFI;
import android.content.Context;
import android.os.Handler;
import android.os.HandlerExecutor;
+import android.os.Trace;
import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.util.IndentingPrintWriter;
@@ -55,6 +56,7 @@ public class CpuWakeupStats {
private static final String SUBSYSTEM_ALARM_STRING = "Alarm";
private static final String SUBSYSTEM_ALARM_WIFI = "Wifi";
+ private static final String TRACE_TRACK_WAKEUP_ATTRIBUTION = "wakeup_attribution";
@VisibleForTesting
static final long WAKEUP_REASON_HALF_WINDOW_MS = 500;
private static final long WAKEUP_WRITE_DELAY_MS = TimeUnit.MINUTES.toMillis(2);
@@ -94,13 +96,15 @@ public class CpuWakeupStats {
return FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__REASON__UNKNOWN;
}
- private synchronized void logWakeupToStatsLog(Wakeup wakeupToLog) {
+ private synchronized void logWakeupAttribution(Wakeup wakeupToLog) {
if (ArrayUtils.isEmpty(wakeupToLog.mDevices)) {
FrameworkStatsLog.write(FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED,
FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__TYPE__TYPE_UNKNOWN,
FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__REASON__UNKNOWN,
null,
wakeupToLog.mElapsedMillis);
+ Trace.instantForTrack(Trace.TRACE_TAG_POWER, TRACE_TRACK_WAKEUP_ATTRIBUTION,
+ wakeupToLog.mElapsedMillis + " --");
return;
}
@@ -112,6 +116,9 @@ public class CpuWakeupStats {
Slog.wtf(TAG, "Unexpected null attribution found for " + wakeupToLog);
return;
}
+
+ final StringBuilder traceEventBuilder = new StringBuilder();
+
for (int i = 0; i < wakeupAttribution.size(); i++) {
final int subsystem = wakeupAttribution.keyAt(i);
final SparseBooleanArray uidMap = wakeupAttribution.valueAt(i);
@@ -132,7 +139,19 @@ public class CpuWakeupStats {
subsystemToStatsReason(subsystem),
uids,
wakeupToLog.mElapsedMillis);
+
+ if (Trace.isTagEnabled(Trace.TRACE_TAG_POWER)) {
+ if (i == 0) {
+ traceEventBuilder.append(wakeupToLog.mElapsedMillis + " ");
+ }
+ traceEventBuilder.append((subsystemToString(subsystem)));
+ traceEventBuilder.append(":");
+ traceEventBuilder.append(Arrays.toString(uids));
+ traceEventBuilder.append(" ");
+ }
}
+ Trace.instantForTrack(Trace.TRACE_TAG_POWER, TRACE_TRACK_WAKEUP_ATTRIBUTION,
+ traceEventBuilder.toString().trim());
}
/** Notes a wakeup reason as reported by SuspendControlService to battery stats. */
@@ -160,7 +179,7 @@ public class CpuWakeupStats {
for (int i = lastIdx; i >= 0; i--) {
mWakeupAttribution.removeAt(i);
}
- mHandler.postDelayed(() -> logWakeupToStatsLog(parsedWakeup), WAKEUP_WRITE_DELAY_MS);
+ mHandler.postDelayed(() -> logWakeupAttribution(parsedWakeup), WAKEUP_WRITE_DELAY_MS);
}
/** Notes a waking activity that could have potentially woken up the CPU. */
diff --git a/services/core/java/com/android/server/tv/interactive/TvInteractiveAppManagerService.java b/services/core/java/com/android/server/tv/interactive/TvInteractiveAppManagerService.java
index 0d4a76ee3add..fb400da4503e 100644
--- a/services/core/java/com/android/server/tv/interactive/TvInteractiveAppManagerService.java
+++ b/services/core/java/com/android/server/tv/interactive/TvInteractiveAppManagerService.java
@@ -2887,7 +2887,7 @@ public class TvInteractiveAppManagerService extends SystemService {
}
@Override
- public void onRequestScheduleRecording2(String inputId, String requestId, Uri channelUri,
+ public void onRequestScheduleRecording2(String requestId, String inputId, Uri channelUri,
long start, long duration, int repeat, Bundle params) {
synchronized (mLock) {
if (DEBUG) {
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 6bc9fa4f3b46..612fc4be70db 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -2553,13 +2553,18 @@ class TaskFragment extends WindowContainer<WindowContainer> {
return task != null && !task.isDragResizing() && super.canStartChangeTransition();
}
- /** Records the starting bounds of the closing organized TaskFragment. */
- void setClosingChangingStartBoundsIfNeeded() {
+ /**
+ * Returns {@code true} if the starting bounds of the closing organized TaskFragment is
+ * recorded. Otherwise, return {@code false}.
+ */
+ boolean setClosingChangingStartBoundsIfNeeded() {
if (isOrganizedTaskFragment() && mDisplayContent != null
&& mDisplayContent.mChangingContainers.remove(this)) {
mDisplayContent.mClosingChangingContainers.put(
this, new Rect(mSurfaceFreezer.mFreezeBounds));
+ return true;
}
+ return false;
}
@Override
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index d42a62971395..520d06d53c0c 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -1336,14 +1336,18 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
// If we are losing visibility, then a snapshot isn't necessary and we are no-longer
// part of a change transition.
if (!visible) {
+ boolean skipUnfreeze = false;
if (asTaskFragment() != null) {
// If the organized TaskFragment is closing while resizing, we want to keep track of
// its starting bounds to make sure the animation starts at the correct position.
// This should be called before unfreeze() because we record the starting bounds
// in SurfaceFreezer.
- asTaskFragment().setClosingChangingStartBoundsIfNeeded();
+ skipUnfreeze = asTaskFragment().setClosingChangingStartBoundsIfNeeded();
+ }
+
+ if (!skipUnfreeze) {
+ mSurfaceFreezer.unfreeze(getSyncTransaction());
}
- mSurfaceFreezer.unfreeze(getSyncTransaction());
}
WindowContainer parent = getParent();
if (parent != null) {
diff --git a/services/credentials/java/com/android/server/credentials/CreateRequestSession.java b/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
index 06fe4f0b874b..687c86190fbd 100644
--- a/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
@@ -16,6 +16,7 @@
package com.android.server.credentials;
+import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.ComponentName;
@@ -31,6 +32,7 @@ import android.credentials.ui.RequestInfo;
import android.os.CancellationSignal;
import android.os.RemoteException;
import android.service.credentials.CallingAppInfo;
+import android.service.credentials.PermissionUtils;
import android.util.Log;
import com.android.server.credentials.metrics.ApiName;
@@ -88,7 +90,9 @@ public final class CreateRequestSession extends RequestSession<CreateCredentialR
mClientCallback.onPendingIntent(mCredentialManagerUi.createPendingIntent(
RequestInfo.newCreateRequestInfo(
mRequestId, mClientRequest,
- mClientAppInfo.getPackageName()),
+ mClientAppInfo.getPackageName(),
+ PermissionUtils.hasPermission(mContext, mClientAppInfo.getPackageName(),
+ Manifest.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS)),
providerDataList));
} catch (RemoteException e) {
mChosenProviderFinalPhaseMetric.setUiReturned(false);
diff --git a/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java b/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java
index 9165901ad81e..b746784492a3 100644
--- a/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java
@@ -227,7 +227,9 @@ public class PrepareGetRequestSession extends RequestSession<GetCredentialReques
try {
mPrepareGetCredentialCallback.onResponse(
new PrepareGetCredentialResponseInternal(
- false, null, false, false, getUiIntent()));
+ false, null,
+ false, false,
+ getUiIntent()));
} catch (Exception e) {
Log.e(TAG, "EXCEPTION while mPendingCallback.onResponse", e);
}
diff --git a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
index d17e98439978..fcc0904922db 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
@@ -95,7 +95,7 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential
android.credentials.GetCredentialRequest filteredRequest =
filterOptions(providerInfo.getCapabilities(),
getRequestSession.mClientRequest,
- providerInfo.getComponentName());
+ providerInfo);
if (filteredRequest != null) {
Map<String, CredentialOption> beginGetOptionToCredentialOptionMap =
new HashMap<>();
@@ -120,7 +120,8 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential
}
/** Creates a new provider session to be used by the request session. */
- @Nullable public static ProviderGetSession createNewSession(
+ @Nullable
+ public static ProviderGetSession createNewSession(
Context context,
@UserIdInt int userId,
CredentialProviderInfo providerInfo,
@@ -129,7 +130,7 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential
android.credentials.GetCredentialRequest filteredRequest =
filterOptions(providerInfo.getCapabilities(),
getRequestSession.mClientRequest,
- providerInfo.getComponentName());
+ providerInfo);
if (filteredRequest != null) {
Map<String, CredentialOption> beginGetOptionToCredentialOptionMap =
new HashMap<>();
@@ -178,12 +179,13 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential
private static android.credentials.GetCredentialRequest filterOptions(
List<String> providerCapabilities,
android.credentials.GetCredentialRequest clientRequest,
- ComponentName componentName
+ CredentialProviderInfo info
) {
List<CredentialOption> filteredOptions = new ArrayList<>();
for (CredentialOption option : clientRequest.getCredentialOptions()) {
if (providerCapabilities.contains(option.getType())
- && isProviderAllowed(option, componentName)) {
+ && isProviderAllowed(option, info.getComponentName())
+ && checkSystemProviderRequirement(option, info.isSystemProvider())) {
Log.i(TAG, "In createProviderRequest - capability found : "
+ option.getType());
filteredOptions.add(option);
@@ -212,6 +214,15 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential
return true;
}
+ private static boolean checkSystemProviderRequirement(CredentialOption option,
+ boolean isSystemProvider) {
+ if (option.isSystemProviderRequired() && !isSystemProvider) {
+ Log.d(TAG, "System provider required, but this service is not a system provider");
+ return false;
+ }
+ return true;
+ }
+
public ProviderGetSession(Context context,
CredentialProviderInfo info,
ProviderInternalCallback<GetCredentialResponse> callbacks,
diff --git a/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsServiceTest.java
index f86e4644d8b9..44ec26ea65e0 100644
--- a/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsServiceTest.java
@@ -19,9 +19,11 @@ import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.MODE_ERRORED;
import static android.app.AppOpsManager.OP_COARSE_LOCATION;
import static android.app.AppOpsManager.OP_FLAGS_ALL;
+import static android.app.AppOpsManager.OP_FLAG_SELF;
import static android.app.AppOpsManager.OP_READ_SMS;
import static android.app.AppOpsManager.OP_WIFI_SCAN;
import static android.app.AppOpsManager.OP_WRITE_SMS;
+import static android.os.UserHandle.getUserId;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
@@ -33,12 +35,15 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.nullable;
+import android.app.AppOpsManager;
import android.app.AppOpsManager.OpEntry;
import android.app.AppOpsManager.PackageOps;
import android.content.ContentResolver;
@@ -48,14 +53,19 @@ import android.os.Handler;
import android.os.HandlerThread;
import android.os.Process;
import android.provider.Settings;
+import android.util.ArrayMap;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.dx.mockito.inline.extended.StaticMockitoSession;
+import com.android.server.LocalManagerRegistry;
import com.android.server.LocalServices;
+import com.android.server.pm.PackageManagerLocal;
+import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.pkg.AndroidPackage;
+import com.android.server.pm.pkg.PackageState;
import com.android.server.pm.pkg.PackageStateInternal;
import org.junit.After;
@@ -67,6 +77,7 @@ import org.mockito.quality.Strictness;
import java.io.File;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
/**
* Unit tests for AppOpsService. Covers functionality that is difficult to test using CTS tests
@@ -133,6 +144,7 @@ public class AppOpsServiceTest {
mMockingSession = mockitoSession()
.strictness(Strictness.LENIENT)
.spyStatic(LocalServices.class)
+ .spyStatic(LocalManagerRegistry.class)
.spyStatic(Settings.Global.class)
.startMocking();
@@ -152,6 +164,23 @@ public class AppOpsServiceTest {
doReturn(mockPackageManagerInternal).when(
() -> LocalServices.getService(PackageManagerInternal.class));
+ PackageManagerLocal mockPackageManagerLocal = mock(PackageManagerLocal.class);
+ PackageManagerLocal.UnfilteredSnapshot mockUnfilteredSnapshot =
+ mock(PackageManagerLocal.UnfilteredSnapshot.class);
+ PackageState mockMyPS = mock(PackageState.class);
+ ArrayMap<String, PackageState> packageStates = new ArrayMap<>();
+ packageStates.put(sMyPackageName, mockMyPS);
+ when(mockMyPS.getAppId()).thenReturn(mMyUid);
+ when(mockUnfilteredSnapshot.getPackageStates()).thenReturn(packageStates);
+ when(mockPackageManagerLocal.withUnfilteredSnapshot()).thenReturn(mockUnfilteredSnapshot);
+ doReturn(mockPackageManagerLocal).when(
+ () -> LocalManagerRegistry.getManager(PackageManagerLocal.class));
+
+ UserManagerInternal mockUserManagerInternal = mock(UserManagerInternal.class);
+ when(mockUserManagerInternal.getUserIds()).thenReturn(new int[] {getUserId(mMyUid)});
+ doReturn(mockUserManagerInternal).when(
+ () -> LocalServices.getService(UserManagerInternal.class));
+
// Mock behavior to use specific Settings.Global.APPOP_HISTORY_PARAMETERS
doReturn(null).when(() -> Settings.Global.getString(any(ContentResolver.class),
eq(Settings.Global.APPOP_HISTORY_PARAMETERS)));
@@ -337,6 +366,25 @@ public class AppOpsServiceTest {
assertThat(getLoggedOps()).isNull();
}
+ @Test
+ public void testUidStateInitializationDoesntClearState() throws InterruptedException {
+ mAppOpsService.setMode(OP_READ_SMS, mMyUid, sMyPackageName, MODE_ALLOWED);
+ mAppOpsService.noteOperation(OP_READ_SMS, mMyUid, sMyPackageName, null, false, null, false);
+ mAppOpsService.initializeUidStates();
+ List<PackageOps> ops = mAppOpsService.getOpsForPackage(mMyUid, sMyPackageName,
+ new int[]{OP_READ_SMS});
+ assertNotNull(ops);
+ for (int i = 0; i < ops.size(); i++) {
+ List<OpEntry> opEntries = ops.get(i).getOps();
+ for (int j = 0; j < opEntries.size(); j++) {
+ Map<String, AppOpsManager.AttributedOpEntry> attributedOpEntries = opEntries.get(
+ j).getAttributedOpEntries();
+ assertNotEquals(-1, attributedOpEntries.get(null)
+ .getLastAccessTime(OP_FLAG_SELF));
+ }
+ }
+ }
+
private List<PackageOps> getLoggedOps() {
return mAppOpsService.getOpsForPackage(mMyUid, sMyPackageName, null /* all ops */);
}
diff --git a/services/tests/servicestests/src/com/android/server/job/BiasSchedulingTest.java b/services/tests/servicestests/src/com/android/server/job/BiasSchedulingTest.java
index 56d01b0e3a2a..5e7dc33a1e52 100644
--- a/services/tests/servicestests/src/com/android/server/job/BiasSchedulingTest.java
+++ b/services/tests/servicestests/src/com/android/server/job/BiasSchedulingTest.java
@@ -21,6 +21,7 @@ import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
import android.content.Context;
+import android.os.DeviceIdleManager;
import android.test.AndroidTestCase;
import com.android.server.job.MockBiasJobService.TestEnvironment;
@@ -48,6 +49,7 @@ public class BiasSchedulingTest extends AndroidTestCase {
sJobServiceComponent = new ComponentName(getContext(), MockBiasJobService.class);
mJobScheduler = (JobScheduler) getContext().getSystemService(Context.JOB_SCHEDULER_SERVICE);
mJobScheduler.cancelAll();
+ getContext().getSystemService(DeviceIdleManager.class).endIdle("BiasSchedulingTest");
}
@Override
diff --git a/services/tests/servicestests/src/com/android/server/pm/BackgroundInstallControlServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/BackgroundInstallControlServiceTest.java
index ccf530f98b4d..ba91647f96ed 100644
--- a/services/tests/servicestests/src/com/android/server/pm/BackgroundInstallControlServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/BackgroundInstallControlServiceTest.java
@@ -719,8 +719,60 @@ public final class BackgroundInstallControlServiceTest {
public void testHandleUsageEvent_packageAddedThroughAdb() throws
NoSuchFieldException, PackageManager.NameNotFoundException {
assertNull(mBackgroundInstallControlService.getBackgroundInstalledPackages());
+ // This test is a duplicate of testHandleUsageEvent_packageAddedThroughAdb except the
+ // initiatingPackageName used to be null but is now "com.android.shell". This test ensures
+ // that the behavior is still the same for when the initiatingPackageName is null.
InstallSourceInfo installSourceInfo = new InstallSourceInfo(
- /* initiatingPackageName = */ null, //currently ADB installer sets field to null
+ /* initiatingPackageName = */ null,
+ /* initiatingPackageSigningInfo = */ null,
+ /* originatingPackageName = */ null,
+ /* installingPackageName = */ INSTALLER_NAME_1);
+ // b/265203007
+ when(mPackageManager.getInstallSourceInfo(anyString())).thenReturn(installSourceInfo);
+ ApplicationInfo appInfo = mock(ApplicationInfo.class);
+
+ when(mPackageManager.getApplicationInfoAsUser(
+ eq(PACKAGE_NAME_1),
+ any(),
+ anyInt())
+ ).thenReturn(appInfo);
+
+ long createTimestamp = PACKAGE_ADD_TIMESTAMP_1
+ - (System.currentTimeMillis() - SystemClock.uptimeMillis());
+ FieldSetter.setField(appInfo,
+ ApplicationInfo.class.getDeclaredField("createTimestamp"),
+ createTimestamp);
+
+ int uid = USER_ID_1 * UserHandle.PER_USER_RANGE;
+ assertEquals(USER_ID_1, UserHandle.getUserId(uid));
+
+ // The following usage events generation is the same as
+ // testHandleUsageEvent_packageAddedOutsideTimeFrame2 test. The only difference is that
+ // for ADB installs the initiatingPackageName used to be null, despite being detected
+ // as a background install. Since we do not want to treat side-loaded apps as background
+ // install getBackgroundInstalledPackages() is expected to return null
+ doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
+ anyString(), anyString(), anyInt());
+ generateUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED,
+ USER_ID_1, INSTALLER_NAME_1, USAGE_EVENT_TIMESTAMP_2);
+ generateUsageEvent(Event.ACTIVITY_STOPPED,
+ USER_ID_1, INSTALLER_NAME_1, USAGE_EVENT_TIMESTAMP_3);
+
+ mPackageListObserver.onPackageAdded(PACKAGE_NAME_1, uid);
+ mTestLooper.dispatchAll();
+
+ var packages = mBackgroundInstallControlService.getBackgroundInstalledPackages();
+ assertNull(packages);
+ }
+ @Test
+ public void testHandleUsageEvent_packageAddedThroughAdb2() throws
+ NoSuchFieldException, PackageManager.NameNotFoundException {
+ assertNull(mBackgroundInstallControlService.getBackgroundInstalledPackages());
+ // This test is a duplicate of testHandleUsageEvent_packageAddedThroughAdb except the
+ // initiatingPackageName used to be null but is now "com.android.shell". This test ensures
+ // that the behavior is still the same after this change.
+ InstallSourceInfo installSourceInfo = new InstallSourceInfo(
+ /* initiatingPackageName = */ "com.android.shell",
/* initiatingPackageSigningInfo = */ null,
/* originatingPackageName = */ null,
/* installingPackageName = */ INSTALLER_NAME_1);
@@ -745,9 +797,9 @@ public final class BackgroundInstallControlServiceTest {
// The following usage events generation is the same as
// testHandleUsageEvent_packageAddedOutsideTimeFrame2 test. The only difference is that
- // for ADB installs the initiatingPackageName is null, despite being detected as a
- // background install. Since we do not want to treat side-loaded apps as background install
- // getBackgroundInstalledPackages() is expected to return null
+ // for ADB installs the initiatingPackageName is com.android.shell, despite being detected
+ // as a background install. Since we do not want to treat side-loaded apps as background
+ // install getBackgroundInstalledPackages() is expected to return null
doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
anyString(), anyString(), anyInt());
generateUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED,
diff --git a/telephony/java/android/telephony/ims/ImsService.java b/telephony/java/android/telephony/ims/ImsService.java
index 33c86d8299a0..4c37f7d3184c 100644
--- a/telephony/java/android/telephony/ims/ImsService.java
+++ b/telephony/java/android/telephony/ims/ImsService.java
@@ -398,7 +398,11 @@ public class ImsService extends Service {
ImsService.this.disableImsForSubscription(slotId, subId), "disableIms");
}
-
+ @Override
+ public void resetIms(int slotId, int subId) {
+ executeMethodAsync(() ->
+ ImsService.this.resetImsInternal(slotId, subId), "resetIms");
+ }
};
private final IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
@@ -634,6 +638,14 @@ public class ImsService extends Service {
}
}
+ private void resetImsInternal(int slotId, int subId) {
+ try {
+ resetIms(slotId);
+ } catch (UnsupportedOperationException e) {
+ disableImsForSubscription(slotId, subId);
+ }
+ }
+
/**
* When called, provide the {@link ImsFeatureConfiguration} that this {@link ImsService}
* currently supports. This will trigger the framework to set up the {@link ImsFeature}s that
@@ -751,6 +763,19 @@ public class ImsService extends Service {
}
/**
+ * The framework has reset IMS for the slot specified. The ImsService must deregister
+ * and release all resources for IMS. After resetIms is called, either
+ * {@link #enableImsForSubscription(int, int)} or {@link #disableImsForSubscription(int, int)}
+ * will be called for the same slotId.
+ *
+ * @param slotId The slot ID that IMS will be reset for.
+ * @hide
+ */
+ public void resetIms(int slotId) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
* When called, the framework is requesting that a new {@link MmTelFeature} is created for the
* specified subscription.
*
diff --git a/telephony/java/android/telephony/ims/aidl/IImsServiceController.aidl b/telephony/java/android/telephony/ims/aidl/IImsServiceController.aidl
index ae6166fea02a..fdf43a52685a 100644
--- a/telephony/java/android/telephony/ims/aidl/IImsServiceController.aidl
+++ b/telephony/java/android/telephony/ims/aidl/IImsServiceController.aidl
@@ -47,4 +47,5 @@ interface IImsServiceController {
ISipTransport getSipTransport(int slotId);
oneway void enableIms(int slotId, int subId);
oneway void disableIms(int slotId, int subId);
+ oneway void resetIms(int slotId, int subId);
}