Merge "Added more logs to track WakeLock usages" into nyc-dev
diff --git a/api/current.txt b/api/current.txt
index 3bd607b..4f12ad4 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -40820,8 +40820,11 @@
field public static final android.os.Parcelable.Creator<android.view.Display.Mode> CREATOR;
}
- public final class DragAndDropPermissions {
+ public final class DragAndDropPermissions implements android.os.Parcelable {
+ method public int describeContents();
method public void release();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.DragAndDropPermissions> CREATOR;
}
public class DragEvent implements android.os.Parcelable {
diff --git a/api/system-current.txt b/api/system-current.txt
index 8240407..ea2707e 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -43819,8 +43819,11 @@
field public static final android.os.Parcelable.Creator<android.view.Display.Mode> CREATOR;
}
- public final class DragAndDropPermissions {
+ public final class DragAndDropPermissions implements android.os.Parcelable {
+ method public int describeContents();
method public void release();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.DragAndDropPermissions> CREATOR;
}
public class DragEvent implements android.os.Parcelable {
diff --git a/api/test-current.txt b/api/test-current.txt
index 8425e90..a70e9e3 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -40899,8 +40899,11 @@
field public static final android.os.Parcelable.Creator<android.view.Display.Mode> CREATOR;
}
- public final class DragAndDropPermissions {
+ public final class DragAndDropPermissions implements android.os.Parcelable {
+ method public int describeContents();
method public void release();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.DragAndDropPermissions> CREATOR;
}
public class DragEvent implements android.os.Parcelable {
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index cf663a3..e6ca520 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -16,6 +16,8 @@
package android.app;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentProvider;
@@ -30,6 +32,7 @@
import android.content.ReceiverCallNotAllowedException;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
+import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
@@ -155,10 +158,9 @@
private final String mBasePackageName;
private final String mOpPackageName;
- private final ResourcesManager mResourcesManager;
- private final Resources mResources;
- private final Display mDisplay; // may be null if default display
- private final DisplayAdjustments mDisplayAdjustments = new DisplayAdjustments();
+ private final @NonNull ResourcesManager mResourcesManager;
+ private final @NonNull Resources mResources;
+ private @Nullable Display mDisplay; // may be null if default display
private final int mFlags;
@@ -1897,18 +1899,6 @@
mUser, mFlags, display, null, Display.INVALID_DISPLAY);
}
- Display getDisplay() {
- if (mDisplay != null) {
- return mDisplay;
- }
- return ResourcesManager.getInstance().getAdjustedDisplay(
- Display.DEFAULT_DISPLAY, mDisplayAdjustments);
- }
-
- private int getDisplayId() {
- return mDisplay != null ? mDisplay.getDisplayId() : Display.DEFAULT_DISPLAY;
- }
-
@Override
public Context createDeviceProtectedStorageContext() {
final int flags = (mFlags & ~Context.CONTEXT_CREDENTIAL_PROTECTED_STORAGE)
@@ -1941,8 +1931,23 @@
}
@Override
+ public Display getDisplay() {
+ final DisplayAdjustments displayAdjustments = mResources.getDisplayAdjustments();
+ if (mDisplay == null) {
+ return mResourcesManager.getAdjustedDisplay(Display.DEFAULT_DISPLAY,
+ displayAdjustments);
+ }
+
+ if (!mDisplay.getDisplayAdjustments().equals(displayAdjustments)) {
+ mDisplay = mResourcesManager.getAdjustedDisplay(mDisplay.getDisplayId(),
+ displayAdjustments);
+ }
+ return mDisplay;
+ }
+
+ @Override
public DisplayAdjustments getDisplayAdjustments(int displayId) {
- return mDisplayAdjustments;
+ return mResources.getDisplayAdjustments();
}
@Override
@@ -2057,11 +2062,6 @@
? packageInfo.getCompatibilityInfo()
: CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;
}
- mDisplayAdjustments.setCompatibilityInfo(compatInfo);
- mDisplayAdjustments.setConfiguration(overrideConfiguration);
-
- mDisplay = (createDisplayWithId == Display.INVALID_DISPLAY) ? display
- : ResourcesManager.getInstance().getAdjustedDisplay(displayId, mDisplayAdjustments);
Resources resources = packageInfo.getResources(mainThread);
if (resources != null) {
@@ -2101,6 +2101,9 @@
}
mResources = resources;
+ mDisplay = (createDisplayWithId == Display.INVALID_DISPLAY) ? display
+ : mResourcesManager.getAdjustedDisplay(displayId, mResources.getDisplayAdjustments());
+
if (container != null) {
mBasePackageName = container.mBasePackageName;
mOpPackageName = container.mOpPackageName;
diff --git a/core/java/android/app/Presentation.java b/core/java/android/app/Presentation.java
index e110dcb..70007f5 100644
--- a/core/java/android/app/Presentation.java
+++ b/core/java/android/app/Presentation.java
@@ -310,7 +310,7 @@
final WindowManagerImpl outerWindowManager =
(WindowManagerImpl)outerContext.getSystemService(Context.WINDOW_SERVICE);
final WindowManagerImpl displayWindowManager =
- outerWindowManager.createPresentationWindowManager(display);
+ outerWindowManager.createPresentationWindowManager(displayContext);
return new ContextThemeWrapper(displayContext, theme) {
@Override
public Object getSystemService(String name) {
diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java
index f56a6ad..cc2f621 100644
--- a/core/java/android/app/ResourcesManager.java
+++ b/core/java/android/app/ResourcesManager.java
@@ -304,10 +304,11 @@
}
private @NonNull ResourcesImpl createResourcesImpl(@NonNull ResourcesKey key) {
- AssetManager assets = createAssetManager(key);
- DisplayMetrics dm = getDisplayMetrics(key.mDisplayId);
- Configuration config = generateConfig(key, dm);
- ResourcesImpl impl = new ResourcesImpl(assets, dm, config, key.mCompatInfo);
+ final AssetManager assets = createAssetManager(key);
+ final DisplayMetrics dm = getDisplayMetrics(key.mDisplayId);
+ final Configuration config = generateConfig(key, dm);
+ final ResourcesImpl impl = new ResourcesImpl(assets, dm, config, key.mCompatInfo,
+ key.mOverrideConfiguration);
if (DEBUG) {
Slog.d(TAG, "- creating impl=" + impl + " with key: " + key);
}
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 7cd13ea..55744b9 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -559,7 +559,7 @@
new CachedServiceFetcher<WindowManager>() {
@Override
public WindowManager createService(ContextImpl ctx) {
- return new WindowManagerImpl(ctx.getDisplay());
+ return new WindowManagerImpl(ctx);
}});
registerService(Context.USER_SERVICE, UserManager.class,
diff --git a/core/java/android/app/job/JobInfo.java b/core/java/android/app/job/JobInfo.java
index c4ca82e..5823abf 100644
--- a/core/java/android/app/job/JobInfo.java
+++ b/core/java/android/app/job/JobInfo.java
@@ -28,6 +28,7 @@
import android.util.Log;
import java.util.ArrayList;
+import java.util.Objects;
/**
* Container of data passed to the {@link android.app.job.JobScheduler} fully encapsulating the
@@ -494,6 +495,20 @@
return mFlags;
}
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof TriggerContentUri)) {
+ return false;
+ }
+ TriggerContentUri t = (TriggerContentUri) o;
+ return Objects.equals(t.mUri, mUri) && t.mFlags == mFlags;
+ }
+
+ @Override
+ public int hashCode() {
+ return (mUri == null ? 0 : mUri.hashCode()) ^ mFlags;
+ }
+
private TriggerContentUri(Parcel in) {
mUri = Uri.CREATOR.createFromParcel(in);
mFlags = in.readInt();
diff --git a/core/java/android/app/usage/NetworkStatsManager.java b/core/java/android/app/usage/NetworkStatsManager.java
index 720c84a..7961a72 100644
--- a/core/java/android/app/usage/NetworkStatsManager.java
+++ b/core/java/android/app/usage/NetworkStatsManager.java
@@ -305,7 +305,8 @@
*/
public void registerUsageCallback(int networkType, String subscriberId, long thresholdBytes,
UsageCallback callback) {
- registerUsageCallback(networkType, subscriberId, thresholdBytes, null /* handler */);
+ registerUsageCallback(networkType, subscriberId, thresholdBytes, callback,
+ null /* handler */);
}
/**
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 0881c9c..bdf888f 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -4279,6 +4279,11 @@
public abstract DisplayAdjustments getDisplayAdjustments(int displayId);
/**
+ * @hide
+ */
+ public abstract Display getDisplay();
+
+ /**
* Indicates whether this Context is restricted.
*
* @return {@code true} if this Context is restricted, {@code false} otherwise.
diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java
index 087ac47..60da63e 100644
--- a/core/java/android/content/ContextWrapper.java
+++ b/core/java/android/content/ContextWrapper.java
@@ -819,6 +819,14 @@
return mBase.getDisplayAdjustments(displayId);
}
+ /**
+ * @hide
+ */
+ @Override
+ public Display getDisplay() {
+ return mBase.getDisplay();
+ }
+
@Override
public Context createDeviceProtectedStorageContext() {
return mBase.createDeviceProtectedStorageContext();
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 54a5968..7820cbe 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -51,6 +51,7 @@
import android.util.LongSparseArray;
import android.util.Pools.SynchronizedPool;
import android.util.TypedValue;
+import android.view.DisplayAdjustments;
import android.view.ViewDebug;
import android.view.ViewHierarchyEncoder;
@@ -1800,6 +1801,11 @@
return mResourcesImpl.getDisplayMetrics();
}
+ /** @hide */
+ public DisplayAdjustments getDisplayAdjustments() {
+ return mResourcesImpl.getDisplayAdjustments();
+ }
+
/**
* Return the current configuration that is in effect for this resource
* object. The returned object should be treated as read-only.
diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java
index 000751e..0f140e9 100644
--- a/core/java/android/content/res/ResourcesImpl.java
+++ b/core/java/android/content/res/ResourcesImpl.java
@@ -44,6 +44,8 @@
import android.util.Slog;
import android.util.TypedValue;
import android.util.Xml;
+import android.view.Display;
+import android.view.DisplayAdjustments;
import java.io.InputStream;
import java.util.Arrays;
@@ -111,7 +113,8 @@
final AssetManager mAssets;
- final DisplayMetrics mMetrics = new DisplayMetrics();
+ private final DisplayMetrics mMetrics = new DisplayMetrics();
+ private final DisplayAdjustments mDisplayAdjustments = new DisplayAdjustments();
private PluralRules mPluralRule;
@@ -134,14 +137,42 @@
* selecting/computing resource values (optional).
* @param compatInfo this resource's compatibility info. Must not be null.
*/
- public ResourcesImpl(AssetManager assets, DisplayMetrics metrics, Configuration config,
- CompatibilityInfo compatInfo) {
+ public ResourcesImpl(@NonNull AssetManager assets, @Nullable DisplayMetrics metrics,
+ @Nullable Configuration config, @NonNull CompatibilityInfo compatInfo) {
+ this(assets, metrics, config, compatInfo, null);
+ }
+
+ /**
+ * Creates a new ResourcesImpl object with CompatibilityInfo and assigns a static overrideConfig
+ * that is reported with getDisplayAdjustments(). This is used for updating the Display
+ * when a new ResourcesImpl is created due to multi-window configuration changes.
+ *
+ * @param assets Previously created AssetManager.
+ * @param metrics Current display metrics to consider when selecting/computing resource values.
+ * @param fullConfig Desired device configuration to consider when selecting/computing
+ * resource values.
+ * @param compatInfo this resource's compatibility info. Must not be null.
+ * @param overrideConfig the overrides specific to this ResourcesImpl object. They must already
+ * be applied to the fullConfig and are mainly maintained in order to return a valid
+ * DisplayAdjustments object during configuration changes.
+ */
+ public ResourcesImpl(@NonNull AssetManager assets, @Nullable DisplayMetrics metrics,
+ @Nullable Configuration fullConfig, @NonNull CompatibilityInfo compatInfo,
+ @Nullable Configuration overrideConfig) {
mAssets = assets;
mMetrics.setToDefaults();
- updateConfiguration(config, metrics, compatInfo);
+ mDisplayAdjustments.setCompatibilityInfo(compatInfo);
+ if (overrideConfig != null) {
+ mDisplayAdjustments.setConfiguration(overrideConfig);
+ }
+ updateConfiguration(fullConfig, metrics, compatInfo);
mAssets.ensureStringBlocks();
}
+ public DisplayAdjustments getDisplayAdjustments() {
+ return mDisplayAdjustments;
+ }
+
public AssetManager getAssets() {
return mAssets;
}
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index f4bf3ea..4acb729 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -2385,6 +2385,13 @@
public abstract LongCounter getDischargeCoulombCounter();
/**
+ * Returns the estimated real battery capacity, which may be less than the capacity
+ * declared by the PowerProfile.
+ * @return The estimated battery capacity in mAh.
+ */
+ public abstract int getEstimatedBatteryCapacity();
+
+ /**
* Return the array of discharge step durations.
*/
public abstract LevelStepTracker getDischargeLevelStepTracker();
@@ -2836,7 +2843,8 @@
whichBatteryRealtime / 1000, whichBatteryUptime / 1000,
totalRealtime / 1000, totalUptime / 1000,
getStartClockTime(),
- whichBatteryScreenOffRealtime / 1000, whichBatteryScreenOffUptime / 1000);
+ whichBatteryScreenOffRealtime / 1000, whichBatteryScreenOffUptime / 1000,
+ getEstimatedBatteryCapacity());
// Calculate wakelock times across all uids.
@@ -3348,6 +3356,16 @@
final SparseArray<? extends Uid> uidStats = getUidStats();
final int NU = uidStats.size();
+ final int estimatedBatteryCapacity = getEstimatedBatteryCapacity();
+ if (estimatedBatteryCapacity > 0) {
+ sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" Estimated battery capacity: ");
+ sb.append(BatteryStatsHelper.makemAh(estimatedBatteryCapacity));
+ sb.append(" mAh");
+ pw.println(sb.toString());
+ }
+
sb.setLength(0);
sb.append(prefix);
sb.append(" Time on battery: ");
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 4506f51..f664e70 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -1184,6 +1184,8 @@
/** @hide */
public static final int PROC_QUOTES = 0x400;
/** @hide */
+ public static final int PROC_CHAR = 0x800;
+ /** @hide */
public static final int PROC_OUT_STRING = 0x1000;
/** @hide */
public static final int PROC_OUT_LONG = 0x2000;
diff --git a/core/java/android/security/NetworkSecurityPolicy.java b/core/java/android/security/NetworkSecurityPolicy.java
index 331063e..1b1c300 100644
--- a/core/java/android/security/NetworkSecurityPolicy.java
+++ b/core/java/android/security/NetworkSecurityPolicy.java
@@ -17,7 +17,10 @@
package android.security;
import android.annotation.TestApi;
+import android.content.Context;
+import android.content.pm.PackageManager;
import android.security.net.config.ApplicationConfig;
+import android.security.net.config.ManifestConfigSource;
/**
* Network security policy.
@@ -98,4 +101,16 @@
public void handleTrustStorageUpdate() {
ApplicationConfig.getDefaultInstance().handleTrustStorageUpdate();
}
+
+ /**
+ * Returns an {@link ApplicationConfig} based on the configuration for {@code packageName}.
+ *
+ * @hide
+ */
+ public static ApplicationConfig getApplicationConfigForPackage(Context context,
+ String packageName) throws PackageManager.NameNotFoundException {
+ Context appContext = context.createPackageContext(packageName, 0);
+ ManifestConfigSource source = new ManifestConfigSource(appContext);
+ return new ApplicationConfig(source);
+ }
}
diff --git a/core/java/android/service/quicksettings/IQSService.aidl b/core/java/android/service/quicksettings/IQSService.aidl
index 747f185..bf96357 100644
--- a/core/java/android/service/quicksettings/IQSService.aidl
+++ b/core/java/android/service/quicksettings/IQSService.aidl
@@ -23,6 +23,7 @@
* @hide
*/
interface IQSService {
+ Tile getTile(in ComponentName component);
void updateQsTile(in Tile tile);
void updateStatusIcon(in Tile tile, in Icon icon,
String contentDescription);
diff --git a/core/java/android/service/quicksettings/TileService.java b/core/java/android/service/quicksettings/TileService.java
index 67793fd..55cfb49 100644
--- a/core/java/android/service/quicksettings/TileService.java
+++ b/core/java/android/service/quicksettings/TileService.java
@@ -123,11 +123,6 @@
/**
* @hide
*/
- public static final String EXTRA_TILE = "tile";
-
- /**
- * @hide
- */
public static final String EXTRA_COMPONENT = "android.service.quicksettings.extra.COMPONENT";
private final H mHandler = new H(Looper.getMainLooper());
@@ -315,9 +310,16 @@
@Override
public IBinder onBind(Intent intent) {
- mTile = intent.getParcelableExtra(EXTRA_TILE);
mService = IQSService.Stub.asInterface(intent.getIBinderExtra(EXTRA_SERVICE));
- mTile.setService(mService);
+ try {
+ mTile = mService.getTile(new ComponentName(getPackageName(), getClass().getName()));
+ } catch (RemoteException e) {
+ throw new RuntimeException("Unable to reach IQSService", e);
+ }
+ if (mTile != null) {
+ mTile.setService(mService);
+ mHandler.sendEmptyMessage(H.MSG_START_SUCCESS);
+ }
return new IQSTileService.Stub() {
@Override
public void onTileRemoved() throws RemoteException {
@@ -358,6 +360,7 @@
private static final int MSG_TILE_REMOVED = 4;
private static final int MSG_TILE_CLICKED = 5;
private static final int MSG_UNLOCK_COMPLETE = 6;
+ private static final int MSG_START_SUCCESS = 7;
public H(Looper looper) {
super(looper);
@@ -397,6 +400,12 @@
mUnlockRunnable.run();
}
break;
+ case MSG_START_SUCCESS:
+ try {
+ mService.onStartSuccessful(mTile);
+ } catch (RemoteException e) {
+ }
+ break;
}
}
}
diff --git a/core/java/android/view/DisplayAdjustments.java b/core/java/android/view/DisplayAdjustments.java
index 272740f..6cc0508 100644
--- a/core/java/android/view/DisplayAdjustments.java
+++ b/core/java/android/view/DisplayAdjustments.java
@@ -23,8 +23,6 @@
/** @hide */
public class DisplayAdjustments {
- public static final boolean DEVELOPMENT_RESOURCES_DEPEND_ON_ACTIVITY_TOKEN = false;
-
public static final DisplayAdjustments DEFAULT_DISPLAY_ADJUSTMENTS = new DisplayAdjustments();
private volatile CompatibilityInfo mCompatInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;
@@ -74,10 +72,8 @@
@Override
public int hashCode() {
int hash = 17;
- hash = hash * 31 + mCompatInfo.hashCode();
- if (DEVELOPMENT_RESOURCES_DEPEND_ON_ACTIVITY_TOKEN) {
- hash = hash * 31 + (mConfiguration == null ? 0 : mConfiguration.hashCode());
- }
+ hash = hash * 31 + Objects.hashCode(mCompatInfo);
+ hash = hash * 31 + Objects.hashCode(mConfiguration);
return hash;
}
diff --git a/core/java/android/view/DragAndDropPermissions.java b/core/java/android/view/DragAndDropPermissions.java
index a3dbdb1..71afaaa 100644
--- a/core/java/android/view/DragAndDropPermissions.java
+++ b/core/java/android/view/DragAndDropPermissions.java
@@ -16,12 +16,14 @@
package android.view;
+import android.app.Activity;
import android.app.ActivityManagerNative;
import android.os.IBinder;
+import android.os.Parcel;
+import android.os.Parcelable;
import android.os.RemoteException;
-import com.android.internal.view.IDragAndDropPermissions;
-import dalvik.system.CloseGuard;
+import com.android.internal.view.IDragAndDropPermissions;
/**
* {@link DragAndDropPermissions} controls the access permissions for the content URIs associated
@@ -33,20 +35,27 @@
* Which permissions are granted is defined by the set of flags passed to {@link
* View#startDragAndDrop(android.content.ClipData, View.DragShadowBuilder, Object, int)
* View.startDragAndDrop} by the app that started the drag operation.
+ * </p>
* <p>
* The life cycle of the permissions is bound to the activity used to call {@link
* android.app.Activity#requestDragAndDropPermissions(DragEvent) requestDragAndDropPermissions}. The
* permissions are revoked when this activity is destroyed, or when {@link #release()} is called,
* whichever occurs first.
+ * </p>
+ * <p>
+ * If you anticipate that your application will receive a large number of drops (e.g. document
+ * editor), you should try to call {@link #release()} on the obtained permissions as soon as they
+ * are no longer required. Permissions can be added to your activity's
+ * {@link Activity#onSaveInstanceState} bundle and later retrieved in order to manually release
+ * the permissions once they are no longer needed.
+ * </p>
*/
-public final class DragAndDropPermissions {
+public final class DragAndDropPermissions implements Parcelable {
private final IDragAndDropPermissions mDragAndDropPermissions;
private IBinder mPermissionOwnerToken;
- private final CloseGuard mCloseGuard = CloseGuard.get();
-
/**
* Create a new {@link DragAndDropPermissions} object to control the access permissions for
* content URIs associated with {@link DragEvent}.
@@ -79,7 +88,6 @@
} catch (RemoteException e) {
return false;
}
- mCloseGuard.open("release");
return true;
}
@@ -96,7 +104,6 @@
} catch (RemoteException e) {
return false;
}
- mCloseGuard.open("release");
return true;
}
@@ -109,18 +116,34 @@
mPermissionOwnerToken = null;
} catch (RemoteException e) {
}
- mCloseGuard.close();
+ }
+
+ public static final Parcelable.Creator<DragAndDropPermissions> CREATOR =
+ new Parcelable.Creator<DragAndDropPermissions> () {
+ @Override
+ public DragAndDropPermissions createFromParcel(Parcel source) {
+ return new DragAndDropPermissions(source);
+ }
+
+ @Override
+ public DragAndDropPermissions[] newArray(int size) {
+ return new DragAndDropPermissions[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
}
@Override
- protected void finalize() throws Throwable {
- try {
- if (mCloseGuard != null) {
- mCloseGuard.warnIfOpen();
- }
- release();
- } finally {
- super.finalize();
- }
+ public void writeToParcel(Parcel destination, int flags) {
+ destination.writeStrongInterface(mDragAndDropPermissions);
+ destination.writeStrongBinder(mPermissionOwnerToken);
+ }
+
+ private DragAndDropPermissions(Parcel in) {
+ mDragAndDropPermissions = IDragAndDropPermissions.Stub.asInterface(in.readStrongBinder());
+ mPermissionOwnerToken = in.readStrongBinder();
}
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 48bdcb2..b3daa16 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -26,7 +26,9 @@
import android.Manifest;
import android.animation.LayoutTransition;
+import android.annotation.NonNull;
import android.app.ActivityManagerNative;
+import android.app.ResourcesManager;
import android.content.ClipDescription;
import android.content.ComponentCallbacks;
import android.content.Context;
@@ -163,7 +165,7 @@
final ArrayList<WindowCallbacks> mWindowCallbacks = new ArrayList<>();
final Context mContext;
final IWindowSession mWindowSession;
- final Display mDisplay;
+ @NonNull Display mDisplay;
final DisplayManager mDisplayManager;
final String mBasePackageName;
@@ -307,8 +309,6 @@
boolean mAdded;
boolean mAddedTouchMode;
- final DisplayAdjustments mDisplayAdjustments;
-
// These are accessed by multiple threads.
final Rect mWinFrame; // frame given by window manager.
@@ -412,9 +412,6 @@
mWindowSession = WindowManagerGlobal.getWindowSession();
mDisplay = display;
mBasePackageName = context.getBasePackageName();
-
- mDisplayAdjustments = display.getDisplayAdjustments();
-
mThread = Thread.currentThread();
mLocation = new WindowLeaked(null);
mLocation.fillInStackTrace();
@@ -588,7 +585,8 @@
attrs.setSurfaceInsets(view, false /*manual*/, true /*preservePrevious*/);
}
- CompatibilityInfo compatibilityInfo = mDisplayAdjustments.getCompatibilityInfo();
+ CompatibilityInfo compatibilityInfo =
+ mDisplay.getDisplayAdjustments().getCompatibilityInfo();
mTranslator = compatibilityInfo.getTranslator();
// If the application owns the surface, don't enable hardware acceleration
@@ -1468,7 +1466,8 @@
surfaceChanged = true;
params = lp;
}
- CompatibilityInfo compatibilityInfo = mDisplayAdjustments.getCompatibilityInfo();
+ CompatibilityInfo compatibilityInfo =
+ mDisplay.getDisplayAdjustments().getCompatibilityInfo();
if (compatibilityInfo.supportsScreen() == mLastInCompatMode) {
params = lp;
mFullRedrawNeeded = true;
@@ -3306,7 +3305,7 @@
+ mWindowAttributes.getTitle()
+ ": " + config);
- CompatibilityInfo ci = mDisplayAdjustments.getCompatibilityInfo();
+ CompatibilityInfo ci = mDisplay.getDisplayAdjustments().getCompatibilityInfo();
if (!ci.equals(CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO)) {
config = new Configuration(config);
ci.applyToConfiguration(mNoncompatDensity, config);
@@ -3321,8 +3320,13 @@
// At this point the resources have been updated to
// have the most recent config, whatever that is. Use
// the one in them which may be newer.
- config = mView.getResources().getConfiguration();
+ final Resources localResources = mView.getResources();
+ config = localResources.getConfiguration();
if (force || mLastConfiguration.diff(config) != 0) {
+ // Update the display with new DisplayAdjustments.
+ mDisplay = ResourcesManager.getInstance().getAdjustedDisplay(
+ mDisplay.getDisplayId(), localResources.getDisplayAdjustments());
+
final int lastLayoutDirection = mLastConfiguration.getLayoutDirection();
final int currentLayoutDirection = config.getLayoutDirection();
mLastConfiguration.setTo(config);
diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java
index f8c7d68..dd4e096 100644
--- a/core/java/android/view/WindowManagerImpl.java
+++ b/core/java/android/view/WindowManagerImpl.java
@@ -55,26 +55,26 @@
*/
public final class WindowManagerImpl implements WindowManager {
private final WindowManagerGlobal mGlobal = WindowManagerGlobal.getInstance();
- private final Display mDisplay;
+ private final Context mContext;
private final Window mParentWindow;
private IBinder mDefaultToken;
- public WindowManagerImpl(Display display) {
- this(display, null);
+ public WindowManagerImpl(Context context) {
+ this(context, null);
}
- private WindowManagerImpl(Display display, Window parentWindow) {
- mDisplay = display;
+ private WindowManagerImpl(Context context, Window parentWindow) {
+ mContext = context;
mParentWindow = parentWindow;
}
public WindowManagerImpl createLocalWindowManager(Window parentWindow) {
- return new WindowManagerImpl(mDisplay, parentWindow);
+ return new WindowManagerImpl(mContext, parentWindow);
}
- public WindowManagerImpl createPresentationWindowManager(Display display) {
- return new WindowManagerImpl(display, mParentWindow);
+ public WindowManagerImpl createPresentationWindowManager(Context displayContext) {
+ return new WindowManagerImpl(displayContext, mParentWindow);
}
/**
@@ -90,7 +90,7 @@
@Override
public void addView(@NonNull View view, @NonNull ViewGroup.LayoutParams params) {
applyDefaultToken(params);
- mGlobal.addView(view, params, mDisplay, mParentWindow);
+ mGlobal.addView(view, params, mContext.getDisplay(), mParentWindow);
}
@Override
@@ -144,6 +144,6 @@
@Override
public Display getDefaultDisplay() {
- return mDisplay;
+ return mContext.getDisplay();
}
}
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index 3f6e625..19aa1a8 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -1517,13 +1517,9 @@
anchor.getWindowVisibleDisplayFrame(displayFrame);
if (width == MATCH_PARENT) {
width = displayFrame.right - displayFrame.left;
- } else if (width == WRAP_CONTENT) {
- width = mContentView.getMeasuredWidth();
}
if (height == MATCH_PARENT) {
height = displayFrame.bottom - displayFrame.top;
- } else if (height == WRAP_CONTENT) {
- height = mContentView.getMeasuredHeight();
}
// Let the window manager know to align the top to y.
diff --git a/core/java/com/android/internal/app/LocaleStore.java b/core/java/com/android/internal/app/LocaleStore.java
index e3fce51..e782c3c 100644
--- a/core/java/com/android/internal/app/LocaleStore.java
+++ b/core/java/com/android/internal/app/LocaleStore.java
@@ -307,6 +307,9 @@
localizedLocales.add(li.getLangScriptKey());
}
+ // Serbian in Latin script is only partially localized in N.
+ localizedLocales.remove("sr-Latn");
+
for (LocaleInfo li : sLocaleCache.values()) {
li.setTranslated(localizedLocales.contains(li.getLangScriptKey()));
}
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 07d38d7..a1df8c1 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -108,7 +108,7 @@
private static final int MAGIC = 0xBA757475; // 'BATSTATS'
// Current on-disk Parcel version
- private static final int VERSION = 146 + (USE_OLD_HISTORY ? 1000 : 0);
+ private static final int VERSION = 147 + (USE_OLD_HISTORY ? 1000 : 0);
// Maximum number of items we will record in the history.
private static final int MAX_HISTORY_ITEMS = 2000;
@@ -547,6 +547,8 @@
private int mLoadedNumConnectivityChange;
private int mUnpluggedNumConnectivityChange;
+ private int mEstimatedBatteryCapacity = -1;
+
private final NetworkStats.Entry mTmpNetworkStatsEntry = new NetworkStats.Entry();
private PowerProfile mPowerProfile;
@@ -578,6 +580,11 @@
return mDischargeCounter;
}
+ @Override
+ public int getEstimatedBatteryCapacity() {
+ return mEstimatedBatteryCapacity;
+ }
+
public BatteryStatsImpl() {
this(new SystemClocks());
}
@@ -7625,6 +7632,11 @@
numSpeedSteps);
firstCpuOfCluster += mPowerProfile.getNumCoresInCpuCluster(i);
}
+
+ if (mEstimatedBatteryCapacity == -1) {
+ // Initialize the estimated battery capacity to a known preset one.
+ mEstimatedBatteryCapacity = (int) mPowerProfile.getBatteryCapacity();
+ }
}
}
@@ -8174,6 +8186,12 @@
for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
mScreenBrightnessTimer[i].reset(false);
}
+
+ if (mPowerProfile != null) {
+ mEstimatedBatteryCapacity = (int) mPowerProfile.getBatteryCapacity();
+ } else {
+ mEstimatedBatteryCapacity = -1;
+ }
mInteractiveTimer.reset(false);
mPowerSaveModeEnabledTimer.reset(false);
mLastIdleTimeStart = elapsedRealtimeMillis;
@@ -9158,7 +9176,7 @@
}
void setOnBatteryLocked(final long mSecRealtime, final long mSecUptime, final boolean onBattery,
- final int oldStatus, final int level) {
+ final int oldStatus, final int level, final int chargeUAh) {
boolean doWrite = false;
Message m = mHandler.obtainMessage(MSG_REPORT_POWER_CHANGE);
m.arg1 = onBattery ? 1 : 0;
@@ -9212,6 +9230,10 @@
}
doWrite = true;
resetAllStatsLocked();
+ if (chargeUAh > 0) {
+ // Only use the reported coulomb charge value if it is supported and reported.
+ mEstimatedBatteryCapacity = (int) ((level / 100.0) * (chargeUAh / 1000));
+ }
mDischargeStartLevel = level;
reset = true;
mDischargeStepTracker.init();
@@ -9379,7 +9401,7 @@
mDischargeScreenOffCounter.addCountLocked(chargeDiff);
}
mHistoryCur.batteryChargeUAh = chargeUAh;
- setOnBatteryLocked(elapsedRealtime, uptime, onBattery, oldStatus, level);
+ setOnBatteryLocked(elapsedRealtime, uptime, onBattery, oldStatus, level, chargeUAh);
} else {
boolean changed = false;
if (mHistoryCur.batteryLevel != level) {
@@ -10093,6 +10115,7 @@
mDischargePlugLevel = in.readInt();
mDischargeCurrentLevel = in.readInt();
mCurrentBatteryLevel = in.readInt();
+ mEstimatedBatteryCapacity = in.readInt();
mLowDischargeAmountSinceCharge = in.readInt();
mHighDischargeAmountSinceCharge = in.readInt();
mDischargeAmountScreenOnSinceCharge = in.readInt();
@@ -10445,6 +10468,7 @@
out.writeInt(mDischargePlugLevel);
out.writeInt(mDischargeCurrentLevel);
out.writeInt(mCurrentBatteryLevel);
+ out.writeInt(mEstimatedBatteryCapacity);
out.writeInt(getLowDischargeAmountSinceCharge());
out.writeInt(getHighDischargeAmountSinceCharge());
out.writeInt(getDischargeAmountScreenOnSinceCharge());
@@ -10809,6 +10833,7 @@
mRealtime = in.readLong();
mRealtimeStart = in.readLong();
mOnBattery = in.readInt() != 0;
+ mEstimatedBatteryCapacity = in.readInt();
mOnBatteryInternal = false; // we are no longer really running.
mOnBatteryTimeBase.readFromParcel(in);
mOnBatteryScreenOffTimeBase.readFromParcel(in);
@@ -10992,6 +11017,7 @@
out.writeLong(mRealtime);
out.writeLong(mRealtimeStart);
out.writeInt(mOnBattery ? 1 : 0);
+ out.writeInt(mEstimatedBatteryCapacity);
mOnBatteryTimeBase.writeToParcel(out, uSecUptime, uSecRealtime);
mOnBatteryScreenOffTimeBase.writeToParcel(out, uSecUptime, uSecRealtime);
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp
index f7a5e8a..3d952b0 100644
--- a/core/jni/android_util_Process.cpp
+++ b/core/jni/android_util_Process.cpp
@@ -832,6 +832,7 @@
PROC_COMBINE = 0x100,
PROC_PARENS = 0x200,
PROC_QUOTES = 0x400,
+ PROC_CHAR = 0x800,
PROC_OUT_STRING = 0x1000,
PROC_OUT_LONG = 0x2000,
PROC_OUT_FLOAT = 0x4000,
@@ -933,8 +934,13 @@
floatsData[di] = strtof(buffer+start, &end);
}
if ((mode&PROC_OUT_LONG) != 0 && di < NL) {
- char* end;
- longsData[di] = strtoll(buffer+start, &end, 10);
+ if ((mode&PROC_CHAR) != 0) {
+ // Caller wants single first character returned as one long.
+ longsData[di] = buffer[start];
+ } else {
+ char* end;
+ longsData[di] = strtoll(buffer+start, &end, 10);
+ }
}
if ((mode&PROC_OUT_STRING) != 0 && di < NS) {
jstring str = env->NewStringUTF(buffer+start);
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index c03fb5b..b1c5b04 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skaal"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Wys altyd"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Heraktiveer hierdie in Stelselinstellings > Programme > Afgelaai."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Die program <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) het sy selfopgelegde StrictMode-beleid oortree."</string>
<string name="smv_process" msgid="5120397012047462446">"Die proses <xliff:g id="PROCESS">%1$s</xliff:g> het die selfopgelegde StrictMode-beleid geskend."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android gradeer tans op..."</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 55f0f2a..a8a7981 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"የልኬት ለውጥ"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"ሁልጊዜ አሳይ"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"በስርዓት ቅንብሮች ውስጥ ይሄንን ዳግም አንቃ> Apps &gt፤ወርዷል፡፡"</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"መተግበሪያው <xliff:g id="APPLICATION">%1$s</xliff:g>( ሂደት<xliff:g id="PROCESS">%2$s</xliff:g>) በራስ ተነሳሺ StrictMode ደንብን ይተላለፋል።"</string>
<string name="smv_process" msgid="5120397012047462446">"ሂደቱ <xliff:g id="PROCESS">%1$s</xliff:g> በራስ ተነሳሺ StrictMode ፖሊሲን ይተላለፋል።"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android እያሻሻለ ነው..."</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index bd6de2e..449f898 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -1107,6 +1107,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"تدرج"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"الإظهار دائمًا"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"يمكنك إعادة تمكين هذا في إعدادات النظام > التطبيقات > ما تم تنزيله."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"انتهك التطبيق <xliff:g id="APPLICATION">%1$s</xliff:g> (العملية <xliff:g id="PROCESS">%2$s</xliff:g>) سياسة StrictMode المفروضة ذاتيًا."</string>
<string name="smv_process" msgid="5120397012047462446">"انتهكت العملية <xliff:g id="PROCESS">%1$s</xliff:g> سياسة StrictMode المفروضة ذاتيًا."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"جارٍ ترقية Android..."</string>
diff --git a/core/res/res/values-az-rAZ/strings.xml b/core/res/res/values-az-rAZ/strings.xml
index 17712b0..7f55ba1 100644
--- a/core/res/res/values-az-rAZ/strings.xml
+++ b/core/res/res/values-az-rAZ/strings.xml
@@ -1015,6 +1015,8 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Miqyas"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Həmişə göstər"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Bunları Sistem ayarlarında yenidən aktivləşdir Yüklənmiş > Tətbiqlər >."</string>
+ <string name="unsupported_display_size_message" msgid="6545327290756295232">"<xliff:g id="APP_NAME">%1$s</xliff:g> cari Ekran ölçüsü ayarını dəstəkləmir və gözlənilməz şəkildə davrana bilər."</string>
+ <string name="unsupported_display_size_show" msgid="7969129195360353041">"Həmişə göstərin"</string>
<string name="smv_application" msgid="3307209192155442829">"Tətbiq <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) StrictMode siyasətini pozdu."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> prosesi StrictMode siyasətini pozdu."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android təkmilləşdirilir..."</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 1620f63..b3f6a3e 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -1038,6 +1038,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Razmera"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Uvek prikazuj"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Ponovo omogućite u meniju Sistemska podešavanja > Aplikacije > Preuzeto."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Aplikacija <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) je prekršila samonametnute StrictMode smernice."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> je prekršio samonametnute StrictMode smernice."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android se nadograđuje…"</string>
diff --git a/core/res/res/values-be-rBY/strings.xml b/core/res/res/values-be-rBY/strings.xml
index 6cdef81..a39bed1 100644
--- a/core/res/res/values-be-rBY/strings.xml
+++ b/core/res/res/values-be-rBY/strings.xml
@@ -1061,6 +1061,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Шкала"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Заўсёды паказваць"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Зноў уключыце гэта ў раздзеле \"Сістэмныя налады > Прыкладанні > Спампаваныя\"."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Прыкладанне <xliff:g id="APPLICATION">%1$s</xliff:g> (працэс <xliff:g id="PROCESS">%2$s</xliff:g>) парушыла ўласную палітыку StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Працэс <xliff:g id="PROCESS">%1$s</xliff:g> парушыў уласную палітыку StrictMode."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Абнаўленне Android..."</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index ef9d524..f38c7dd 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Мащаб"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Винаги да се показва"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Активирайте отново това в „Системни настройки“ > „Приложения“ > „Изтеглени“."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Приложението „<xliff:g id="APPLICATION">%1$s</xliff:g>“ (процес „<xliff:g id="PROCESS">%2$s</xliff:g>“) наруши правилото за стриктен режим, наложено от самото него."</string>
<string name="smv_process" msgid="5120397012047462446">"Процесът <xliff:g id="PROCESS">%1$s</xliff:g> наруши правилото за стриктен режим, наложено от самия него."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android се надстройва..."</string>
diff --git a/core/res/res/values-bn-rBD/strings.xml b/core/res/res/values-bn-rBD/strings.xml
index 97e61c9..8ffee4f 100644
--- a/core/res/res/values-bn-rBD/strings.xml
+++ b/core/res/res/values-bn-rBD/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"স্কেল"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"সবসময় দেখান"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"সিস্টেম সেটিংস> অ্যাপ্স> ডাউনলোড করাগুলি এ এটি পুনঃসক্ষম করুন৷"</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"অ্যাপ্লিকেশানটি <xliff:g id="APPLICATION">%1$s</xliff:g> (প্রক্রিয়া <xliff:g id="PROCESS">%2$s</xliff:g>) তার স্ব-প্রয়োগ করা কঠোর মোড নীতি লঙ্ঘন করেছে৷"</string>
<string name="smv_process" msgid="5120397012047462446">"প্রক্রিয়াটি <xliff:g id="PROCESS">%1$s</xliff:g> তার স্ব-প্রয়োগ করা কঠোর মোড নীতি লঙ্ঘন করেছে৷"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android আপগ্রেড করা হচ্ছে..."</string>
diff --git a/core/res/res/values-bs-rBA/strings.xml b/core/res/res/values-bs-rBA/strings.xml
index bd14448..31f634b 100644
--- a/core/res/res/values-bs-rBA/strings.xml
+++ b/core/res/res/values-bs-rBA/strings.xml
@@ -1040,6 +1040,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Razmjer"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Uvijek prikaži"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Ponovo omogućite ovu opciju u meniju Postavke sistema > Aplikacije > Preuzete aplikacije."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Aplikacija <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) prekršila je vlastita StrictMode pravila."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> prekršio je vlastita StrictMode pravila."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Nadogradnja sistema Android u toku..."</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 44a8f3b..a18639c 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostra sempre"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Torna a activar-ho a Configuració del sistema > Aplicacions > Baixades."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"L\'aplicació <xliff:g id="APPLICATION">%1$s</xliff:g>(procés <xliff:g id="PROCESS">%2$s</xliff:g>) ha incomplert la seva política autoimposada de mode estricte."</string>
<string name="smv_process" msgid="5120397012047462446">"El procés <xliff:g id="PROCESS">%1$s</xliff:g> ha incomplert la seva política de mode estricte."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android s\'està actualitzant..."</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index ba33ccd..985e15c 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1061,6 +1061,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Měřítko"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Vždy zobrazovat"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Tento režim znovu povolíte v sekci Nastavení systému > Aplikace > Stažené."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) porušila své vlastní vynucené zásady StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> porušil své vlastní vynucené zásady StrictMode."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android se upgraduje..."</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index e737f55..0015654 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skaler"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Vis altid"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Aktivér dette igen i Systemindstillinger > Apps > Downloadet."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Appen <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) har overtrådt sin egen StrictMode-politik."</string>
<string name="smv_process" msgid="5120397012047462446">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> har overtrådt sin egen StrictMode-politik."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android opgraderes..."</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 6bc3e4c..830c1f8 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skalieren"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Immer anzeigen"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Eine erneute Aktivierung ist in den Systemeinstellungen unter \"Apps > Heruntergeladen\" möglich."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Die App <xliff:g id="APPLICATION">%1$s</xliff:g> (Prozess <xliff:g id="PROCESS">%2$s</xliff:g>) hat gegen deine selbsterzwungene StrictMode-Richtlinie verstoßen."</string>
<string name="smv_process" msgid="5120397012047462446">"Der Prozess <xliff:g id="PROCESS">%1$s</xliff:g> hat gegen seine selbsterzwungene StrictMode-Richtlinie verstoßen."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android wird aktualisiert..."</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 49ba0cf..100ee81 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1015,6 +1015,8 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Κλίμακα"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Να εμφανίζονται πάντα"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Ενεργοποιήστε το ξανά στις Ρυθμίσεις συστημάτων > Εφαρμογές > Ληφθείσες."</string>
+ <string name="unsupported_display_size_message" msgid="6545327290756295232">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> δεν υποστηρίζει την τρέχουσα ρύθμιση Μεγέθους οθόνης και ενδέχεται να παρουσιάζει μη αναμενόμενη συμπεριφορά."</string>
+ <string name="unsupported_display_size_show" msgid="7969129195360353041">"Να εμφανίζεται πάντα"</string>
<string name="smv_application" msgid="3307209192155442829">"Η εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g> (διεργασία <xliff:g id="PROCESS">%2$s</xliff:g>) παραβίασε την αυτοεπιβαλλόμενη πολιτική StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Η διεργασία <xliff:g id="PROCESS">%1$s</xliff:g> παραβίασε την αυτοεπιβαλόμενη πολιτική StrictMode."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Το Android αναβαθμίζεται..."</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 2f9fb4b..e45d625 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scale"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Always show"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Re-enable this in System settings > Apps > Downloaded."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"The app <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) has violated its self-enforced Strict Mode policy."</string>
<string name="smv_process" msgid="5120397012047462446">"The process <xliff:g id="PROCESS">%1$s</xliff:g> has violated its self-enforced StrictMode policy."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android is upgrading…"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 2f9fb4b..e45d625 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scale"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Always show"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Re-enable this in System settings > Apps > Downloaded."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"The app <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) has violated its self-enforced Strict Mode policy."</string>
<string name="smv_process" msgid="5120397012047462446">"The process <xliff:g id="PROCESS">%1$s</xliff:g> has violated its self-enforced StrictMode policy."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android is upgrading…"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 2f9fb4b..e45d625 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scale"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Always show"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Re-enable this in System settings > Apps > Downloaded."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"The app <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) has violated its self-enforced Strict Mode policy."</string>
<string name="smv_process" msgid="5120397012047462446">"The process <xliff:g id="PROCESS">%1$s</xliff:g> has violated its self-enforced StrictMode policy."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android is upgrading…"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 2f76a33..e2bd326 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostrar siempre"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Volver a activar Configuración del sistema > Aplicaciones > Descargas"</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (proceso <xliff:g id="PROCESS">%2$s</xliff:g>) ha infringido su política StrictMode de aplicación automática."</string>
<string name="smv_process" msgid="5120397012047462446">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> ha violado su política StrictMode autoimpuesta."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android se está actualizando..."</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 89efca1..9fff56f 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostrar siempre"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Para volver a habilitar esta opción, accede a Ajustes > Aplicaciones > Descargadas."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (proceso <xliff:g id="PROCESS">%2$s</xliff:g>) ha infringido su política StrictMode autoaplicable."</string>
<string name="smv_process" msgid="5120397012047462446">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> ha infringido su política StrictMode autoaplicable."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Actualizando Android"</string>
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml
index d8f6773..67b58d5 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et-rEE/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Mõõtkava"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Kuva alati"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Lubage see uuesti valikutes Süsteemiseaded > Rakendused > Allalaaditud."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Rakendus <xliff:g id="APPLICATION">%1$s</xliff:g> (protsess <xliff:g id="PROCESS">%2$s</xliff:g>) on rikkunud isekehtestatud StrictMode\'i eeskirju."</string>
<string name="smv_process" msgid="5120397012047462446">"Protsess <xliff:g id="PROCESS">%1$s</xliff:g> on rikkunud isejõustatud StrictMode\'i eeskirju."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android viiakse üle uuemale versioonile ..."</string>
diff --git a/core/res/res/values-eu-rES/strings.xml b/core/res/res/values-eu-rES/strings.xml
index 6e5b178..0f6702b 100644
--- a/core/res/res/values-eu-rES/strings.xml
+++ b/core/res/res/values-eu-rES/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Eskala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Erakutsi beti"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Gaitu hori berriro Sistemaren ezarpenak > Aplikazioak > Deskargatutakoak."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikazioak (<xliff:g id="PROCESS">%2$s</xliff:g> prozesua) berak aplikatutako StrictMode gidalerroa urratu du."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> prozesuak bere kabuz ezarritako StrictMode gidalerroak urratu ditu."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android bertsio-berritzen ari da…"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 01b636d..627f1e2 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"مقیاس"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"همیشه نشان داده شود"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"در تنظیمات سیستم >برنامهها > مورد بارگیری شده آن را دوباره فعال کنید."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"برنامه <xliff:g id="APPLICATION">%1$s</xliff:g> (پردازش <xliff:g id="PROCESS">%2$s</xliff:g>) خطمشی StrictMode اجرایی خود را نقض کرده است."</string>
<string name="smv_process" msgid="5120397012047462446">"فرآیند <xliff:g id="PROCESS">%1$s</xliff:g> خطمشی StrictMode اجرای خودکار خود را نقض کرده است."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android در حال ارتقا است..."</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index e59165e..ae0e0cc 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Asteikko"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Näytä aina"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Ota tämä uudelleen käyttöön kohdassa Järjestelmäasetukset > Sovellukset > Ladattu."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Sovellus <xliff:g id="APPLICATION">%1$s</xliff:g> (prosessi <xliff:g id="PROCESS">%2$s</xliff:g>) on rikkonut itse käyttöön ottamaansa StrictMode-käytäntöä."</string>
<string name="smv_process" msgid="5120397012047462446">"Prosessi <xliff:g id="PROCESS">%1$s</xliff:g> on rikkonut itse käyttöön ottamaansa StrictMode-käytäntöä."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Androidia päivitetään…"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 20d4e8a..fe346fa 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Redimensionner"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Toujours afficher"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Réactivez ce mode en accédant à Paramètres système > Applications > Téléchargements"</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"L\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (du processus <xliff:g id="PROCESS">%2$s</xliff:g>) a enfreint ses propres règles du mode strict."</string>
<string name="smv_process" msgid="5120397012047462446">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> a enfreint ses propres règles du mode strict."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Mise à jour d\'Android…"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index b7daaf4..01e7c45 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Mise à l\'échelle"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Toujours afficher"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Réactivez ce mode en accédant à Paramètres système > Applications > Téléchargements"</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"L\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (du processus <xliff:g id="PROCESS">%2$s</xliff:g>) a enfreint ses propres règles du mode strict."</string>
<string name="smv_process" msgid="5120397012047462446">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> a enfreint ses propres règles du mode strict."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Mise à jour d\'Android…"</string>
diff --git a/core/res/res/values-gl-rES/strings.xml b/core/res/res/values-gl-rES/strings.xml
index fcccc55..bebc60d 100644
--- a/core/res/res/values-gl-rES/strings.xml
+++ b/core/res/res/values-gl-rES/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostrar sempre"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Volve activar esta función en Configuración do sistema > Aplicacións > Descargadas."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"A aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (proceso <xliff:g id="PROCESS">%2$s</xliff:g>) infrinxiu a súa política StrictMode autoaplicada."</string>
<string name="smv_process" msgid="5120397012047462446">"O proceso <xliff:g id="PROCESS">%1$s</xliff:g> infrinxiu a política StrictMode de aplicación automática."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Estase actualizando Android…"</string>
diff --git a/core/res/res/values-gu-rIN/strings.xml b/core/res/res/values-gu-rIN/strings.xml
index f9dee58ff2..34a1fcf 100644
--- a/core/res/res/values-gu-rIN/strings.xml
+++ b/core/res/res/values-gu-rIN/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"સ્કેલ"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"હંમેશા બતાવો"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"આને સિસ્ટમ સેટિંગ્સ > ઍપ્લિકેશનો > ડાઉનલોડ કરેલમાં ફરીથી સક્ષમ કરો."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> ઍપ્લિકેશન (<xliff:g id="PROCESS">%2$s</xliff:g> પ્રક્રિયા)એ તેની સ્વ-લાગુ કરેલ StrictMode નીતિનું ઉલ્લંઘન કર્યું છે."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> પ્રક્રિયાએ તેની સ્વ-લાગુ કરેલ StrictMode નીતિનું ઉલ્લંઘન કર્યું છે."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android અપગ્રેડ થઈ રહ્યું છે..."</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 4b0664f..4fc8a92 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"स्केल"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"हमेशा दिखाएं"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"इसे सिस्टम सेटिंग > Apps > डाउनलोड किए गए में पुन: सक्षम करें."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"ऐप्स <xliff:g id="APPLICATION">%1$s</xliff:g> (प्रक्रिया <xliff:g id="PROCESS">%2$s</xliff:g>) ने उसकी स्वयं लागू होने वाली StrictMode नीति का उल्लंघन किया है."</string>
<string name="smv_process" msgid="5120397012047462446">"प्रक्रिया <xliff:g id="PROCESS">%1$s</xliff:g> ने उसकी स्व-प्रवर्तित StrictMode नीति का उल्लंघन किया है."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android अपग्रेड हो रहा है..."</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 766d10b..e23bdb2 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1038,6 +1038,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Mjerilo"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Uvijek prikaži"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Omogućiti to ponovo u Postavkama sustava > Aplikacije > Preuzimanja."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Aplikacija <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) prekršila je vlastito pravilo StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> prekršio je svoje vlastito pravilo StrictMode."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android se nadograđuje…"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 5609b1f..d921c0c 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skála"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Mindig megjelenik"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Újbóli engedélyezés itt: Rendszerbeállítások > Alkalmazások > Letöltve."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"A(z) <xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazás (<xliff:g id="PROCESS">%2$s</xliff:g> folyamat) megsértette az általa kényszerített Szigorú üzemmód irányelvet."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> folyamat megsértette az általa kényszerített Szigorú üzemmód irányelvet."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android frissítése folyamatban..."</string>
diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml
index d2ff283..655a9f0 100644
--- a/core/res/res/values-hy-rAM/strings.xml
+++ b/core/res/res/values-hy-rAM/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Աստիճանակարգել"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Միշտ ցույց տալ"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Կրկին ակտիվացնել սա Համակարգի կարգավորումներում &gt Ծրագրեր > Ներբեռնումներ:"</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> ծրագիրը (գործընթաց <xliff:g id="PROCESS">%2$s</xliff:g>) խախտել է իր ինքնահարկադրված Խիստ ռեժիմ քաղաքականությունը:"</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> գործընթացը խախտել է իր ինքնահարկադրված Խիստ ռեժիմ քաղաքականությունը:"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android-ը նորացվում է..."</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index da0afc8..bd17260 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1015,6 +1015,8 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Selalu tampilkan"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Aktifkan kembali dialog ini di Setelan sistem > Apl > Terunduh."</string>
+ <string name="unsupported_display_size_message" msgid="6545327290756295232">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak mendukung setelan Ukuran layar saat ini dan dapat menunjukkan perilaku yang tak diharapkan."</string>
+ <string name="unsupported_display_size_show" msgid="7969129195360353041">"Selalu tampilkan"</string>
<string name="smv_application" msgid="3307209192155442829">"Apl <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) telah melanggar kebijakan StrictMode yang diberlakukannya sendiri."</string>
<string name="smv_process" msgid="5120397012047462446">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> telah melanggar kebijakan StrictMode yang diberlakukan secara otomatis."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android sedang meningkatkan versi..."</string>
diff --git a/core/res/res/values-is-rIS/strings.xml b/core/res/res/values-is-rIS/strings.xml
index 661f5b5..d3d6e58 100644
--- a/core/res/res/values-is-rIS/strings.xml
+++ b/core/res/res/values-is-rIS/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Breyta stærð"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Sýna alltaf"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Þú getur kveikt aftur á þessu undir Kerfisstillingar > Forrit > Sótt."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Forritið <xliff:g id="APPLICATION">%1$s</xliff:g> (ferli <xliff:g id="PROCESS">%2$s</xliff:g>) hefur brotið gegn eigin StrictMode-stefnu."</string>
<string name="smv_process" msgid="5120397012047462446">"Forritið <xliff:g id="PROCESS">%1$s</xliff:g> braut gegn eigin StrictMode-stefnu."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android er að uppfæra…"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index d32e959..513c0fc 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostra sempre"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Riattivala in Impostazioni di sistema > Applicazioni > Scaricate."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"L\'applicazione <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) ha violato la norma StrictMode autoimposta."</string>
<string name="smv_process" msgid="5120397012047462446">"Il processo <xliff:g id="PROCESS">%1$s</xliff:g> ha violato la norma StrictMode autoimposta."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Aggiornamento di Android..."</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 254bba9..880aedc 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1061,6 +1061,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"שינוי קנה-מידה"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"הצג תמיד"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"אפשר תכונה זו מחדש ב\'הגדרות מערכת\' < Google Apps < \'הורדות\'."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"האפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> (תהליך <xliff:g id="PROCESS">%2$s</xliff:g>) הפר את מדיניות StrictMode באכיפה עצמית שלו."</string>
<string name="smv_process" msgid="5120397012047462446">"התהליך <xliff:g id="PROCESS">%1$s</xliff:g> הפר את מדיניות StrictMode באכיפה עצמית."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android מבצע שדרוג…"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index c7529b7..c7c404e 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1015,6 +1015,8 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"スケール"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"常に表示"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"[システム設定]>[アプリ]>[ダウンロード済み]で再度有効にします。"</string>
+ <string name="unsupported_display_size_message" msgid="6545327290756295232">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」は現在の [表示サイズ] 設定に対応していないため、予期しない動作が発生するおそれがあります。"</string>
+ <string name="unsupported_display_size_show" msgid="7969129195360353041">"常に表示"</string>
<string name="smv_application" msgid="3307209192155442829">"アプリ「<xliff:g id="APPLICATION">%1$s</xliff:g>」(プロセス「<xliff:g id="PROCESS">%2$s</xliff:g>」)でStrictModeポリシー違反がありました。"</string>
<string name="smv_process" msgid="5120397012047462446">"プロセス<xliff:g id="PROCESS">%1$s</xliff:g>でStrictModeポリシー違反がありました。"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Androidをアップグレードしています..."</string>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index 5f5ded9..f41b29f 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"მასშტაბი"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"ყოველთვის ჩვენება"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"ხელახალი გააქტიურება განყოფილებაში: სისტემის პარამეტრები > აპები > ჩამოტვირთულები."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"აპმა <xliff:g id="APPLICATION">%1$s</xliff:g> (პროცესი <xliff:g id="PROCESS">%2$s</xliff:g>) დაარღვია საკუთარი StrictMode დებულება."</string>
<string name="smv_process" msgid="5120397012047462446">"ამ პროცესმა <xliff:g id="PROCESS">%1$s</xliff:g> დააზიანა საკუთარი StrictMode დებულება."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android ახალ ვერსიაზე გადადის…"</string>
diff --git a/core/res/res/values-kk-rKZ/strings.xml b/core/res/res/values-kk-rKZ/strings.xml
index c5c19c8..0d9ac4d 100644
--- a/core/res/res/values-kk-rKZ/strings.xml
+++ b/core/res/res/values-kk-rKZ/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Меже"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Үнемі көрсету"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Мұны «Жүйелік параметрлер» > «Қолданбалар» > «Жүктелгендер» тармағында қосыңыз."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> қолданбасы (<xliff:g id="PROCESS">%2$s</xliff:g> процесі) өзі қолданған StrictMode саясатын бұзды."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> үрдісі өздігінен күшіне енген ҚатаңРежим ережесін бұзды."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android жаңартылуда…"</string>
diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml
index 36ed267..558ffdc 100644
--- a/core/res/res/values-km-rKH/strings.xml
+++ b/core/res/res/values-km-rKH/strings.xml
@@ -1017,6 +1017,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"មាត្រដ្ឋាន"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"បង្ហាញជានិច្ច"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"បើកវាឡើងវិញក្នុងការកំណត់ប្រព័ន្ធ > កម្មវិធី > ទាញយក។"</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"កម្មវិធី <xliff:g id="APPLICATION">%1$s</xliff:g> (ដំណើរការ <xliff:g id="PROCESS">%2$s</xliff:g>) បានបំពានគោលនយោបាយរបៀបតឹងរ៉ឹងអនុវត្តដោយខ្លួនឯង។"</string>
<string name="smv_process" msgid="5120397012047462446">"ដំណើរការ <xliff:g id="PROCESS">%1$s</xliff:g> បានបំពានគោលនយោបាយរបៀបតឹងរឹងបង្ខំដោយខ្លួនឯង"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android កំពុងធ្វើបច្ចុប្បន្នភាព..."</string>
diff --git a/core/res/res/values-kn-rIN/strings.xml b/core/res/res/values-kn-rIN/strings.xml
index b898e14..6068578 100644
--- a/core/res/res/values-kn-rIN/strings.xml
+++ b/core/res/res/values-kn-rIN/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"ಮಾಪಕ"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"ಯಾವಾಗಲೂ ತೋರಿಸಿ"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"ಸಿಸ್ಟಂ ಸೆಟ್ಟಿಂಗ್ಗಳು > ಅಪ್ಲಿಕೇಶನ್ಗಳು > ಡೌನ್ಲೋಡ್ ಆಗಿರುವುದರಲ್ಲಿ ಇದನ್ನು ಮರು ಸಕ್ರಿಯಗೊಳಿಸಿ."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"ಅಪ್ಲಿಕೇಶನ್ <xliff:g id="APPLICATION">%1$s</xliff:g> (ಪ್ರಕ್ರಿಯೆಯು <xliff:g id="PROCESS">%2$s</xliff:g>) ತನ್ನ ಸ್ವಯಂ-ಜಾರಿ ಕಠಿಣ ಮೋಡ್ ನೀತಿಯನ್ನು ಉಲ್ಲಂಘನೆ ಮಾಡಿದೆ."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> ಪ್ರಕ್ರಿಯೆಯು ತನ್ನ ಸ್ವಯಂ-ಜಾರಿ ಕಠಿಣ ಮೋಡ್ ನೀತಿಯನ್ನು ಉಲ್ಲಂಘನೆ ಮಾಡಿದೆ."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android ಅಪ್ಗ್ರೇಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 8a4dbc9..56c5e6d 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"배율"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"항상 표시"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"시스템 설정 > 앱 > 다운로드로 이동하여 이 모드를 다시 사용하도록 설정합니다."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"앱 <xliff:g id="APPLICATION">%1$s</xliff:g>(프로세스 <xliff:g id="PROCESS">%2$s</xliff:g>)이(가) 자체 시행 StrictMode 정책을 위반했습니다."</string>
<string name="smv_process" msgid="5120397012047462446">"프로세스(<xliff:g id="PROCESS">%1$s</xliff:g>)가 자체 시행 StrictMode 정책을 위반했습니다."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android 업그레이드 중.."</string>
diff --git a/core/res/res/values-ky-rKG/strings.xml b/core/res/res/values-ky-rKG/strings.xml
index 3ffc2b7..37d86f2 100644
--- a/core/res/res/values-ky-rKG/strings.xml
+++ b/core/res/res/values-ky-rKG/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Шкала"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Ар дайым көрсөтүлсүн"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Муну тутум жөндөөлөрүнөн кайра иштетүү > Колдонмолор > Жүктөлүп алынган."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> колдонмосу (<xliff:g id="PROCESS">%2$s</xliff:g> процесси) өз алдынча иштеткен StrictMode саясатын бузду."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> процесси өзүнүн мажбурланган StrictMode саясатын бузуп койду."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android жаңыртылууда…"</string>
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml
index 6fda52a..1ef7622 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo-rLA/strings.xml
@@ -1015,6 +1015,8 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"ຂະໜາດ"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"ສະແດງຕະຫຼອດເວລາ"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"ເປີດການເຮັດວຽກນີ້ຄືນໄດ້ໃນ ການຕັ້ງຄ່າລະບົບ > ແອັບຯ > ດາວໂຫລດແລ້ວ"</string>
+ <string name="unsupported_display_size_message" msgid="6545327290756295232">"<xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ່ຮອງຮັບການຕັ້ງຄ່າຂະໜາດສະແດງຜົນປັດຈຸບັນ ແລະ ອາດມີຄວາມຜິດພາດໄດ້."</string>
+ <string name="unsupported_display_size_show" msgid="7969129195360353041">"ສະແດງທຸກເທື່ອ"</string>
<string name="smv_application" msgid="3307209192155442829">"ແອັບຯ <xliff:g id="APPLICATION">%1$s</xliff:g> (ໂປຣເຊສ <xliff:g id="PROCESS">%2$s</xliff:g>) ໄດ້ລະເມີດນະໂຍບາຍ StrictMode ທີ່ບັງຄັບໃຊ້ດ້ວຍໂຕເອງ."</string>
<string name="smv_process" msgid="5120397012047462446">"ໂປຣເຊສ <xliff:g id="PROCESS">%1$s</xliff:g> ລະເມີດນະໂຍບາຍບັງຄັບໃຊ້ເອງ StrictMode."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"ກຳລັງອັບເກຣດ Android..."</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index adc071d..90b18a8 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1061,6 +1061,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Mastelis"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Visada rodyti"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Įgalinkite jį iš naujo nuėję į „Sistemos nustatymai“ > „Programos“ > „Atsisiųsta“."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Programa „<xliff:g id="APPLICATION">%1$s</xliff:g>“ (procesas „<xliff:g id="PROCESS">%2$s</xliff:g>“) pažeidė savo vykdomą „StrictMode“ politiką."</string>
<string name="smv_process" msgid="5120397012047462446">"„<xliff:g id="PROCESS">%1$s</xliff:g>“ procesas pažeidė savo vykdomą „StrictMode“ politiką."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"„Android“ naujovinama..."</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 47f1f26..6615d40 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1038,6 +1038,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Mērogs"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Rādīt vienmēr"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Atkārtoti iespējojiet šeit: Sistēmas iestatījumi > Lietotnes > Lejupielādētās."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Lietotne <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) ir pārkāpusi savu pašieviesto StrictMode politiku."</string>
<string name="smv_process" msgid="5120397012047462446">"Process <xliff:g id="PROCESS">%1$s</xliff:g> ir pārkāpis savu pašieviesto StrictMode politiku."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Notiek Android jaunināšana..."</string>
diff --git a/core/res/res/values-mk-rMK/strings.xml b/core/res/res/values-mk-rMK/strings.xml
index 845a42d..1d699df 100644
--- a/core/res/res/values-mk-rMK/strings.xml
+++ b/core/res/res/values-mk-rMK/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Размер"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Покажи секогаш"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Повторно овозможете го ова во Системски поставки > Апликации > Преземено."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Апликацијата <xliff:g id="APPLICATION">%1$s</xliff:g> (процес <xliff:g id="PROCESS">%2$s</xliff:g>) ја прекрши политиката StrictMode што си ја наметна врз себеси."</string>
<string name="smv_process" msgid="5120397012047462446">"Процесот <xliff:g id="PROCESS">%1$s</xliff:g> ја прекрши својата самонаметната политика на строг режим."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android се ажурира…"</string>
diff --git a/core/res/res/values-ml-rIN/strings.xml b/core/res/res/values-ml-rIN/strings.xml
index 7b18d91..6c757e0 100644
--- a/core/res/res/values-ml-rIN/strings.xml
+++ b/core/res/res/values-ml-rIN/strings.xml
@@ -1015,6 +1015,8 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"സ്കെയിൽ"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"എപ്പോഴും പ്രദര്ശിപ്പിക്കുക"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"സിസ്റ്റം ക്രമീകരണങ്ങൾ > അപ്ലിക്കേഷനുകൾ > ഡൗൺലോഡുചെയ്തവ എന്നതിൽ ഇത് വീണ്ടും പ്രവർത്തനക്ഷമമാക്കുക."</string>
+ <string name="unsupported_display_size_message" msgid="6545327290756295232">"നിലവിലെ ഡിസ്പ്ലേ വലുപ്പ ക്രമീകരണത്തെ <xliff:g id="APP_NAME">%1$s</xliff:g> പിന്തുണയ്ക്കുന്നില്ല, അതിനാൽ പ്രതീക്ഷിക്കാത്ത തരത്തിൽ ആപ്പ് പ്രവർത്തിച്ചേക്കാം."</string>
+ <string name="unsupported_display_size_show" msgid="7969129195360353041">"എല്ലായ്പ്പോഴും ദൃശ്യമാക്കുക"</string>
<string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> എന്ന അപ്ലിക്കേഷൻ (<xliff:g id="PROCESS">%2$s</xliff:g> പ്രോസസ്സ്) അതിന്റെ സ്വയം നിർബന്ധിത StrictMode നയം ലംഘിച്ചു."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> എന്ന പ്രോസസ്സ് അതിന്റെ സ്വയം നടപ്പിലാക്കിയ StrictMode നയം ലംഘിച്ചു."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android അപ്ഗ്രേഡുചെയ്യുന്നു…"</string>
diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml
index 4f10c45..f54a485 100644
--- a/core/res/res/values-mn-rMN/strings.xml
+++ b/core/res/res/values-mn-rMN/strings.xml
@@ -1015,6 +1015,8 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Цар хэмжээ"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Байнга харуулах"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Энийг Системийн тохиргоо > Апп > Татаж авсан дотроос дахин идэвхтэй болгох боломжтой."</string>
+ <string name="unsupported_display_size_message" msgid="6545327290756295232">"<xliff:g id="APP_NAME">%1$s</xliff:g> нь Дэлгэцийн хэмжээний одоогийн тохиргоог дэмждэггүй учир буруу ажиллаж болзошгүй."</string>
+ <string name="unsupported_display_size_show" msgid="7969129195360353041">"Байнга харуулах"</string>
<string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> апп (<xliff:g id="PROCESS">%2$s</xliff:g> процесс) өөрийнхөө StrictMode бодлогыг зөрчив."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> процесс өөрийнхөө StrictMode бодлогыг зөрчив."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Андройдыг дэвшүүлж байна…"</string>
diff --git a/core/res/res/values-mr-rIN/strings.xml b/core/res/res/values-mr-rIN/strings.xml
index e2d11c8..5e2bf54 100644
--- a/core/res/res/values-mr-rIN/strings.xml
+++ b/core/res/res/values-mr-rIN/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"स्केल"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"नेहमी दर्शवा"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"सिस्टीम सेटिंग्ज > Apps > डाउनलोड केलेले मध्ये हे पुन्हा-सक्षम करा."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"अॅप <xliff:g id="APPLICATION">%1$s</xliff:g> (प्रक्रिया <xliff:g id="PROCESS">%2$s</xliff:g>) ने तिच्या स्वयं-लागू केलेल्या StrictMode धोरणाचे उल्लंघन केले आहे."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> प्रक्रियेने तिच्या स्वतः-लागू केलेल्या StrictMode धोरणाचे उल्लंघन केले."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android श्रेणीसुधारित होत आहे..."</string>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index 8945524..f5a9303 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Sentiasa tunjukkan"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Dayakan semula kod kompak ini tetapan Sistem > Apl > Dimuat turun."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Apl <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) telah melanggar dasar Mod Tegasnya sendiri."</string>
<string name="smv_process" msgid="5120397012047462446">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> telah melanggar dasar Mod Tegasnya sendiri."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android sedang menaik taraf..."</string>
diff --git a/core/res/res/values-my-rMM/strings.xml b/core/res/res/values-my-rMM/strings.xml
index 76ac215..2eb1b0d 100644
--- a/core/res/res/values-my-rMM/strings.xml
+++ b/core/res/res/values-my-rMM/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"စကေး"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"အမြဲပြသရန်"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"ဒါကို စနစ် ဆက်တင်များထဲ ပြန်ဖွင့်ပေးရန် > Apps > ဒေါင်းလုဒ် လုပ်ပြီး။"</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"app <xliff:g id="APPLICATION">%1$s</xliff:g> (လုပ်ငန်းစဉ် <xliff:g id="PROCESS">%2$s</xliff:g>) က ကိုယ်တိုင် ပြဌာန်းခဲ့သည့် StrictMode မူဝါဒကို ချိုးဖောက်ခဲ့သည်။"</string>
<string name="smv_process" msgid="5120397012047462446">"ဤ<xliff:g id="PROCESS">%1$s</xliff:g>ဖြစ်စဥ်မှာ ကိုယ်တိုင်အကျိုးသက်ရောက်သော StrictModeမူဝါဒအား ချိုးဖောက်သည်"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"အန်ဒရွိုက်ကို မွမ်းမံနေ…"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 860ff12..768e191 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Vis alltid"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Reaktiver dette i systeminnstillingene > Apper > Nedlastet."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Appen <xliff:g id="APPLICATION">%1$s</xliff:g> (prosessen <xliff:g id="PROCESS">%2$s</xliff:g>) har brutt de selvpålagte StrictMode-retningslinjene."</string>
<string name="smv_process" msgid="5120397012047462446">"Prosessen<xliff:g id="PROCESS">%1$s</xliff:g> har brutt de selvpålagte StrictMode-retningslinjene."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android oppgraderes …"</string>
diff --git a/core/res/res/values-ne-rNP/strings.xml b/core/res/res/values-ne-rNP/strings.xml
index 1ea7dbf..138c67f 100644
--- a/core/res/res/values-ne-rNP/strings.xml
+++ b/core/res/res/values-ne-rNP/strings.xml
@@ -1021,6 +1021,8 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"स्केल"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"सधैँ देखाउनुहोस्"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"प्रणाली सेटिङहरूमा यसलाई पुनःसक्षम गराउनुहोस् > अनुप्रयोगहरू > डाउनलोड गरेको।"</string>
+ <string name="unsupported_display_size_message" msgid="6545327290756295232">"<xliff:g id="APP_NAME">%1$s</xliff:g> ले हालको प्रदर्शनको आकार सम्बन्धी सेटिङलाई समर्थन गर्दैन र अप्रत्याशित तरिकाले व्यवहार गर्न सक्छ।"</string>
+ <string name="unsupported_display_size_show" msgid="7969129195360353041">"सधैँ देखाउनुहोस्"</string>
<string name="smv_application" msgid="3307209192155442829">"अनुप्रयोग <xliff:g id="APPLICATION">%1$s</xliff:g> (प्रक्रिया <xliff:g id="PROCESS">%2$s</xliff:g>) ले यसको स्वयं-लागु गरिएको स्ट्रिटमोड नीति उलङ्घन गरेको छ।"</string>
<string name="smv_process" msgid="5120397012047462446">"प्रक्रिया <xliff:g id="PROCESS">%1$s</xliff:g> यसको आफ्नै कडामोड नीतिका कारण उल्लङ्घन गरिएको छ।"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"एन्ड्रोइड अपग्रेड हुँदैछ…"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index c3eee67..a7124d8 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Schaal"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Altijd weergeven"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"U kunt dit opnieuw inschakelen via Systeeminstellingen > Apps > Gedownload."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"De app <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) heeft het zelf afgedwongen StrictMode-beleid geschonden."</string>
<string name="smv_process" msgid="5120397012047462446">"Het proces <xliff:g id="PROCESS">%1$s</xliff:g> heeft het zelf afgedwongen StrictMode-beleid geschonden."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android wordt bijgewerkt..."</string>
diff --git a/core/res/res/values-pa-rIN/strings.xml b/core/res/res/values-pa-rIN/strings.xml
index d9156b5..99baac9 100644
--- a/core/res/res/values-pa-rIN/strings.xml
+++ b/core/res/res/values-pa-rIN/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"ਸਕੇਲ"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"ਹਮੇਸ਼ਾਂ ਦਿਖਾਓ"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"ਸਿਸਟਮ ਸੈਟਿੰਗਾਂ > ਐਪਸ > ਡਾਊਨਲੋਡ ਕੀਤਿਆਂ ਵਿੱਚ ਇਸਨੂੰ ਮੁੜ-ਸਮਰੱਥ ਬਣਾਓ।"</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"ਐਪ <xliff:g id="APPLICATION">%1$s</xliff:g> (ਪ੍ਰਕਿਰਿਆ<xliff:g id="PROCESS">%2$s</xliff:g>) ਨੇ ਆਪਣੀ ਖੁਦ-ਲਾਗੂ ਕੀਤੀ ਸਟ੍ਰਿਕਟਮੋਡ ਨੀਤੀ ਦੀ ਉਲੰਘਣਾ ਕੀਤੀ ਹੈ।"</string>
<string name="smv_process" msgid="5120397012047462446">"ਪ੍ਰਕਿਰਿਆ <xliff:g id="PROCESS">%1$s</xliff:g> ਨੇ ਆਪਣੀ ਖੁਦ-ਲਾਗੂ ਕੀਤੀ ਸਟ੍ਰਿਕਟਮੋਡ ਨੀਤੀ ਦੀ ਉਲੰਘਣਾ ਕੀਤੀ ਹੈ।"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android ਅਪਗ੍ਰੇਡ ਕਰ ਰਿਹਾ ਹੈ…"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 2291d037..8292682 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1061,6 +1061,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Zawsze pokazuj"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Włącz ponownie, wybierając Ustawienia systemowe > Aplikacje > Pobrane."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) naruszyła wymuszone przez siebie zasady StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> naruszył wymuszone przez siebie zasady StrictMode."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android jest uaktualniany..."</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 6907a6c..d943707 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostrar sempre"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Reativar isso em Configurações do sistema > Apps > Transferidos."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"O app <xliff:g id="APPLICATION">%1$s</xliff:g>, processo <xliff:g id="PROCESS">%2$s</xliff:g>, violou a política StrictMode imposta automaticamente."</string>
<string name="smv_process" msgid="5120397012047462446">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> violou a política StrictMode imposta automaticamente."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"O Android está sendo atualizado..."</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 221d055..e0116cb 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostrar sempre"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Reative este modo nas Definições do Sistema > Aplicações > Transferidas."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"A aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) violou a política StrictMode auto-imposta."</string>
<string name="smv_process" msgid="5120397012047462446">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> violou a política StrictMode auto-imposta."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"O Android está a ser atualizado..."</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 6907a6c..d943707 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostrar sempre"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Reativar isso em Configurações do sistema > Apps > Transferidos."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"O app <xliff:g id="APPLICATION">%1$s</xliff:g>, processo <xliff:g id="PROCESS">%2$s</xliff:g>, violou a política StrictMode imposta automaticamente."</string>
<string name="smv_process" msgid="5120397012047462446">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> violou a política StrictMode imposta automaticamente."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"O Android está sendo atualizado..."</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index fe19d39..7aa3b23 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1038,6 +1038,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scară"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Afișați întotdeauna"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Reactivați acest mod din Setări de sistem > Aplicații > Descărcate."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Aplicația <xliff:g id="APPLICATION">%1$s</xliff:g> (procesul <xliff:g id="PROCESS">%2$s</xliff:g>) a încălcat propria politică StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Procesul <xliff:g id="PROCESS">%1$s</xliff:g> a încălcat propria politică StrictMode."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android trece la o versiune superioară..."</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index e885d70..686aee2 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1061,6 +1061,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Масштаб"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Всегда показывать"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Включить эту функцию можно в меню \"Настройки > Приложения > Загруженные\"."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Приложение \"<xliff:g id="APPLICATION">%1$s</xliff:g>\" (процесс: <xliff:g id="PROCESS">%2$s</xliff:g>) нарушило собственную политику StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Процесс <xliff:g id="PROCESS">%1$s</xliff:g> нарушил собственную политику StrictMode."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Обновление Android..."</string>
diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si-rLK/strings.xml
index 5626d47d..d5f9158 100644
--- a/core/res/res/values-si-rLK/strings.xml
+++ b/core/res/res/values-si-rLK/strings.xml
@@ -1017,6 +1017,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"පරිමාණය"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"සැමවිටම පෙන්වන්න"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"පද්ධති සැකසීම් තුළ මෙය නැවත ක්රියාත්මක කරන්න > යෙදුම් > බාගන්නා ලදි."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> යෙදුම (<xliff:g id="PROCESS">%2$s</xliff:g> ක්රියාවලිය) එහි StrictMode කොන්දේසිය උල්ලංඝනය කර ඇත."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> ක්රියාවලිය එහි StrictMode කොන්දේසිය උල්ලංඝනය කර ඇත."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android උත්ශ්රේණි වෙමින් පවතී..."</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 54337ba..9f4f56b 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1061,6 +1061,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Prispôsobiť veľkosť"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Vždy zobraziť"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Povoľte to znova v sekcii Nastavenia systému > Aplikácie > Stiahnuté súbory."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Aplikácia <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) porušila svoje vlastné vynútené pravidlá StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> porušil svoje vlastné vynútené pravidlá StrictMode."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Prebieha inovácia systému Android..."</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index f13d1aa..a678c4a 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1061,6 +1061,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Lestvica"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Vedno pokaži"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Znova omogočite to v sistemskih nastavitvah > Aplikacije > Preneseno."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Aplikacija <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) krši svoj samouveljavljiv pravilnik o strogem načinu."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> krši svoj samoizvedljivi pravilnik o strogem načinu."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Poteka nadgradnja Androida ..."</string>
diff --git a/core/res/res/values-sq-rAL/strings.xml b/core/res/res/values-sq-rAL/strings.xml
index c3911eb..c10b33b 100644
--- a/core/res/res/values-sq-rAL/strings.xml
+++ b/core/res/res/values-sq-rAL/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Shkalla"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Shfaq gjithnjë"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Aktivizoje sërish këtë te \"Cilësimet e sistemit\" > \"Aplikacionet\" > \"Të shkarkuara\"."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Aplikacioni <xliff:g id="APPLICATION">%1$s</xliff:g> (procesi <xliff:g id="PROCESS">%2$s</xliff:g>) ka shkelur politikën e tij të vetë-imponuar \"Modaliteti i ashpër\" (StrictMode)."</string>
<string name="smv_process" msgid="5120397012047462446">"Procesi <xliff:g id="PROCESS">%1$s</xliff:g> ka shkelur politikën e tij të vetë-imponuar \"Modaliteti i rreptë\" (StrictMode)"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"\"Androidi\" po përditësohet…"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 5b6dcd4..3f78e0b 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1038,6 +1038,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Размера"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Увек приказуј"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Поново омогућите у менију Системска подешавања > Апликације > Преузето."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Апликација <xliff:g id="APPLICATION">%1$s</xliff:g> (процес <xliff:g id="PROCESS">%2$s</xliff:g>) је прекршила самонаметнуте StrictMode смернице."</string>
<string name="smv_process" msgid="5120397012047462446">"Процес <xliff:g id="PROCESS">%1$s</xliff:g> је прекршио самонаметнуте StrictMode смернице."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android се надограђује…"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 9f78411..835da4d 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Anpassning"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Visa alltid"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Aktivera detta igen i Systeminställningar > Appar > Hämtat."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Appen <xliff:g id="APPLICATION">%1$s</xliff:g> (processen <xliff:g id="PROCESS">%2$s</xliff:g>) har brutit mot sin egen StrictMode-policy."</string>
<string name="smv_process" msgid="5120397012047462446">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> har brutit mot sin egen StrictMode-policy."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android uppgraderas ..."</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 7ceef61..ba573aa 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -1013,6 +1013,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Kipimo"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Onyesha kila wakati"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Wezesha tena hii katika mipangilio ya Mfumo > Programu > iliyopakuliwa."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Programu <xliff:g id="APPLICATION">%1$s</xliff:g> (utaratibu <xliff:g id="PROCESS">%2$s</xliff:g>) imeenda kinyume na sera yake ya StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Shughuli ya <xliff:g id="PROCESS">%1$s</xliff:g> imeenda kinyume na kulazimisha sera yake ya StrictMode."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Toleo jipya la Android linawekwa..."</string>
diff --git a/core/res/res/values-ta-rIN/strings.xml b/core/res/res/values-ta-rIN/strings.xml
index 35f4254..308a0f5 100644
--- a/core/res/res/values-ta-rIN/strings.xml
+++ b/core/res/res/values-ta-rIN/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"அளவு"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"எப்போதும் காட்டு"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"சிஸ்டம் அமைப்பு > பயன்பாடுகள் > பதிவிறக்கம் என்பதில் இதை மீண்டும் இயக்கவும்."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> பயன்பாடு (செயல்முறை <xliff:g id="PROCESS">%2$s</xliff:g>), தனது சுய-செயலாக்க StrictMode கொள்கையை மீறியது."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> செயல்முறை, தனது சுய-செயலாக்க StrictMode கொள்கையை மீறியது."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android மேம்படுத்தப்படுகிறது…"</string>
diff --git a/core/res/res/values-te-rIN/strings.xml b/core/res/res/values-te-rIN/strings.xml
index bee79de..66e7668 100644
--- a/core/res/res/values-te-rIN/strings.xml
+++ b/core/res/res/values-te-rIN/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"ప్రమాణం"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"ఎల్లప్పుడూ చూపు"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"సిస్టమ్ సెట్టింగ్లు > అనువర్తనాలు > డౌన్లోడ్ చేసినవిలో దీన్ని పునఃప్రారంభించండి."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> అనువర్తనం (<xliff:g id="PROCESS">%2$s</xliff:g> ప్రాసెస్) అది స్వయంగా అమలు చేసే ఖచ్చితమైన మోడ్ విధానాన్ని ఉల్లంఘించింది."</string>
<string name="smv_process" msgid="5120397012047462446">"ప్రక్రియ <xliff:g id="PROCESS">%1$s</xliff:g> అది స్వయంగా అమలు చేసే ఖచ్చితమైన మోడ్ విధానాన్ని ఉల్లంఘించింది."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android అప్గ్రేడ్ అవుతోంది…"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index ef1f9a1..7781993 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"สเกล"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"แสดงเสมอ"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"เปิดใช้งานอีกครั้งในการตั้งค่าระบบ > แอปพลิเคชัน > ดาวน์โหลด"</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"แอปพลิเคชัน <xliff:g id="APPLICATION">%1$s</xliff:g> (กระบวนการ <xliff:g id="PROCESS">%2$s</xliff:g>) ละเมิดนโยบาย StrictMode ที่บังคับใช้ด้วยตัวเอง"</string>
<string name="smv_process" msgid="5120397012047462446">"กระบวนการ <xliff:g id="PROCESS">%1$s</xliff:g> ละเมิดนโยบาย StrictMode ที่บังคับใช้ด้วยตัวเอง"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"กำลังอัปเกรด Android ..."</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 1bdc63a..a88e6b3 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Sukat"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Palaging ipakita"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Muling paganahin ito sa mga setting ng System > Apps > Na-download."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Ang app na <xliff:g id="APPLICATION">%1$s</xliff:g> (prosesong <xliff:g id="PROCESS">%2$s</xliff:g>) ay lumabag sa sarili nitong ipinapatupad na patakarang StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Ang prosesong <xliff:g id="PROCESS">%1$s</xliff:g> ay lumabag sa sarili nitong ipinapatupad na patakarang StrictMode."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Nag-a-upgrade ang Android…"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 8f2dc75..697c38c 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Ölçek"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Her zaman göster"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Bunu Sistem ayarları > Uygulamalar > İndirilenler bölümünden yeniden etkinleştirin."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> uygulaması (<xliff:g id="PROCESS">%2$s</xliff:g> işlemi) kendiliğinden uyguladığı StrictMode politikasını ihlal etti."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> işlemi kendiliğinden uyguladığı StrictMode politikasını ihlal etti."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android yeni sürüme geçiriliyor..."</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 57ff67f..885ed89 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1061,6 +1061,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Масштаб"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Завжди показувати"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Знову ввімкнути це в меню Налаштування системи > Програми > Завантажені."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Програма <xliff:g id="APPLICATION">%1$s</xliff:g> (процес <xliff:g id="PROCESS">%2$s</xliff:g>) порушила свою самозастосовну політику StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Процес <xliff:g id="PROCESS">%1$s</xliff:g> порушив свою самозастосовну політику StrictMode."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android оновлюється..."</string>
diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml
index a2dd131..99a299f 100644
--- a/core/res/res/values-ur-rPK/strings.xml
+++ b/core/res/res/values-ur-rPK/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"پیمانہ"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"ہمیشہ دکھائیں"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"سسٹم ترتیبات > ایپس > ڈاؤن لوڈ کردہ میں اسے دوبارہ فعال کریں۔"</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"ایپ <xliff:g id="APPLICATION">%1$s</xliff:g> (کارروائی <xliff:g id="PROCESS">%2$s</xliff:g>) نے خود نافذ کی گئی StrictMode پالیسی کی خلاف ورزی کی ہے۔"</string>
<string name="smv_process" msgid="5120397012047462446">"کارروائی <xliff:g id="PROCESS">%1$s</xliff:g> نے اپنی ذاتی طور پر نافذ کردہ StrictMode پلیسی کی خلاف ورزی کی ہے۔"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android اپ گریڈ ہو رہا ہے…"</string>
diff --git a/core/res/res/values-uz-rUZ/strings.xml b/core/res/res/values-uz-rUZ/strings.xml
index fb39be2..c73a06f 100644
--- a/core/res/res/values-uz-rUZ/strings.xml
+++ b/core/res/res/values-uz-rUZ/strings.xml
@@ -526,7 +526,7 @@
<string name="policydesc_resetPassword" msgid="1278323891710619128">"Ekran qulfini o‘zgartiradi."</string>
<string name="policylab_forceLock" msgid="2274085384704248431">"Ekranni qulflash"</string>
<string name="policydesc_forceLock" msgid="1141797588403827138">"Ekranning qachon va qanday qulflanishini boshqaradi."</string>
- <string name="policylab_wipeData" msgid="3910545446758639713">"Barcha ma’lumotlarni tozalash"</string>
+ <string name="policylab_wipeData" msgid="3910545446758639713">"Barcha ma’lumotlarni o‘chirib tashlash"</string>
<string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Planshetdagi barcha ma’lumotlarni ogohlantirishsiz zavod sozlamalarini tiklash orqali o‘chirib tashlaydi."</string>
<string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"Zavod sozlamalarini tiklaydi va televizordagi barcha ma’lumotlarni ogohlantirishsiz o‘chirib tashlaydi."</string>
<string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Telefondagi barcha ma’lumotlarni ogohlantirishsiz zavod sozlamalarini tiklash orqali o‘chirib tashlaydi."</string>
@@ -537,7 +537,7 @@
<string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Qurilmaga global proksi o‘rnatish"</string>
<string name="policydesc_setGlobalProxy" msgid="8459859731153370499">"Qoida faollashtirilgan vaqtda ishlatiladigan qurilmaning global proksi-serverini o‘rnatadi. Faqat qurilma egasi global proksi-serverini o‘rnatishi mumkin."</string>
<string name="policylab_expirePassword" msgid="5610055012328825874">"Parol muddatini o‘rnatish"</string>
- <string name="policydesc_expirePassword" msgid="5367525762204416046">"Ekran qulfi paroli, PIN kodi yoki chizmali paroli o‘zgartiriladigan muddatni o‘zgartiradi."</string>
+ <string name="policydesc_expirePassword" msgid="5367525762204416046">"Ekran qulfi paroli, PIN kodi yoki grafik kaliti o‘zgartiriladigan muddatni o‘zgartiradi."</string>
<string name="policylab_encryptedStorage" msgid="8901326199909132915">"Xotirani kodlashni o‘rnatish"</string>
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Zaxiralangan ilovalar ma‘lumotlarini kodlashni talab qiladi."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Kameralarni o‘chirish"</string>
@@ -672,7 +672,7 @@
<string name="lockscreen_screen_locked" msgid="7288443074806832904">"Ekran qulflangan."</string>
<string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Qulfdan chiqarish yoki favqulodda qo‘ng‘iroqni amalga oshirish uchun \"Menyu\"ni bosing."</string>
<string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Qulfni ochish uchun \"Menyu\"ga bosing."</string>
- <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Qulfni ochish uchun namuna ustiga chizing"</string>
+ <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Qulfni ochish uchun grafik kalitni chizing"</string>
<string name="lockscreen_emergency_call" msgid="5298642613417801888">"Favqulodda chaqiruv"</string>
<string name="lockscreen_return_to_call" msgid="5244259785500040021">"Qo‘ng‘iroqni qaytarish"</string>
<string name="lockscreen_pattern_correct" msgid="9039008650362261237">"To‘g‘ri!"</string>
@@ -700,12 +700,12 @@
<string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Foydalanuvchi qo‘llanmasiga qarang yoki Abonentlarni qo‘llab-quvvatlash markaziga murojaat qiling."</string>
<string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM karta qulflangan."</string>
<string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIM karta qulfdan chiqarilmoqda…"</string>
- <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> soniyadan so‘ng qayta urining."</string>
+ <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Siz grafik kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> soniyadan so‘ng qayta urining."</string>
<string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Siz parolni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> soniyadan so‘ng qayta urining."</string>
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Siz PIN-kodni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> soniyadan so‘ng qayta urining."</string>
- <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. Telefon qulfini ochish uchun yana <xliff:g id="NUMBER_1">%2$d</xliff:g> marta noto‘g‘ri urinish qilsangiz, sizdan Google hisobingizga kirish talab qilinadi. \n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan so‘ng qayta urining."</string>
- <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. Agar uni yana <xliff:g id="NUMBER_1">%2$d</xliff:g> marta noto‘g‘ri kiritsangiz, televizoringizni qulfdan chiqarish uchun Google hisobingizga kirish talab qilinadi.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan so‘ng qaytadan urining."</string>
- <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. Telefon qulfini ochish uchun yana <xliff:g id="NUMBER_1">%2$d</xliff:g> marta noto‘g‘ri urinish qilsangiz, sizdan Google hisobingizga kirish talab qilinadi.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan so‘ng qayta urining."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Siz grafik kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. Telefon qulfini ochish uchun yana <xliff:g id="NUMBER_1">%2$d</xliff:g> marta noto‘g‘ri urinish qilsangiz, sizdan Google hisobingizga kirish talab qilinadi. \n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan so‘ng qayta urining."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"Siz grafik kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. Agar uni yana <xliff:g id="NUMBER_1">%2$d</xliff:g> marta noto‘g‘ri kiritsangiz, televizoringizni qulfdan chiqarish uchun Google hisobingizga kirish talab qilinadi.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan so‘ng qaytadan urining."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Siz grafik kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. Telefon qulfini ochish uchun yana <xliff:g id="NUMBER_1">%2$d</xliff:g> marta noto‘g‘ri urinish qilsangiz, sizdan Google hisobingizga kirish talab qilinadi.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan so‘ng qayta urining."</string>
<string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Planshet qulfini <xliff:g id="NUMBER_0">%1$d</xliff:g> marta ochishga urinib ko‘rdingiz. <xliff:g id="NUMBER_1">%2$d</xliff:g> marta muvaffaqiyatsiz urinishlardan so‘ng, planshet ishlab chiqarilgan holatiga tiklanadi va barcha foydalanuvchi ma’lumotlari yo‘qoladi."</string>
<string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="950408382418270260">"Siz televizorni qulfdan chiqarish parolini <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. Agar uni yana <xliff:g id="NUMBER_1">%2$d</xliff:g> marta noto‘g‘ri kiritsangiz, televizoringizda zavod sozlamalari qayta tiklanadi hamda undagi barcha ma’lumotlaringiz o‘chib ketadi."</string>
<string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Telefon qulfini <xliff:g id="NUMBER_0">%1$d</xliff:g> marta ochishga urinib ko‘rdingiz. <xliff:g id="NUMBER_1">%2$d</xliff:g> marta muvaffaqiyatsiz urinishlardan so‘ng, telefon ishlab chiqarilgan holatiga tiklanadi va barcha foydalanuvchi ma’lumotlari yo‘qoladi."</string>
@@ -713,9 +713,9 @@
<string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="3195755534096192191">"Siz televizorni qulfdan chiqarish parolini <xliff:g id="NUMBER">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Endi, televizoringizda zavod sozlamalari qayta tiklanadi."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Telefon qulfini <xliff:g id="NUMBER">%d</xliff:g> marta ochishga urinib ko‘rdingiz. Telefon hozir ishlab chiqarilgan holatiga tiklanadi."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> soniyadan so‘ng qayta urinib ko‘ring."</string>
- <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Chizma namunasi yodingizdan chiqdimi?"</string>
+ <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Grafik kalit esingizdan chiqdimi?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Qulfni ochish hisobi"</string>
- <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Chizmali parolni ochishga juda ko‘p urinildi"</string>
+ <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Grafik kalit juda ko‘p marta chizildi"</string>
<string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Qulfni ochish uchun Google hisobingiz bilan kiring."</string>
<string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Foydalanuvchi nomi (e-pochta)"</string>
<string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Parol"</string>
@@ -726,12 +726,12 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Qulfdan chiqarish"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Ovozni yoqish"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Ovozni o‘chirish"</string>
- <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Chizma namunasi ishga tushirildi"</string>
- <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Chizma namunasi tozalandi"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Grafik kalitni chizish boshlandi"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Grafik kalit tozalandi"</string>
<string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Katak qo‘shildi"</string>
<string name="lockscreen_access_pattern_cell_added_verbose" msgid="7264580781744026939">"<xliff:g id="CELL_INDEX">%1$s</xliff:g> katak qo‘shildi"</string>
- <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Chizma namunasi tugatildi"</string>
- <string name="lockscreen_access_pattern_area" msgid="400813207572953209">"Chizmali kalit hududi."</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Grafik kalitni chizish tugallandi"</string>
+ <string name="lockscreen_access_pattern_area" msgid="400813207572953209">"Grafik kalit chiziladigan hudud."</string>
<string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Vidjet %2$d / %3$d."</string>
<string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Vidjet qo‘shish."</string>
<string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Bo‘sh"</string>
@@ -747,11 +747,11 @@
<string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> vidjeti o‘chirildi."</string>
<string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Qulfni ochish maydonini kengaytirish."</string>
<string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Qulfni silab ochish"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Chizmali qulfni ochish."</string>
+ <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Grafik kalit bilan ochish."</string>
<string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Qulfni yuzni tanitib ochish"</string>
<string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin qulfini ochish."</string>
<string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Parolli qulfni ochish."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Chizmali qulf maydoni."</string>
+ <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Grafik kalit chiziladigan hudud."</string>
<string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Maydonni silang"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Masshtab"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Doimo ko‘rsatish"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Uni Tizim sozlamalari > Ilovalar > Yuklab olingan menyusidan qayta yoqing."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"“<xliff:g id="APPLICATION">%1$s</xliff:g>” ilovasi (jarayaon: <xliff:g id="PROCESS">%2$s</xliff:g>) o‘zining StrictMode qoidasini buzdi."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> jarayoni o‘zining o‘zi-bajaruvchi StrictMode siyosatini buzdi."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android yangilanmoqda…"</string>
@@ -1378,8 +1382,8 @@
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Tasvir uzatish #<xliff:g id="ID">%1$d</xliff:g>"</string>
<string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", xavfsiz"</string>
- <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Chizmali parol unutilgan"</string>
- <string name="kg_wrong_pattern" msgid="1850806070801358830">"Chizmali kalit noto‘g‘ri"</string>
+ <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Grafik kalit esimdan chiqdi"</string>
+ <string name="kg_wrong_pattern" msgid="1850806070801358830">"Grafik kalit noto‘g‘ri"</string>
<string name="kg_wrong_password" msgid="2333281762128113157">"Parol noto‘g‘ri"</string>
<string name="kg_wrong_pin" msgid="1131306510833563801">"PIN-kod noto‘g‘ri"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%1$d</xliff:g> soniyadan so‘ng qayta urinib ko‘ring."</string>
@@ -1396,7 +1400,7 @@
<string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK kod 8 ta raqam bo‘lishi shart."</string>
<string name="kg_invalid_puk" msgid="3638289409676051243">"To‘g‘ri PUK kodni qayta kiriting. Qayta-qayta urinishlar SIM kartani butunlay o‘chirib qo‘yadi."</string>
<string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-kod mos kelmadi"</string>
- <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Chizmali parolni ochishga juda ko‘p urinildi"</string>
+ <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Grafik kalit juda ko‘p marta chizildi"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Qulfni ochish uchun Google hisobingiz bilan kiring."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Foydalanuvchi nomi (e-pochta)"</string>
<string name="kg_login_password_hint" msgid="9057289103827298549">"Parol"</string>
@@ -1406,16 +1410,16 @@
<string name="kg_login_checking_password" msgid="1052685197710252395">"Hisob tekshirilmoqda…"</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Siz PIN-kodni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> soniyadan so‘ng qayta urinib ko‘ring."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Siz parolni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> soniyadan so‘ng qayta urinib ko‘ring."</string>
- <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> soniyadan so‘ng qayta urinib ko‘ring."</string>
+ <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Siz grafik kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> soniyadan so‘ng qayta urinib ko‘ring."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Siz planshet qulfini ochish uchun <xliff:g id="NUMBER_0">%1$d</xliff:g> marta muvaffaqiyatsiz urindingiz. <xliff:g id="NUMBER_1">%2$d</xliff:g> marta muvaffaqiyatsiz urinishlardan so‘ng planshetning zavod sozlamalari tiklanadi va barcha foydalanuvchi ma’lumotlari o‘chiriladi."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="5621231220154419413">"Siz televizorni qulfdan chiqarish parolini <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. Agar uni yana <xliff:g id="NUMBER_1">%2$d</xliff:g> marta noto‘g‘ri kiritsangiz, televizoringizda zavod sozlamalari qayta tiklanadi hamda undagi barcha ma’lumotlaringiz o‘chib ketadi."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Siz telefon qulfini ochish uchun <xliff:g id="NUMBER_0">%1$d</xliff:g> marta muvaffaqiyatsiz urindingiz. <xliff:g id="NUMBER_1">%2$d</xliff:g> marta muvaffaqiyatsiz urinishlardan so‘ng telefonning zavod sozlamalari tiklanadi va barcha foydalanuvchi ma’lumotlari o‘chiriladi."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Planshet qulfini ochish uchun <xliff:g id="NUMBER">%d</xliff:g> marta muvaffaqiyatsiz urinib ko‘rdingiz. Planshetning hozir zavod sozlamari tiklanadi."</string>
<string name="kg_failed_attempts_now_wiping" product="tv" msgid="4987878286750741463">"Siz televizorni qulfdan chiqarish parolini <xliff:g id="NUMBER">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Endi, televizoringizda zavod sozlamalari qayta tiklanadi."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Telefon qulfini ochish uchun <xliff:g id="NUMBER">%d</xliff:g> marta muvaffaqiyatsiz urinib ko‘rdingiz. Telefonning hozir zavod sozlamari tiklanadi."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. <xliff:g id="NUMBER_1">%2$d</xliff:g> marta muvaffaqiyatsiz urinishdan so‘ng, sizdan e-pochtangizdan foydalanib, planshet qulfini ochishingiz so‘raladi.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan so‘ng yana urinib ko‘ring."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4224651132862313471">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. Agar uni yana <xliff:g id="NUMBER_1">%2$d</xliff:g> marta noto‘g‘ri kiritsangiz, televizoringizni qulfdan chiqarish uchun sizda e-pochta hisobingizga kirish talab qilinadi.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan so‘ng qaytadan urining."</string>
- <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri chizdingiz. <xliff:g id="NUMBER_1">%2$d</xliff:g> marta muvaffaqiyatsiz urinishdan so‘ng, sizdan e-pochtangizdan foydalanib, telefon qulfini ochishingiz so‘raladi.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan so‘ng yana urinib ko‘ring."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Siz grafik kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. <xliff:g id="NUMBER_1">%2$d</xliff:g> marta muvaffaqiyatsiz urinishdan so‘ng, sizdan e-pochtangizdan foydalanib, planshet qulfini ochishingiz so‘raladi.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan so‘ng yana urinib ko‘ring."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4224651132862313471">"Siz grafik kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri kiritdingiz. Agar uni yana <xliff:g id="NUMBER_1">%2$d</xliff:g> marta noto‘g‘ri kiritsangiz, televizoringizni qulfdan chiqarish uchun sizda e-pochta hisobingizga kirish talab qilinadi.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan so‘ng qaytadan urining."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Siz grafik kalitni <xliff:g id="NUMBER_0">%1$d</xliff:g> marta noto‘g‘ri chizdingiz. <xliff:g id="NUMBER_1">%2$d</xliff:g> marta muvaffaqiyatsiz urinishdan so‘ng, sizdan e-pochtangizdan foydalanib, telefon qulfini ochishingiz so‘raladi.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan so‘ng yana urinib ko‘ring."</string>
<string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
<string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"O‘chirish"</string>
<string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"Ovoz balandligi tavsiya etilgan darajadan ham yuqori ko‘tarilsinmi?\n\nUzoq vaqt davomida baland ovozda tinglash eshitish qobiliyatingizga salbiy ta’sir ko‘rsatishi mumkin."</string>
@@ -1550,7 +1554,7 @@
<string name="lock_to_app_start" msgid="6643342070839862795">"Ekran qadab qo‘yildi"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Ekran bo‘shatildi"</string>
<string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Yechishda PIN-kod so‘ralsin"</string>
- <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Bo‘shatishdan oldin chizmali parol so‘ralsin"</string>
+ <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Yechishdan oldin grafik kalit so‘ralsin"</string>
<string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Bo‘shatishdan oldin parol so‘ralsin"</string>
<string name="package_installed_device_owner" msgid="8420696545959087545">"Administratoringiz tomonidan o‘rnatilgan"</string>
<string name="package_updated_device_owner" msgid="8856631322440187071">"Administratoringiz tomonidan yangilandi"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 9ad9737..3b86a37 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1015,6 +1015,8 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Tỷ lệ"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Luôn hiển thị"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Bật lại chế độ này trong cài đặt Hệ thống > Ứng dụng > Đã tải xuống."</string>
+ <string name="unsupported_display_size_message" msgid="6545327290756295232">"<xliff:g id="APP_NAME">%1$s</xliff:g> không hỗ trợ cài đặt kích thước Màn hình hiện tại và có thể hoạt động không như mong đợi."</string>
+ <string name="unsupported_display_size_show" msgid="7969129195360353041">"Luôn hiển thị"</string>
<string name="smv_application" msgid="3307209192155442829">"Ứng dụng <xliff:g id="APPLICATION">%1$s</xliff:g> (quá trình <xliff:g id="PROCESS">%2$s</xliff:g>) đã vi phạm chính sách StrictMode tự thi hành của mình."</string>
<string name="smv_process" msgid="5120397012047462446">"Quá trình <xliff:g id="PROCESS">%1$s</xliff:g> đã vi phạm chính sách StrictMode tự thi hành của mình."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android đang nâng cấp..."</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 9336182..865d435 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"缩放"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"始终显示"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"在“系统设置”>“应用”>“已下载”中重新启用此模式。"</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"“<xliff:g id="APPLICATION">%1$s</xliff:g>”应用(<xliff:g id="PROCESS">%2$s</xliff:g> 进程)违反了自我强制执行的严格模式 (StrictMode) 政策。"</string>
<string name="smv_process" msgid="5120397012047462446">"进程 <xliff:g id="PROCESS">%1$s</xliff:g> 违反了自我强制执行的严格模式 (StrictMode) 政策。"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android正在升级..."</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index d7b705b..6c896b2 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -1015,6 +1015,8 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"比例"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"永遠顯示"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"前往 [系統設定] > [應用程式] > [下載] 重新啟用這個模式。"</string>
+ <string name="unsupported_display_size_message" msgid="6545327290756295232">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」不支援目前的「螢幕」尺寸設定,畫面可能無法如預期顯示。"</string>
+ <string name="unsupported_display_size_show" msgid="7969129195360353041">"永遠顯示"</string>
<string name="smv_application" msgid="3307209192155442829">"應用程式 <xliff:g id="APPLICATION">%1$s</xliff:g> (處理程序 <xliff:g id="PROCESS">%2$s</xliff:g>) 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string>
<string name="smv_process" msgid="5120397012047462446">"處理程序 <xliff:g id="PROCESS">%1$s</xliff:g> 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"正在升級 Android..."</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index cef8b98..f3691cd 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1015,6 +1015,8 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"比例"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"一律顯示"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"前往 [系統設定] > [應用程式] > [下載] 重新啟用這個模式。"</string>
+ <string name="unsupported_display_size_message" msgid="6545327290756295232">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」不支援目前的顯示大小設定,可能會發生非預期的行為。"</string>
+ <string name="unsupported_display_size_show" msgid="7969129195360353041">"一律顯示"</string>
<string name="smv_application" msgid="3307209192155442829">"應用程式 <xliff:g id="APPLICATION">%1$s</xliff:g> (處理程序 <xliff:g id="PROCESS">%2$s</xliff:g>) 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string>
<string name="smv_process" msgid="5120397012047462446">"處理程序 <xliff:g id="PROCESS">%1$s</xliff:g> 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"正在升級 Android…"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 7720b5e..a804f44 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1015,6 +1015,10 @@
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Isilinganisi"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Bonisa njalo"</string>
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"Yenza kuphinde kusebenze kuzilungiselelo Zesistimue > Izinhlelo zokusebenza > Okulayishiwe."</string>
+ <!-- no translation found for unsupported_display_size_message (6545327290756295232) -->
+ <skip />
+ <!-- no translation found for unsupported_display_size_show (7969129195360353041) -->
+ <skip />
<string name="smv_application" msgid="3307209192155442829">"Inqubo <xliff:g id="APPLICATION">%1$s</xliff:g> (yohlelo <xliff:g id="PROCESS">%2$s</xliff:g>) iphule inqubomgomo oziphoqelela yona Yemodi Ebukhali."</string>
<string name="smv_process" msgid="5120397012047462446">"Inqubo <xliff:g id="PROCESS">%1$s</xliff:g> yephule inqubomgomo yokuziphoqelela Yemodi Ebukhali."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"I-Android ifaka ezakamuva..."</string>
diff --git a/core/tests/notificationtests/src/android/app/NotificationStressTest.java b/core/tests/notificationtests/src/android/app/NotificationStressTest.java
index 6e86c37..f174014 100644
--- a/core/tests/notificationtests/src/android/app/NotificationStressTest.java
+++ b/core/tests/notificationtests/src/android/app/NotificationStressTest.java
@@ -40,9 +40,9 @@
private static final int NUM_ITERATIONS = 200;
private static final int NUM_ITERATIONS_2 = 30;
private static final int LONG_TIMEOUT = 2000;
- // 50 notifications per app: defined as Variable MAX_PACKAGE_NOTIFICATIONS in
+ // 49 notifications per app: defined as Variable MAX_PACKAGE_NOTIFICATIONS in
// NotificationManagerService.java
- private static final int MAX_NOTIFCATIONS = 50;
+ private static final int MAX_NOTIFCATIONS = 49;
private static final int[] ICONS = new int[] {
android.R.drawable.stat_notify_call_mute,
android.R.drawable.stat_notify_chat,
@@ -76,9 +76,10 @@
@Override
protected void tearDown() throws Exception {
- super.tearDown();
mDevice.unfreezeRotation();
mNotificationManager.cancelAll();
+ mDevice.waitForIdle();
+ super.tearDown();
}
@RepetitiveTest(numIterations = NUM_ITERATIONS)
@@ -97,7 +98,7 @@
for (int j = 0; j < MAX_NOTIFCATIONS; j++) {
sendNotification(mNotifyId++, "testNotificationStressNotify");
}
- Thread.sleep(500);
+ Thread.sleep(LONG_TIMEOUT);
assertTrue(mNotificationManager.getActiveNotifications().length == MAX_NOTIFCATIONS);
for (int j = 0; j < MAX_NOTIFCATIONS; j++) {
mNotificationManager.cancel(--mNotifyId);
@@ -124,7 +125,8 @@
.setPriority(Notification.PRIORITY_HIGH)
.build();
mNotificationManager.notify(id, notification);
- SystemClock.sleep(10);
+ //update rate limit is 50 notifications/second.
+ SystemClock.sleep(20);
}
private boolean isLockScreen() {
diff --git a/docs/html-intl/intl/es/preview/images/bundles.png b/docs/html-intl/intl/es/preview/images/bundles.png
deleted file mode 100644
index 8b022b1..0000000
--- a/docs/html-intl/intl/es/preview/images/bundles.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/bundles_2x.png b/docs/html-intl/intl/es/preview/images/bundles_2x.png
deleted file mode 100644
index 4669096..0000000
--- a/docs/html-intl/intl/es/preview/images/bundles_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/datasaver.png b/docs/html-intl/intl/es/preview/images/datasaver.png
deleted file mode 100644
index c5a58fb..0000000
--- a/docs/html-intl/intl/es/preview/images/datasaver.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/doze-diagram-1.png b/docs/html-intl/intl/es/preview/images/doze-diagram-1.png
deleted file mode 100644
index 0814447..0000000
--- a/docs/html-intl/intl/es/preview/images/doze-diagram-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/doze-diagram-2.png b/docs/html-intl/intl/es/preview/images/doze-diagram-2.png
deleted file mode 100644
index c20c6cb..0000000
--- a/docs/html-intl/intl/es/preview/images/doze-diagram-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/inline-reply.png b/docs/html-intl/intl/es/preview/images/inline-reply.png
deleted file mode 100644
index 79a1a72..0000000
--- a/docs/html-intl/intl/es/preview/images/inline-reply.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/inline-reply_2x.png b/docs/html-intl/intl/es/preview/images/inline-reply_2x.png
deleted file mode 100644
index 13c6e35..0000000
--- a/docs/html-intl/intl/es/preview/images/inline-reply_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/inline-type-reply.png b/docs/html-intl/intl/es/preview/images/inline-type-reply.png
deleted file mode 100644
index b22aacd..0000000
--- a/docs/html-intl/intl/es/preview/images/inline-type-reply.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/inline-type-reply_2x.png b/docs/html-intl/intl/es/preview/images/inline-type-reply_2x.png
deleted file mode 100644
index 6e52a80..0000000
--- a/docs/html-intl/intl/es/preview/images/inline-type-reply_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/m-preview-timeline-crop.png b/docs/html-intl/intl/es/preview/images/m-preview-timeline-crop.png
deleted file mode 100644
index 724a6af..0000000
--- a/docs/html-intl/intl/es/preview/images/m-preview-timeline-crop.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/m-preview-timeline.png b/docs/html-intl/intl/es/preview/images/m-preview-timeline.png
deleted file mode 100644
index e9a339e..0000000
--- a/docs/html-intl/intl/es/preview/images/m-preview-timeline.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/mw-portrait.png b/docs/html-intl/intl/es/preview/images/mw-portrait.png
deleted file mode 100644
index e752387..0000000
--- a/docs/html-intl/intl/es/preview/images/mw-portrait.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/mw-splitscreen.png b/docs/html-intl/intl/es/preview/images/mw-splitscreen.png
deleted file mode 100644
index bf71999..0000000
--- a/docs/html-intl/intl/es/preview/images/mw-splitscreen.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/mw-splitscreen_2x.png b/docs/html-intl/intl/es/preview/images/mw-splitscreen_2x.png
deleted file mode 100644
index 38114db..0000000
--- a/docs/html-intl/intl/es/preview/images/mw-splitscreen_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/n-preview-setup.png b/docs/html-intl/intl/es/preview/images/n-preview-setup.png
deleted file mode 100644
index 612e031..0000000
--- a/docs/html-intl/intl/es/preview/images/n-preview-setup.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/notifications-1.png b/docs/html-intl/intl/es/preview/images/notifications-1.png
deleted file mode 100644
index 5712002..0000000
--- a/docs/html-intl/intl/es/preview/images/notifications-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/notifications-2.png b/docs/html-intl/intl/es/preview/images/notifications-2.png
deleted file mode 100644
index 0d07948..0000000
--- a/docs/html-intl/intl/es/preview/images/notifications-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/notifications-3.png b/docs/html-intl/intl/es/preview/images/notifications-3.png
deleted file mode 100644
index 261d010..0000000
--- a/docs/html-intl/intl/es/preview/images/notifications-3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/notifications-card.png b/docs/html-intl/intl/es/preview/images/notifications-card.png
deleted file mode 100644
index d9d0590..0000000
--- a/docs/html-intl/intl/es/preview/images/notifications-card.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/pip-active.png b/docs/html-intl/intl/es/preview/images/pip-active.png
deleted file mode 100644
index a24cb03..0000000
--- a/docs/html-intl/intl/es/preview/images/pip-active.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/pip-button.png b/docs/html-intl/intl/es/preview/images/pip-button.png
deleted file mode 100644
index b876b12..0000000
--- a/docs/html-intl/intl/es/preview/images/pip-button.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/quicksettings.png b/docs/html-intl/intl/es/preview/images/quicksettings.png
deleted file mode 100644
index 68e1f74..0000000
--- a/docs/html-intl/intl/es/preview/images/quicksettings.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/sample-activenotifications.png b/docs/html-intl/intl/es/preview/images/sample-activenotifications.png
deleted file mode 100644
index 8817469..0000000
--- a/docs/html-intl/intl/es/preview/images/sample-activenotifications.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/sample-directboot.png b/docs/html-intl/intl/es/preview/images/sample-directboot.png
deleted file mode 100644
index cc409d3..0000000
--- a/docs/html-intl/intl/es/preview/images/sample-directboot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/sample-messagingservice.png b/docs/html-intl/intl/es/preview/images/sample-messagingservice.png
deleted file mode 100644
index 0d8fb3e..0000000
--- a/docs/html-intl/intl/es/preview/images/sample-messagingservice.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/sample-multiwindow.png b/docs/html-intl/intl/es/preview/images/sample-multiwindow.png
deleted file mode 100644
index 979bf61..0000000
--- a/docs/html-intl/intl/es/preview/images/sample-multiwindow.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/sample-scopeddirectoryaccess.png b/docs/html-intl/intl/es/preview/images/sample-scopeddirectoryaccess.png
deleted file mode 100644
index 58515dc..0000000
--- a/docs/html-intl/intl/es/preview/images/sample-scopeddirectoryaccess.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/scoped-folder-access-dont-ask.png b/docs/html-intl/intl/es/preview/images/scoped-folder-access-dont-ask.png
deleted file mode 100644
index 5c505d9..0000000
--- a/docs/html-intl/intl/es/preview/images/scoped-folder-access-dont-ask.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/scoped-folder-access-dont-ask_2x.png b/docs/html-intl/intl/es/preview/images/scoped-folder-access-dont-ask_2x.png
deleted file mode 100644
index 612b69f..0000000
--- a/docs/html-intl/intl/es/preview/images/scoped-folder-access-dont-ask_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/scoped-folder-access-framed.png b/docs/html-intl/intl/es/preview/images/scoped-folder-access-framed.png
deleted file mode 100644
index 0169e41..0000000
--- a/docs/html-intl/intl/es/preview/images/scoped-folder-access-framed.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/scoped-folder-access-framed_2x.png b/docs/html-intl/intl/es/preview/images/scoped-folder-access-framed_2x.png
deleted file mode 100644
index fd59ef1..0000000
--- a/docs/html-intl/intl/es/preview/images/scoped-folder-access-framed_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/screen-zoom-1.png b/docs/html-intl/intl/es/preview/images/screen-zoom-1.png
deleted file mode 100644
index f62d04e..0000000
--- a/docs/html-intl/intl/es/preview/images/screen-zoom-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/screen-zoom-2.png b/docs/html-intl/intl/es/preview/images/screen-zoom-2.png
deleted file mode 100644
index 172b5b3..0000000
--- a/docs/html-intl/intl/es/preview/images/screen-zoom-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/es/preview/images/studio-jdk-location.jpg b/docs/html-intl/intl/es/preview/images/studio-jdk-location.jpg
deleted file mode 100644
index 1b1ba23..0000000
--- a/docs/html-intl/intl/es/preview/images/studio-jdk-location.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/bundles.png b/docs/html-intl/intl/in/preview/images/bundles.png
deleted file mode 100644
index 8b022b1..0000000
--- a/docs/html-intl/intl/in/preview/images/bundles.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/bundles_2x.png b/docs/html-intl/intl/in/preview/images/bundles_2x.png
deleted file mode 100644
index 4669096..0000000
--- a/docs/html-intl/intl/in/preview/images/bundles_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/datasaver.png b/docs/html-intl/intl/in/preview/images/datasaver.png
deleted file mode 100644
index c5a58fb..0000000
--- a/docs/html-intl/intl/in/preview/images/datasaver.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/doze-diagram-1.png b/docs/html-intl/intl/in/preview/images/doze-diagram-1.png
deleted file mode 100644
index 0814447..0000000
--- a/docs/html-intl/intl/in/preview/images/doze-diagram-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/doze-diagram-2.png b/docs/html-intl/intl/in/preview/images/doze-diagram-2.png
deleted file mode 100644
index c20c6cb..0000000
--- a/docs/html-intl/intl/in/preview/images/doze-diagram-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/inline-reply.png b/docs/html-intl/intl/in/preview/images/inline-reply.png
deleted file mode 100644
index 79a1a72..0000000
--- a/docs/html-intl/intl/in/preview/images/inline-reply.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/inline-reply_2x.png b/docs/html-intl/intl/in/preview/images/inline-reply_2x.png
deleted file mode 100644
index 13c6e35..0000000
--- a/docs/html-intl/intl/in/preview/images/inline-reply_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/inline-type-reply.png b/docs/html-intl/intl/in/preview/images/inline-type-reply.png
deleted file mode 100644
index b22aacd..0000000
--- a/docs/html-intl/intl/in/preview/images/inline-type-reply.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/inline-type-reply_2x.png b/docs/html-intl/intl/in/preview/images/inline-type-reply_2x.png
deleted file mode 100644
index 6e52a80..0000000
--- a/docs/html-intl/intl/in/preview/images/inline-type-reply_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/m-preview-timeline-crop.png b/docs/html-intl/intl/in/preview/images/m-preview-timeline-crop.png
deleted file mode 100644
index 724a6af..0000000
--- a/docs/html-intl/intl/in/preview/images/m-preview-timeline-crop.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/m-preview-timeline.png b/docs/html-intl/intl/in/preview/images/m-preview-timeline.png
deleted file mode 100644
index e9a339e..0000000
--- a/docs/html-intl/intl/in/preview/images/m-preview-timeline.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/mw-portrait.png b/docs/html-intl/intl/in/preview/images/mw-portrait.png
deleted file mode 100644
index e752387..0000000
--- a/docs/html-intl/intl/in/preview/images/mw-portrait.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/mw-splitscreen.png b/docs/html-intl/intl/in/preview/images/mw-splitscreen.png
deleted file mode 100644
index bf71999..0000000
--- a/docs/html-intl/intl/in/preview/images/mw-splitscreen.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/mw-splitscreen_2x.png b/docs/html-intl/intl/in/preview/images/mw-splitscreen_2x.png
deleted file mode 100644
index 38114db..0000000
--- a/docs/html-intl/intl/in/preview/images/mw-splitscreen_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/n-preview-setup.png b/docs/html-intl/intl/in/preview/images/n-preview-setup.png
deleted file mode 100644
index 612e031..0000000
--- a/docs/html-intl/intl/in/preview/images/n-preview-setup.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/notifications-1.png b/docs/html-intl/intl/in/preview/images/notifications-1.png
deleted file mode 100644
index 5712002..0000000
--- a/docs/html-intl/intl/in/preview/images/notifications-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/notifications-2.png b/docs/html-intl/intl/in/preview/images/notifications-2.png
deleted file mode 100644
index 0d07948..0000000
--- a/docs/html-intl/intl/in/preview/images/notifications-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/notifications-3.png b/docs/html-intl/intl/in/preview/images/notifications-3.png
deleted file mode 100644
index 261d010..0000000
--- a/docs/html-intl/intl/in/preview/images/notifications-3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/notifications-card.png b/docs/html-intl/intl/in/preview/images/notifications-card.png
deleted file mode 100644
index d9d0590..0000000
--- a/docs/html-intl/intl/in/preview/images/notifications-card.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/pip-active.png b/docs/html-intl/intl/in/preview/images/pip-active.png
deleted file mode 100644
index a24cb03..0000000
--- a/docs/html-intl/intl/in/preview/images/pip-active.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/pip-button.png b/docs/html-intl/intl/in/preview/images/pip-button.png
deleted file mode 100644
index b876b12..0000000
--- a/docs/html-intl/intl/in/preview/images/pip-button.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/quicksettings.png b/docs/html-intl/intl/in/preview/images/quicksettings.png
deleted file mode 100644
index 68e1f74..0000000
--- a/docs/html-intl/intl/in/preview/images/quicksettings.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/sample-activenotifications.png b/docs/html-intl/intl/in/preview/images/sample-activenotifications.png
deleted file mode 100644
index 8817469..0000000
--- a/docs/html-intl/intl/in/preview/images/sample-activenotifications.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/sample-directboot.png b/docs/html-intl/intl/in/preview/images/sample-directboot.png
deleted file mode 100644
index cc409d3..0000000
--- a/docs/html-intl/intl/in/preview/images/sample-directboot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/sample-messagingservice.png b/docs/html-intl/intl/in/preview/images/sample-messagingservice.png
deleted file mode 100644
index 0d8fb3e..0000000
--- a/docs/html-intl/intl/in/preview/images/sample-messagingservice.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/sample-multiwindow.png b/docs/html-intl/intl/in/preview/images/sample-multiwindow.png
deleted file mode 100644
index 979bf61..0000000
--- a/docs/html-intl/intl/in/preview/images/sample-multiwindow.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/sample-scopeddirectoryaccess.png b/docs/html-intl/intl/in/preview/images/sample-scopeddirectoryaccess.png
deleted file mode 100644
index 58515dc..0000000
--- a/docs/html-intl/intl/in/preview/images/sample-scopeddirectoryaccess.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/scoped-folder-access-dont-ask.png b/docs/html-intl/intl/in/preview/images/scoped-folder-access-dont-ask.png
deleted file mode 100644
index 5c505d9..0000000
--- a/docs/html-intl/intl/in/preview/images/scoped-folder-access-dont-ask.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/scoped-folder-access-dont-ask_2x.png b/docs/html-intl/intl/in/preview/images/scoped-folder-access-dont-ask_2x.png
deleted file mode 100644
index 612b69f..0000000
--- a/docs/html-intl/intl/in/preview/images/scoped-folder-access-dont-ask_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/scoped-folder-access-framed.png b/docs/html-intl/intl/in/preview/images/scoped-folder-access-framed.png
deleted file mode 100644
index 0169e41..0000000
--- a/docs/html-intl/intl/in/preview/images/scoped-folder-access-framed.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/scoped-folder-access-framed_2x.png b/docs/html-intl/intl/in/preview/images/scoped-folder-access-framed_2x.png
deleted file mode 100644
index fd59ef1..0000000
--- a/docs/html-intl/intl/in/preview/images/scoped-folder-access-framed_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/screen-zoom-1.png b/docs/html-intl/intl/in/preview/images/screen-zoom-1.png
deleted file mode 100644
index f62d04e..0000000
--- a/docs/html-intl/intl/in/preview/images/screen-zoom-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/screen-zoom-2.png b/docs/html-intl/intl/in/preview/images/screen-zoom-2.png
deleted file mode 100644
index 172b5b3..0000000
--- a/docs/html-intl/intl/in/preview/images/screen-zoom-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/in/preview/images/studio-jdk-location.jpg b/docs/html-intl/intl/in/preview/images/studio-jdk-location.jpg
deleted file mode 100644
index 1b1ba23..0000000
--- a/docs/html-intl/intl/in/preview/images/studio-jdk-location.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/bundles.png b/docs/html-intl/intl/ja/preview/images/bundles.png
deleted file mode 100644
index 8b022b1..0000000
--- a/docs/html-intl/intl/ja/preview/images/bundles.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/bundles_2x.png b/docs/html-intl/intl/ja/preview/images/bundles_2x.png
deleted file mode 100644
index 4669096..0000000
--- a/docs/html-intl/intl/ja/preview/images/bundles_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/datasaver.png b/docs/html-intl/intl/ja/preview/images/datasaver.png
deleted file mode 100644
index c5a58fb..0000000
--- a/docs/html-intl/intl/ja/preview/images/datasaver.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/doze-diagram-1.png b/docs/html-intl/intl/ja/preview/images/doze-diagram-1.png
deleted file mode 100644
index 0814447..0000000
--- a/docs/html-intl/intl/ja/preview/images/doze-diagram-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/doze-diagram-2.png b/docs/html-intl/intl/ja/preview/images/doze-diagram-2.png
deleted file mode 100644
index c20c6cb..0000000
--- a/docs/html-intl/intl/ja/preview/images/doze-diagram-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/inline-reply.png b/docs/html-intl/intl/ja/preview/images/inline-reply.png
deleted file mode 100644
index 79a1a72..0000000
--- a/docs/html-intl/intl/ja/preview/images/inline-reply.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/inline-reply_2x.png b/docs/html-intl/intl/ja/preview/images/inline-reply_2x.png
deleted file mode 100644
index 13c6e35..0000000
--- a/docs/html-intl/intl/ja/preview/images/inline-reply_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/inline-type-reply.png b/docs/html-intl/intl/ja/preview/images/inline-type-reply.png
deleted file mode 100644
index b22aacd..0000000
--- a/docs/html-intl/intl/ja/preview/images/inline-type-reply.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/inline-type-reply_2x.png b/docs/html-intl/intl/ja/preview/images/inline-type-reply_2x.png
deleted file mode 100644
index 6e52a80..0000000
--- a/docs/html-intl/intl/ja/preview/images/inline-type-reply_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/m-preview-timeline-crop.png b/docs/html-intl/intl/ja/preview/images/m-preview-timeline-crop.png
deleted file mode 100644
index 724a6af..0000000
--- a/docs/html-intl/intl/ja/preview/images/m-preview-timeline-crop.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/m-preview-timeline.png b/docs/html-intl/intl/ja/preview/images/m-preview-timeline.png
deleted file mode 100644
index e9a339e..0000000
--- a/docs/html-intl/intl/ja/preview/images/m-preview-timeline.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/mw-portrait.png b/docs/html-intl/intl/ja/preview/images/mw-portrait.png
deleted file mode 100644
index e752387..0000000
--- a/docs/html-intl/intl/ja/preview/images/mw-portrait.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/mw-splitscreen.png b/docs/html-intl/intl/ja/preview/images/mw-splitscreen.png
deleted file mode 100644
index bf71999..0000000
--- a/docs/html-intl/intl/ja/preview/images/mw-splitscreen.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/mw-splitscreen_2x.png b/docs/html-intl/intl/ja/preview/images/mw-splitscreen_2x.png
deleted file mode 100644
index 38114db..0000000
--- a/docs/html-intl/intl/ja/preview/images/mw-splitscreen_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/n-preview-setup.png b/docs/html-intl/intl/ja/preview/images/n-preview-setup.png
deleted file mode 100644
index 612e031..0000000
--- a/docs/html-intl/intl/ja/preview/images/n-preview-setup.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/notifications-1.png b/docs/html-intl/intl/ja/preview/images/notifications-1.png
deleted file mode 100644
index 5712002..0000000
--- a/docs/html-intl/intl/ja/preview/images/notifications-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/notifications-2.png b/docs/html-intl/intl/ja/preview/images/notifications-2.png
deleted file mode 100644
index 0d07948..0000000
--- a/docs/html-intl/intl/ja/preview/images/notifications-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/notifications-3.png b/docs/html-intl/intl/ja/preview/images/notifications-3.png
deleted file mode 100644
index 261d010..0000000
--- a/docs/html-intl/intl/ja/preview/images/notifications-3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/notifications-card.png b/docs/html-intl/intl/ja/preview/images/notifications-card.png
deleted file mode 100644
index d9d0590..0000000
--- a/docs/html-intl/intl/ja/preview/images/notifications-card.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/pip-active.png b/docs/html-intl/intl/ja/preview/images/pip-active.png
deleted file mode 100644
index a24cb03..0000000
--- a/docs/html-intl/intl/ja/preview/images/pip-active.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/pip-button.png b/docs/html-intl/intl/ja/preview/images/pip-button.png
deleted file mode 100644
index b876b12..0000000
--- a/docs/html-intl/intl/ja/preview/images/pip-button.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/quicksettings.png b/docs/html-intl/intl/ja/preview/images/quicksettings.png
deleted file mode 100644
index 68e1f74..0000000
--- a/docs/html-intl/intl/ja/preview/images/quicksettings.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/sample-activenotifications.png b/docs/html-intl/intl/ja/preview/images/sample-activenotifications.png
deleted file mode 100644
index 8817469..0000000
--- a/docs/html-intl/intl/ja/preview/images/sample-activenotifications.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/sample-directboot.png b/docs/html-intl/intl/ja/preview/images/sample-directboot.png
deleted file mode 100644
index cc409d3..0000000
--- a/docs/html-intl/intl/ja/preview/images/sample-directboot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/sample-messagingservice.png b/docs/html-intl/intl/ja/preview/images/sample-messagingservice.png
deleted file mode 100644
index 0d8fb3e..0000000
--- a/docs/html-intl/intl/ja/preview/images/sample-messagingservice.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/sample-multiwindow.png b/docs/html-intl/intl/ja/preview/images/sample-multiwindow.png
deleted file mode 100644
index 979bf61..0000000
--- a/docs/html-intl/intl/ja/preview/images/sample-multiwindow.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/sample-scopeddirectoryaccess.png b/docs/html-intl/intl/ja/preview/images/sample-scopeddirectoryaccess.png
deleted file mode 100644
index 58515dc..0000000
--- a/docs/html-intl/intl/ja/preview/images/sample-scopeddirectoryaccess.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/scoped-folder-access-dont-ask.png b/docs/html-intl/intl/ja/preview/images/scoped-folder-access-dont-ask.png
deleted file mode 100644
index 5c505d9..0000000
--- a/docs/html-intl/intl/ja/preview/images/scoped-folder-access-dont-ask.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/scoped-folder-access-dont-ask_2x.png b/docs/html-intl/intl/ja/preview/images/scoped-folder-access-dont-ask_2x.png
deleted file mode 100644
index 612b69f..0000000
--- a/docs/html-intl/intl/ja/preview/images/scoped-folder-access-dont-ask_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/scoped-folder-access-framed.png b/docs/html-intl/intl/ja/preview/images/scoped-folder-access-framed.png
deleted file mode 100644
index 0169e41..0000000
--- a/docs/html-intl/intl/ja/preview/images/scoped-folder-access-framed.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/scoped-folder-access-framed_2x.png b/docs/html-intl/intl/ja/preview/images/scoped-folder-access-framed_2x.png
deleted file mode 100644
index fd59ef1..0000000
--- a/docs/html-intl/intl/ja/preview/images/scoped-folder-access-framed_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/screen-zoom-1.png b/docs/html-intl/intl/ja/preview/images/screen-zoom-1.png
deleted file mode 100644
index f62d04e..0000000
--- a/docs/html-intl/intl/ja/preview/images/screen-zoom-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/screen-zoom-2.png b/docs/html-intl/intl/ja/preview/images/screen-zoom-2.png
deleted file mode 100644
index 172b5b3..0000000
--- a/docs/html-intl/intl/ja/preview/images/screen-zoom-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ja/preview/images/studio-jdk-location.jpg b/docs/html-intl/intl/ja/preview/images/studio-jdk-location.jpg
deleted file mode 100644
index 1b1ba23..0000000
--- a/docs/html-intl/intl/ja/preview/images/studio-jdk-location.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/bundles.png b/docs/html-intl/intl/ko/preview/images/bundles.png
deleted file mode 100644
index 8b022b1..0000000
--- a/docs/html-intl/intl/ko/preview/images/bundles.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/bundles_2x.png b/docs/html-intl/intl/ko/preview/images/bundles_2x.png
deleted file mode 100644
index 4669096..0000000
--- a/docs/html-intl/intl/ko/preview/images/bundles_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/datasaver.png b/docs/html-intl/intl/ko/preview/images/datasaver.png
deleted file mode 100644
index c5a58fb..0000000
--- a/docs/html-intl/intl/ko/preview/images/datasaver.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/doze-diagram-1.png b/docs/html-intl/intl/ko/preview/images/doze-diagram-1.png
deleted file mode 100644
index 0814447..0000000
--- a/docs/html-intl/intl/ko/preview/images/doze-diagram-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/doze-diagram-2.png b/docs/html-intl/intl/ko/preview/images/doze-diagram-2.png
deleted file mode 100644
index c20c6cb..0000000
--- a/docs/html-intl/intl/ko/preview/images/doze-diagram-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/inline-reply.png b/docs/html-intl/intl/ko/preview/images/inline-reply.png
deleted file mode 100644
index 79a1a72..0000000
--- a/docs/html-intl/intl/ko/preview/images/inline-reply.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/inline-reply_2x.png b/docs/html-intl/intl/ko/preview/images/inline-reply_2x.png
deleted file mode 100644
index 13c6e35..0000000
--- a/docs/html-intl/intl/ko/preview/images/inline-reply_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/inline-type-reply.png b/docs/html-intl/intl/ko/preview/images/inline-type-reply.png
deleted file mode 100644
index b22aacd..0000000
--- a/docs/html-intl/intl/ko/preview/images/inline-type-reply.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/inline-type-reply_2x.png b/docs/html-intl/intl/ko/preview/images/inline-type-reply_2x.png
deleted file mode 100644
index 6e52a80..0000000
--- a/docs/html-intl/intl/ko/preview/images/inline-type-reply_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/m-preview-timeline-crop.png b/docs/html-intl/intl/ko/preview/images/m-preview-timeline-crop.png
deleted file mode 100644
index 724a6af..0000000
--- a/docs/html-intl/intl/ko/preview/images/m-preview-timeline-crop.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/m-preview-timeline.png b/docs/html-intl/intl/ko/preview/images/m-preview-timeline.png
deleted file mode 100644
index e9a339e..0000000
--- a/docs/html-intl/intl/ko/preview/images/m-preview-timeline.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/mw-portrait.png b/docs/html-intl/intl/ko/preview/images/mw-portrait.png
deleted file mode 100644
index e752387..0000000
--- a/docs/html-intl/intl/ko/preview/images/mw-portrait.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/mw-splitscreen.png b/docs/html-intl/intl/ko/preview/images/mw-splitscreen.png
deleted file mode 100644
index bf71999..0000000
--- a/docs/html-intl/intl/ko/preview/images/mw-splitscreen.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/mw-splitscreen_2x.png b/docs/html-intl/intl/ko/preview/images/mw-splitscreen_2x.png
deleted file mode 100644
index 38114db..0000000
--- a/docs/html-intl/intl/ko/preview/images/mw-splitscreen_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/n-preview-setup.png b/docs/html-intl/intl/ko/preview/images/n-preview-setup.png
deleted file mode 100644
index 612e031..0000000
--- a/docs/html-intl/intl/ko/preview/images/n-preview-setup.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/notifications-1.png b/docs/html-intl/intl/ko/preview/images/notifications-1.png
deleted file mode 100644
index 5712002..0000000
--- a/docs/html-intl/intl/ko/preview/images/notifications-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/notifications-2.png b/docs/html-intl/intl/ko/preview/images/notifications-2.png
deleted file mode 100644
index 0d07948..0000000
--- a/docs/html-intl/intl/ko/preview/images/notifications-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/notifications-3.png b/docs/html-intl/intl/ko/preview/images/notifications-3.png
deleted file mode 100644
index 261d010..0000000
--- a/docs/html-intl/intl/ko/preview/images/notifications-3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/notifications-card.png b/docs/html-intl/intl/ko/preview/images/notifications-card.png
deleted file mode 100644
index d9d0590..0000000
--- a/docs/html-intl/intl/ko/preview/images/notifications-card.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/pip-active.png b/docs/html-intl/intl/ko/preview/images/pip-active.png
deleted file mode 100644
index a24cb03..0000000
--- a/docs/html-intl/intl/ko/preview/images/pip-active.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/pip-button.png b/docs/html-intl/intl/ko/preview/images/pip-button.png
deleted file mode 100644
index b876b12..0000000
--- a/docs/html-intl/intl/ko/preview/images/pip-button.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/quicksettings.png b/docs/html-intl/intl/ko/preview/images/quicksettings.png
deleted file mode 100644
index 68e1f74..0000000
--- a/docs/html-intl/intl/ko/preview/images/quicksettings.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/sample-activenotifications.png b/docs/html-intl/intl/ko/preview/images/sample-activenotifications.png
deleted file mode 100644
index 8817469..0000000
--- a/docs/html-intl/intl/ko/preview/images/sample-activenotifications.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/sample-directboot.png b/docs/html-intl/intl/ko/preview/images/sample-directboot.png
deleted file mode 100644
index cc409d3..0000000
--- a/docs/html-intl/intl/ko/preview/images/sample-directboot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/sample-messagingservice.png b/docs/html-intl/intl/ko/preview/images/sample-messagingservice.png
deleted file mode 100644
index 0d8fb3e..0000000
--- a/docs/html-intl/intl/ko/preview/images/sample-messagingservice.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/sample-multiwindow.png b/docs/html-intl/intl/ko/preview/images/sample-multiwindow.png
deleted file mode 100644
index 979bf61..0000000
--- a/docs/html-intl/intl/ko/preview/images/sample-multiwindow.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/sample-scopeddirectoryaccess.png b/docs/html-intl/intl/ko/preview/images/sample-scopeddirectoryaccess.png
deleted file mode 100644
index 58515dc..0000000
--- a/docs/html-intl/intl/ko/preview/images/sample-scopeddirectoryaccess.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/scoped-folder-access-dont-ask.png b/docs/html-intl/intl/ko/preview/images/scoped-folder-access-dont-ask.png
deleted file mode 100644
index 5c505d9..0000000
--- a/docs/html-intl/intl/ko/preview/images/scoped-folder-access-dont-ask.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/scoped-folder-access-dont-ask_2x.png b/docs/html-intl/intl/ko/preview/images/scoped-folder-access-dont-ask_2x.png
deleted file mode 100644
index 612b69f..0000000
--- a/docs/html-intl/intl/ko/preview/images/scoped-folder-access-dont-ask_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/scoped-folder-access-framed.png b/docs/html-intl/intl/ko/preview/images/scoped-folder-access-framed.png
deleted file mode 100644
index 0169e41..0000000
--- a/docs/html-intl/intl/ko/preview/images/scoped-folder-access-framed.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/scoped-folder-access-framed_2x.png b/docs/html-intl/intl/ko/preview/images/scoped-folder-access-framed_2x.png
deleted file mode 100644
index fd59ef1..0000000
--- a/docs/html-intl/intl/ko/preview/images/scoped-folder-access-framed_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/screen-zoom-1.png b/docs/html-intl/intl/ko/preview/images/screen-zoom-1.png
deleted file mode 100644
index f62d04e..0000000
--- a/docs/html-intl/intl/ko/preview/images/screen-zoom-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/screen-zoom-2.png b/docs/html-intl/intl/ko/preview/images/screen-zoom-2.png
deleted file mode 100644
index 172b5b3..0000000
--- a/docs/html-intl/intl/ko/preview/images/screen-zoom-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/ko/preview/images/studio-jdk-location.jpg b/docs/html-intl/intl/ko/preview/images/studio-jdk-location.jpg
deleted file mode 100644
index 1b1ba23..0000000
--- a/docs/html-intl/intl/ko/preview/images/studio-jdk-location.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/bundles.png b/docs/html-intl/intl/pt-br/preview/images/bundles.png
deleted file mode 100644
index 8b022b1..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/bundles.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/bundles_2x.png b/docs/html-intl/intl/pt-br/preview/images/bundles_2x.png
deleted file mode 100644
index 4669096..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/bundles_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/datasaver.png b/docs/html-intl/intl/pt-br/preview/images/datasaver.png
deleted file mode 100644
index c5a58fb..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/datasaver.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/doze-diagram-1.png b/docs/html-intl/intl/pt-br/preview/images/doze-diagram-1.png
deleted file mode 100644
index 0814447..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/doze-diagram-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/doze-diagram-2.png b/docs/html-intl/intl/pt-br/preview/images/doze-diagram-2.png
deleted file mode 100644
index c20c6cb..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/doze-diagram-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/inline-reply.png b/docs/html-intl/intl/pt-br/preview/images/inline-reply.png
deleted file mode 100644
index 79a1a72..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/inline-reply.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/inline-reply_2x.png b/docs/html-intl/intl/pt-br/preview/images/inline-reply_2x.png
deleted file mode 100644
index 13c6e35..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/inline-reply_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/inline-type-reply.png b/docs/html-intl/intl/pt-br/preview/images/inline-type-reply.png
deleted file mode 100644
index b22aacd..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/inline-type-reply.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/inline-type-reply_2x.png b/docs/html-intl/intl/pt-br/preview/images/inline-type-reply_2x.png
deleted file mode 100644
index 6e52a80..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/inline-type-reply_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline-crop.png b/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline-crop.png
deleted file mode 100644
index 724a6af..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline-crop.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline.png b/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline.png
deleted file mode 100644
index e9a339e..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/mw-portrait.png b/docs/html-intl/intl/pt-br/preview/images/mw-portrait.png
deleted file mode 100644
index e752387..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/mw-portrait.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/mw-splitscreen.png b/docs/html-intl/intl/pt-br/preview/images/mw-splitscreen.png
deleted file mode 100644
index bf71999..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/mw-splitscreen.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/mw-splitscreen_2x.png b/docs/html-intl/intl/pt-br/preview/images/mw-splitscreen_2x.png
deleted file mode 100644
index 38114db..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/mw-splitscreen_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/n-preview-setup.png b/docs/html-intl/intl/pt-br/preview/images/n-preview-setup.png
deleted file mode 100644
index 612e031..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/n-preview-setup.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/notifications-1.png b/docs/html-intl/intl/pt-br/preview/images/notifications-1.png
deleted file mode 100644
index 5712002..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/notifications-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/notifications-2.png b/docs/html-intl/intl/pt-br/preview/images/notifications-2.png
deleted file mode 100644
index 0d07948..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/notifications-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/notifications-3.png b/docs/html-intl/intl/pt-br/preview/images/notifications-3.png
deleted file mode 100644
index 261d010..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/notifications-3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/notifications-card.png b/docs/html-intl/intl/pt-br/preview/images/notifications-card.png
deleted file mode 100644
index d9d0590..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/notifications-card.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/pip-active.png b/docs/html-intl/intl/pt-br/preview/images/pip-active.png
deleted file mode 100644
index a24cb03..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/pip-active.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/pip-button.png b/docs/html-intl/intl/pt-br/preview/images/pip-button.png
deleted file mode 100644
index b876b12..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/pip-button.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/quicksettings.png b/docs/html-intl/intl/pt-br/preview/images/quicksettings.png
deleted file mode 100644
index 68e1f74..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/quicksettings.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/sample-activenotifications.png b/docs/html-intl/intl/pt-br/preview/images/sample-activenotifications.png
deleted file mode 100644
index 8817469..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/sample-activenotifications.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/sample-directboot.png b/docs/html-intl/intl/pt-br/preview/images/sample-directboot.png
deleted file mode 100644
index cc409d3..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/sample-directboot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/sample-messagingservice.png b/docs/html-intl/intl/pt-br/preview/images/sample-messagingservice.png
deleted file mode 100644
index 0d8fb3e..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/sample-messagingservice.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/sample-multiwindow.png b/docs/html-intl/intl/pt-br/preview/images/sample-multiwindow.png
deleted file mode 100644
index 979bf61..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/sample-multiwindow.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/sample-scopeddirectoryaccess.png b/docs/html-intl/intl/pt-br/preview/images/sample-scopeddirectoryaccess.png
deleted file mode 100644
index 58515dc..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/sample-scopeddirectoryaccess.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/scoped-folder-access-dont-ask.png b/docs/html-intl/intl/pt-br/preview/images/scoped-folder-access-dont-ask.png
deleted file mode 100644
index 5c505d9..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/scoped-folder-access-dont-ask.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/scoped-folder-access-dont-ask_2x.png b/docs/html-intl/intl/pt-br/preview/images/scoped-folder-access-dont-ask_2x.png
deleted file mode 100644
index 612b69f..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/scoped-folder-access-dont-ask_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/scoped-folder-access-framed.png b/docs/html-intl/intl/pt-br/preview/images/scoped-folder-access-framed.png
deleted file mode 100644
index 0169e41..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/scoped-folder-access-framed.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/scoped-folder-access-framed_2x.png b/docs/html-intl/intl/pt-br/preview/images/scoped-folder-access-framed_2x.png
deleted file mode 100644
index fd59ef1..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/scoped-folder-access-framed_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/screen-zoom-1.png b/docs/html-intl/intl/pt-br/preview/images/screen-zoom-1.png
deleted file mode 100644
index f62d04e..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/screen-zoom-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/screen-zoom-2.png b/docs/html-intl/intl/pt-br/preview/images/screen-zoom-2.png
deleted file mode 100644
index 172b5b3..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/screen-zoom-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/pt-br/preview/images/studio-jdk-location.jpg b/docs/html-intl/intl/pt-br/preview/images/studio-jdk-location.jpg
deleted file mode 100644
index 1b1ba23..0000000
--- a/docs/html-intl/intl/pt-br/preview/images/studio-jdk-location.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/bundles.png b/docs/html-intl/intl/zh-cn/preview/images/bundles.png
deleted file mode 100644
index 8b022b1..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/bundles.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/bundles_2x.png b/docs/html-intl/intl/zh-cn/preview/images/bundles_2x.png
deleted file mode 100644
index 4669096..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/bundles_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/datasaver.png b/docs/html-intl/intl/zh-cn/preview/images/datasaver.png
deleted file mode 100644
index c5a58fb..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/datasaver.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/doze-diagram-1.png b/docs/html-intl/intl/zh-cn/preview/images/doze-diagram-1.png
deleted file mode 100644
index 0814447..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/doze-diagram-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/doze-diagram-2.png b/docs/html-intl/intl/zh-cn/preview/images/doze-diagram-2.png
deleted file mode 100644
index c20c6cb..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/doze-diagram-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/inline-reply.png b/docs/html-intl/intl/zh-cn/preview/images/inline-reply.png
deleted file mode 100644
index 79a1a72..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/inline-reply.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/inline-reply_2x.png b/docs/html-intl/intl/zh-cn/preview/images/inline-reply_2x.png
deleted file mode 100644
index 13c6e35..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/inline-reply_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/inline-type-reply.png b/docs/html-intl/intl/zh-cn/preview/images/inline-type-reply.png
deleted file mode 100644
index b22aacd..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/inline-type-reply.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/inline-type-reply_2x.png b/docs/html-intl/intl/zh-cn/preview/images/inline-type-reply_2x.png
deleted file mode 100644
index 6e52a80..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/inline-type-reply_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/m-preview-timeline-crop.png b/docs/html-intl/intl/zh-cn/preview/images/m-preview-timeline-crop.png
deleted file mode 100644
index 724a6af..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/m-preview-timeline-crop.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/m-preview-timeline.png b/docs/html-intl/intl/zh-cn/preview/images/m-preview-timeline.png
deleted file mode 100644
index e9a339e..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/m-preview-timeline.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/mw-portrait.png b/docs/html-intl/intl/zh-cn/preview/images/mw-portrait.png
deleted file mode 100644
index e752387..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/mw-portrait.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/mw-splitscreen.png b/docs/html-intl/intl/zh-cn/preview/images/mw-splitscreen.png
deleted file mode 100644
index bf71999..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/mw-splitscreen.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/mw-splitscreen_2x.png b/docs/html-intl/intl/zh-cn/preview/images/mw-splitscreen_2x.png
deleted file mode 100644
index 38114db..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/mw-splitscreen_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/n-preview-setup.png b/docs/html-intl/intl/zh-cn/preview/images/n-preview-setup.png
deleted file mode 100644
index 612e031..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/n-preview-setup.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/notifications-1.png b/docs/html-intl/intl/zh-cn/preview/images/notifications-1.png
deleted file mode 100644
index 5712002..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/notifications-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/notifications-2.png b/docs/html-intl/intl/zh-cn/preview/images/notifications-2.png
deleted file mode 100644
index 0d07948..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/notifications-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/notifications-3.png b/docs/html-intl/intl/zh-cn/preview/images/notifications-3.png
deleted file mode 100644
index 261d010..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/notifications-3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/notifications-card.png b/docs/html-intl/intl/zh-cn/preview/images/notifications-card.png
deleted file mode 100644
index d9d0590..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/notifications-card.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/pip-active.png b/docs/html-intl/intl/zh-cn/preview/images/pip-active.png
deleted file mode 100644
index a24cb03..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/pip-active.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/pip-button.png b/docs/html-intl/intl/zh-cn/preview/images/pip-button.png
deleted file mode 100644
index b876b12..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/pip-button.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/quicksettings.png b/docs/html-intl/intl/zh-cn/preview/images/quicksettings.png
deleted file mode 100644
index 68e1f74..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/quicksettings.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/sample-activenotifications.png b/docs/html-intl/intl/zh-cn/preview/images/sample-activenotifications.png
deleted file mode 100644
index 8817469..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/sample-activenotifications.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/sample-directboot.png b/docs/html-intl/intl/zh-cn/preview/images/sample-directboot.png
deleted file mode 100644
index cc409d3..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/sample-directboot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/sample-messagingservice.png b/docs/html-intl/intl/zh-cn/preview/images/sample-messagingservice.png
deleted file mode 100644
index 0d8fb3e..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/sample-messagingservice.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/sample-multiwindow.png b/docs/html-intl/intl/zh-cn/preview/images/sample-multiwindow.png
deleted file mode 100644
index 979bf61..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/sample-multiwindow.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/sample-scopeddirectoryaccess.png b/docs/html-intl/intl/zh-cn/preview/images/sample-scopeddirectoryaccess.png
deleted file mode 100644
index 58515dc..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/sample-scopeddirectoryaccess.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/scoped-folder-access-dont-ask.png b/docs/html-intl/intl/zh-cn/preview/images/scoped-folder-access-dont-ask.png
deleted file mode 100644
index 5c505d9..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/scoped-folder-access-dont-ask.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/scoped-folder-access-dont-ask_2x.png b/docs/html-intl/intl/zh-cn/preview/images/scoped-folder-access-dont-ask_2x.png
deleted file mode 100644
index 612b69f..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/scoped-folder-access-dont-ask_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/scoped-folder-access-framed.png b/docs/html-intl/intl/zh-cn/preview/images/scoped-folder-access-framed.png
deleted file mode 100644
index 0169e41..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/scoped-folder-access-framed.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/scoped-folder-access-framed_2x.png b/docs/html-intl/intl/zh-cn/preview/images/scoped-folder-access-framed_2x.png
deleted file mode 100644
index fd59ef1..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/scoped-folder-access-framed_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/screen-zoom-1.png b/docs/html-intl/intl/zh-cn/preview/images/screen-zoom-1.png
deleted file mode 100644
index f62d04e..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/screen-zoom-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/screen-zoom-2.png b/docs/html-intl/intl/zh-cn/preview/images/screen-zoom-2.png
deleted file mode 100644
index 172b5b3..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/screen-zoom-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html-intl/intl/zh-cn/preview/images/studio-jdk-location.jpg b/docs/html-intl/intl/zh-cn/preview/images/studio-jdk-location.jpg
deleted file mode 100644
index 1b1ba23..0000000
--- a/docs/html-intl/intl/zh-cn/preview/images/studio-jdk-location.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/html/_redirects.yaml b/docs/html/_redirects.yaml
index ae858fe..6e1cc23 100644
--- a/docs/html/_redirects.yaml
+++ b/docs/html/_redirects.yaml
@@ -797,54 +797,6 @@
to: https://code.google.com/p/android/issues/list?can=2&q=label%3ADevPreview-N
- from: /2016/03/first-preview-of-android-n-developer.html
to: http://android-developers.blogspot.com/2016/03/first-preview-of-android-n-developer.html
-- from: /r/studio-ui/vector-asset-studio.html
- to: /studio/write/vector-asset-studio.html
-- from: /r/studio-ui/image-asset-studio.html
- to: /studio/write/image-asset-studio.html
-- from: /r/studio-ui/project-structure.html
- to: /studio/projects/index.html
-- from: /r/studio-ui/android-monitor.html
- to: /studio/profile/android-monitor.html
-- from: /r/studio-ui/am-logcat.html
- to: /studio/debug/am-logcat.html
-- from: /r/studio-ui/am-memory.html
- to: /studio/profile/am-memory.html
-- from: /r/studio-ui/am-cpu.html
- to: /studio/profile/am-cpu.html
-- from: /r/studio-ui/am-gpu.html
- to: /studio/profile/am-gpu.html
-- from: /r/studio-ui/am-network.html
- to: /studio/profile/am-network.html
-- from: /r/studio-ui/am-hprof.html
- to: /studio/profile/am-hprof.html
-- from: /r/studio-ui/am-allocation.html
- to: /studio/profile/am-allocation.html
-- from: /r/studio-ui/am-methodtrace.html
- to: /studio/profile/am-methodtrace.html
-- from: /r/studio-ui/am-sysinfo.html
- to: /studio/profile/am-sysinfo.html
-- from: /r/studio-ui/am-screenshot.html
- to: /studio/debug/am-screenshot.html
-- from: /r/studio-ui/am-video.html
- to: /studio/debug/am-video.html
-- from: /r/studio-ui/avd-manager.html
- to: /studio/run/managing-avds.html
-- from: /r/studio-ui/rundebugconfig.html
- to: /studio/run/index.html
-- from: /r/studio-ui/devicechooser.html
- to: /studio/run/emulator.html
-- from: /r/studio-ui/virtualdeviceconfig.html
- to: /studio/run/managing-avds.html
-- from: /r/studio-ui/emulator.html
- to: /studio/run/emulator.html
-- from: /r/studio-ui/instant-run.html
- to: /studio/run/index.html#instant-run
-- from: /r/studio-ui/test-recorder.html
- to: http://tools.android.com/tech-docs/test-recorder
-- from: /r/studio-ui/export-licenses.html
- to: http://tools.android.com/tech-docs/new-build-system/license
-- from: /r/studio-ui/experimental-to-stable-gradle.html
- to: http://tools.android.com/tech-docs/new-build-system/gradle-experimental/experimental-to-stable-gradle
- from: /reference/org/apache/http/...
to: /about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client
- from: /shareables/...
@@ -1066,6 +1018,8 @@
to: /studio/projects/templates.html
- from: /tools/publishing/app-signing.html
to: /studio/publish/app-signing.html
+- from: /guide/publishing/app-signing.html
+ to: /studio/publish/app-signing.html
- from: /tools/publishing/preparing.html
to: /studio/publish/preparing.html
- from: /tools/publishing/publishing_overview.html
@@ -1169,3 +1123,57 @@
to: /preview/features/background-optimization.html
- from: /bgopt/
to: /preview/features/background-optimization.html
+
+
+
+# Android Studio help button redirects
+- from: /r/studio-ui/vector-asset-studio.html
+ to: /studio/write/vector-asset-studio.html
+- from: /r/studio-ui/image-asset-studio.html
+ to: /studio/write/image-asset-studio.html
+- from: /r/studio-ui/project-structure.html
+ to: /studio/projects/index.html
+- from: /r/studio-ui/android-monitor.html
+ to: /studio/profile/android-monitor.html
+- from: /r/studio-ui/am-logcat.html
+ to: /studio/debug/am-logcat.html
+- from: /r/studio-ui/am-memory.html
+ to: /studio/profile/am-memory.html
+- from: /r/studio-ui/am-cpu.html
+ to: /studio/profile/am-cpu.html
+- from: /r/studio-ui/am-gpu.html
+ to: /studio/profile/am-gpu.html
+- from: /r/studio-ui/am-network.html
+ to: /studio/profile/am-network.html
+- from: /r/studio-ui/am-hprof.html
+ to: /studio/profile/am-hprof.html
+- from: /r/studio-ui/am-allocation.html
+ to: /studio/profile/am-allocation.html
+- from: /r/studio-ui/am-methodtrace.html
+ to: /studio/profile/am-methodtrace.html
+- from: /r/studio-ui/am-sysinfo.html
+ to: /studio/profile/am-sysinfo.html
+- from: /r/studio-ui/am-screenshot.html
+ to: /studio/debug/am-screenshot.html
+- from: /r/studio-ui/am-video.html
+ to: /studio/debug/am-video.html
+- from: /r/studio-ui/avd-manager.html
+ to: /studio/run/managing-avds.html
+- from: /r/studio-ui/rundebugconfig.html
+ to: /studio/run/index.html
+- from: /r/studio-ui/devicechooser.html
+ to: /studio/run/emulator.html
+- from: /r/studio-ui/virtualdeviceconfig.html
+ to: /studio/run/managing-avds.html
+- from: /r/studio-ui/emulator.html
+ to: /studio/run/emulator.html
+- from: /r/studio-ui/instant-run.html
+ to: /studio/run/index.html#instant-run
+- from: /r/studio-ui/test-recorder.html
+ to: http://tools.android.com/tech-docs/test-recorder
+- from: /r/studio-ui/export-licenses.html
+ to: http://tools.android.com/tech-docs/new-build-system/license
+- from: /r/studio-ui/experimental-to-stable-gradle.html
+ to: http://tools.android.com/tech-docs/new-build-system/gradle-experimental/experimental-to-stable-gradle
+- from: /r/studio-ui/sdk-manager.html
+ to: https://developer.android.com/studio/intro/update.html#sdk-manager
\ No newline at end of file
diff --git a/docs/html/google/play/billing/billing_admin.jd b/docs/html/google/play/billing/billing_admin.jd
index a1135bf..05f3ad5 100644
--- a/docs/html/google/play/billing/billing_admin.jd
+++ b/docs/html/google/play/billing/billing_admin.jd
@@ -747,6 +747,15 @@
<code>orderId</code> field of the <code>PURCHASE_STATE_CHANGED</code>
intent.</p>
+<p class="note">
+ <strong>Note:</strong> When a user completes a test purchase, the
+ <code>orderId</code> field remains blank. To track test transactions, use
+ the <code>purchaseToken</code> field instead. For more information about
+ working with test purchases, see <a
+ href="{@docRoot}google/play/billing/billing_testing.html">Testing In-app
+ Billing</a>.
+</p>
+
<p>In your app, you can use the order number as a general-purpose identifier for
the in-app purchase transaction. After the purchase, you can use the order
number as a means of tracking the transaction in reconciliation reports and for
diff --git a/docs/html/google/play/billing/billing_testing.jd b/docs/html/google/play/billing/billing_testing.jd
index 018276d..755f3ff 100644
--- a/docs/html/google/play/billing/billing_testing.jd
+++ b/docs/html/google/play/billing/billing_testing.jd
@@ -79,14 +79,11 @@
through Google Play without incurring any actual charges to the user
accounts.</p>
-<p>Once authorized for testing access, those users can make purchases without
-being charged.
-Test purchases are real orders and Google Play processes them in the same way as
-other orders. However, the <code>orderId</code> field for test purchases is
-blank.
-When purchases are complete, Google Play prevents the orders from
-going to financial processing, ensuring that there are no actual charges to user
-accounts, and automatically canceling the completed orders after 14 days.</p>
+<p>
+ Once authorized for testing access, those users can make purchases without
+ being charged. The <code>orderId</code> field for test purchases remains
+ blank, ensuring that there are no actual charges to user accounts.
+</p>
<p class="note">
<strong>Note:</strong> Test subscription purchases recur daily, regardless of
@@ -130,8 +127,8 @@
purchase dialog.</p>
<p class="note">
- <strong>Note:</strong> For test subscription purchases, leave the {@code orderId}
- field blank. You can use the {@code purchaseToken} field to identify test purchases.
+ <strong>Note:</strong> For test purchases, leave the {@code orderId} field
+ blank. You can use the {@code purchaseToken} field to identify test purchases.
</p>
@@ -150,33 +147,22 @@
<h4 id="cancelling">Canceling completed test purchases</h4>
<p>Google Play accumulates completed test purchases for each user but does not
-pass them on to financial processing. Over time, it automatically clears out
-the purchases by canceling them. </p>
+pass them on to financial processing.</p>
<p>In some cases, you might want to manually cancel a test purchase to continue
-testing. For canceling purchases, you have these options:</p>
-
-<ul>
-<li>Wait for the transactions to expire—Google Play clears completed test
-purchases 14 days after their purchase date. </li>
-<li>Cancel purchases manually—you can go to the Google payments merchant
-center, look up the transaction, and then cancel it. You can find transactions
-by looking up their order numbers.</li>
+testing. To do so, open the app page in the Play Store. If the test purchase
+that you want to cancel is a subscription, you can also use the
+<a href="https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/cancel">
+{@code cancel()}</a> method of the Purchases.subscriptions API.
</ul>
-<p>
- You can cancel test subscriptions purchases from the app page in the Play Store,
- or use the
- <a href="https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/cancel">
- {@code cancel}</a> method.
-</p>
-
<p class="caution">
<strong>Important:</strong> The
<a href="https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/refund">
- {@code refund}</a> and
+ {@code refund()}</a> and
<a href="https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/revoke">
- {@code revoke}</a> methods do not support test purchases.
+ {@code revoke()}</a> methods of the Purchases.subscriptions API don't support
+ test purchases.
</p>
diff --git a/docs/html/guide/topics/renderscript/compute.jd b/docs/html/guide/topics/renderscript/compute.jd
index 564215e..fc795ff 100755
--- a/docs/html/guide/topics/renderscript/compute.jd
+++ b/docs/html/guide/topics/renderscript/compute.jd
@@ -21,7 +21,7 @@
<h2>Related Samples</h2>
<ol>
- <li><a href="{@docRoot}resources/samples/RenderScript/HelloCompute/index.html">Hello
+ <li><a class="external-link"href="https://github.com/android/platform_development/tree/master/samples/RenderScript/HelloCompute">Hello
Compute</a></li>
</ol>
</div>
diff --git a/docs/html/images/testing/test-types.zip b/docs/html/images/testing/test-types.zip
new file mode 100644
index 0000000..d433b91
--- /dev/null
+++ b/docs/html/images/testing/test-types.zip
Binary files differ
diff --git a/docs/html/images/testing/test-types_2x.png b/docs/html/images/testing/test-types_2x.png
new file mode 100644
index 0000000..0a374aa
--- /dev/null
+++ b/docs/html/images/testing/test-types_2x.png
Binary files differ
diff --git a/docs/html/training/articles/user-data-ids.jd b/docs/html/training/articles/user-data-ids.jd
index 5a4648b..9102166 100644
--- a/docs/html/training/articles/user-data-ids.jd
+++ b/docs/html/training/articles/user-data-ids.jd
@@ -189,15 +189,15 @@
<div style="padding:.5em 2em;">
<div style="border-left:4px solid #999;padding:0 1em;font-style:italic;">
-<p>...upon reset, a new advertising
+<p>...if reset, a new advertising
identifier must not be connected to a previous advertising identifier or data
derived from a previous advertising identifier without the explicit consent
- of the user</span></p>
+ of the user.</span></p>
</div>
</div>
<p>
- <em><strong>Always respect the associated Interest Based Advertising
+ <em><strong>Always respect the associated Personalized Ads
flag</strong></em>. Advertising IDs are configurable in that users can limit
the amount of tracking associated with the ID. Always use the <code><a href=
"https://developers.google.com/android/reference/com/google/android/gms/ads/identifier/AdvertisingIdClient.Info.html#isLimitAdTrackingEnabled()">
@@ -210,10 +210,10 @@
<div style="padding:.5em 2em;">
<div style="border-left:4px solid #999;padding:0 1em;font-style:italic;">
-<p>...you must abide by a user’s ‘opt out of
- interest-based advertising’ setting. If a user has enabled this setting, you
+<p>...you must abide by a user’s ‘Opt out of interest-based advertising’ or 'Opt
+ out of Ads Personalization' setting. If a user has enabled this setting, you
may not use the advertising identifier for creating user profiles for
- advertising purposes or for targeting users with interest-based advertising.
+ advertising purposes or for targeting users with personalized advertising.
Allowed activities include contextual advertising, frequency capping,
conversion tracking, reporting and security and fraud detection.</span></p>
</div>
@@ -286,7 +286,8 @@
<code>account_id</code> column in both tables, which would be a violation of
the <a href=
"https://play.google.com/about/developer-content-policy.html">Google Play
- Developer Content Policy</a>.
+ Developer Content Policy</a>, if you did not get explicit permission from
+ your users.
</p>
<p>
diff --git a/docs/html/training/auto/audio/index.jd b/docs/html/training/auto/audio/index.jd
index aa20e3a..3a1b1e8 100644
--- a/docs/html/training/auto/audio/index.jd
+++ b/docs/html/training/auto/audio/index.jd
@@ -21,6 +21,7 @@
<li><a href="#config_manifest">Configure Your Manifest</a></li>
<li><a href="#isconnected">Determine if Your App is Connected</a></li>
<li><a href="#alarm">Handle Alarms</a></li>
+ <li><a href="#mediaadv">Handle Media Advertisements</a></li>
<li><a href="#implement_browser">Build a Browser Service</a></li>
<li><a href="#implement_callback">Implement Play Controls</a></li>
<li><a href="#support_voice">Support Voice Actions</a></li>
@@ -261,7 +262,7 @@
<ul>
<li>Disable the alarm.</li>
<li>Play the alarm over
-<a href="{@docRoot}reference/android/media/AudioManager.html">STREAM_ALARM</a>,
+<a href="{@docRoot}reference/android/media/AudioManager.html#STREAM_ALARM">STREAM_ALARM</a>,
and provide a UI on the phone screen to disable the alarm.</li>
</ul>
@@ -279,6 +280,33 @@
}
</pre>
+<h2 id="mediaadv">Handle Media Advertisements</h2>
+<p>By default, Android Auto displays a notification when
+the media metadata changes during an audio playback session. When a media
+app switches from playing music to running an advertisement, it is distracting
+(and unnecessary) to display a notification to the user. To prevent Android Auto
+from displaying a notification in this case, you must set the media metadata
+key {@code android.media.metadata.ADVERTISEMENT} to 1, as shown in the code
+snippet below:
+
+<pre>
+
+@Override
+public static final String EXTRA_METADATA_ADVERTISEMENT =
+ "android.media.metadata.ADVERTISEMENT";
+
+public void onPlayFromMediaId(String mediaId, Bundle extras) {
+ MediaMetadata.Builder builder = new MediaMetadata.Builder();
+ // ...
+ if (isAd(mediaId)) {
+ builder.putLong(EXTRA_METADATA_ADVERTISEMENT, 1);
+ }
+ // ...
+ mediaSession.setMetadata(builder.build());
+}
+
+</pre>
+
<h2 id="implement_browser">Build a Browser Service</h2>
<p>Auto devices interact with your app by contacting its implementation of a
diff --git a/docs/html/training/testing/start/index.jd b/docs/html/training/testing/start/index.jd
index 707ba9d..aa0473f 100644
--- a/docs/html/training/testing/start/index.jd
+++ b/docs/html/training/testing/start/index.jd
@@ -9,51 +9,20 @@
<div id="tb">
<h2>
- Dependencies and prerequisites
- </h2>
-
- <ul>
- <li>
- <a href="{@docRoot}tools/studio/index.html">Android Studio 2.0</a>, or
- later.
- </li>
-
- <li>The Android Support Repository (available from the <a href=
- "{@docRoot}tools/help/sdk-manager.html">SDK Manager</a>)
- </li>
- </ul>
-
- <h2>
- This lesson teaches you to
+ In this document
</h2>
<ol>
- <li>
- <a href="#config-local-tests">Configure Your Project for Local Unit
- Tests</a>
- </li>
-
- <li>
- <a href="#config-instrumented-tests">Configure Your Project for
- Instrumented Tests</a>
- </li>
-
- <li>
- <a href="#build">Build and Run Your Tests</a>
+ <li><a href="#test-types">Test Types</a></li>
+ <li><a href="#test-apis">Test APIs</a>
<ol>
- <li>
- <a href="#run-local-tests">Run Local Unit Tests</a>
- </li>
-
- <li>
- <a href="#run-instrumented-tests">Run Instrumented Tests</a>
- </li>
-
- <li>
- <a href="#run-ctl">Run Instrumented Tests with Cloud Test Lab</a>
- </li>
+ <li><a href="#junit">JUnit</a></li>
+ <li><a href="#support-library">Android Testing Support Library</a></li>
+ <li><a href="#assertion">Assertion classes</a></li>
+ <li><a href="#monkeyrunner">Monkey and monkeyrunner</a></li>
</ol>
</li>
+ <li><a href="#build">Guides for Building Android Tests</a>
</ol>
<h2>
@@ -61,10 +30,6 @@
</h2>
<ul>
- <li>
- <a href="{@docRoot}tools/testing/testing_android.html">Testing
- Concepts</a>
- </li>
<li>
<a href="https://github.com/googlesamples/android-testing" class=
@@ -80,484 +45,356 @@
</div>
<p>
- Writing and running tests are important parts of the Android app development
- cycle. Well-written tests can help you catch bugs early in development and
- give you confidence in your code. Using Android Studio, you can run local
- unit tests or instrumented tests on a variety of physical or virtual Android
- devices. You can then analyze the results and make changes to your code
- without leaving the development environment.
+ Android tests are based on <a href="http://junit.org/" class=
+ "external-link">JUnit</a>, and you can run them either as local
+ unit tests on the JVM or as instrumented tests on an Android device.
+ This page provides an introduction to the concepts and
+ tools for building Android tests.
</p>
-<p>
- <em>Local unit tests</em> are tests that run on your local machine, without
- needing access to the Android framework or an Android device. To learn how to
- develop local units tests, see <a href=
- "{@docRoot}training/testing/unit-testing/local-unit-tests.html">Building
- Local Unit Tests</a>.
-</p>
-<p>
- <em>Instrumented tests</em> are tests that run on an Android device or
- emulator. These tests have access to {@link android.app.Instrumentation}
- information, such as the {@link android.content.Context} for the app under
- test. Instrumented tests can be used for unit, user interface (UI), or app
- component integration testing. To learn how to develop instrumented tests for
- your specific needs, see these additional topics:
-</p>
+<h2 id="test-types">Test Types</h2>
+
+
+<p>When using Android Studio to write any of your tests, your test code must go
+into one of two different code directories (source sets). For each module in
+your project, Android Studio includes both source sets, corresponding to the
+following test types:</p>
+
+<dl>
+<dt><b>Local unit tests</b></dt>
+<dd>Located at <code><var>module-name</var>/src/test/java/</code>.
+<p>These tests run on the local JVM
+and do not have access to functional Android framework APIs.</p>
+<p>To get started, see <a
+href="/training/testing/unit-testing/local-unit-tests.html">Building Local
+Unit Tests</a>.</p>
+</dd>
+
+<dt><b>Instrumented tests</b></dt>
+<dd>Located at <code><var>module-name</var>/src/androidTest/java/</code>.
+<p>These are all tests that must run on an Android hardware device or
+an Android emulator.</p>
+
+<p>Instrumented tests are built into an APK that runs on the device alongside
+your app under test. The system runs your test APK and your app under tests in
+the same process, so your tests can invoke methods and modify fields in the
+app, and automate user interaction with your app.</p>
+
+<p>For information about how to create instrumented tests, see the
+following topics:</p>
<ul>
<li>
<a href=
- "{@docRoot}training/testing/unit-testing/instrumented-unit-tests.html">Building
- Instrumented Unit Tests</a> - Build more complex unit tests that have
- Android dependencies which cannot be easily filled by using mock objects.
+ "{@docRoot}training/testing/unit-testing/instrumented-unit-tests.html"
+ >Building Instrumented Unit Tests</a>: Build complex unit tests with
+ Android dependencies that cannot be satisfied with mock objects.
</li>
<li>
<a href="{@docRoot}training/testing/ui-testing/index.html">Automating User
- Interface Tests</a> - Create tests to verify that the user interface
+ Interface Tests</a>: Create tests to verify that the user interface
behaves correctly for user interactions within a single app or for
interactions across multiple apps.
</li>
<li>
<a href="{@docRoot}training/testing/integration-testing/index.html">Testing
- App Component Integrations</a> - Verify the behavior of components that
+ App Component Integrations</a>: Verify the behavior of components that
users do not directly interact with, such as a <a href=
"{@docRoot}guide/components/services.html">Service</a> or a <a href=
- "guide/topics/providers/content-providers.html">Content Provider</a>.
+ "{@docRoot}guide/topics/providers/content-providers.html">Content Provider</a>.
</li>
</ul>
-<p>
- This lesson teaches you how to build and run your tests using using Android
- Studio. If you are not using Android Studio, you can learn how to
- <a href="{@docRoot}tools/testing/testing_otheride.html">run your tests from
- the command-line</a>.
-</p>
+</dd>
+</dl>
-<h3 id="config-local-tests">
- Configure Your Project for Local Unit Tests
-</h3>
+<img src="/images/testing/test-types_2x.png" alt="" width="798" />
-<p>
- In your Android Studio project, you must store the source files for local
- unit tests under a specific source directory ({@code src/test/java}). This
- improves project organization by grouping your unit tests together into a
- single source set.
-</p>
-
-<p>
- As with production code, you can create local unit tests for a <a href=
- "{@docRoot}tools/building/configuring-gradle.html#workBuildVariants">specific
- flavor or build type</a>. Keep your unit tests in a test source tree location
- that corresponds to your production source tree, such as:
-</p>
+<p>However, the <em>local unit tests</em> and <em>instrumented tests</em>
+described above are just terms that help distinguish the tests that run on your
+local JVM from the tests that run on the Android platform (on a hardware device
+or emulator). The real testing types that you should understand when building a
+complete test suite are described in the following table.</p>
<table>
-<tr>
-<th>Path to Production Class</th>
-<th>Path to Local Unit Test Class</th>
-</tr>
-<tr>
-<td>{@code src/main/java/Foo.java}</td>
-<td>{@code src/test/java/FooTest.java}</td>
-</tr>
-<tr>
-<td>{@code src/debug/java/Foo.java}</td>
-<td>{@code src/testDebug/java/FooTest.java}</td>
-</tr>
-<tr>
-<td>{@code src/myFlavor/java/Foo.java}</td>
-<td>{@code src/testMyFlavor/java/FooTest.java}</td>
-</tr>
+ <tr>
+ <th>
+ Type
+ </th>
+ <th>
+ Subtype
+ </th>
+ <th>
+ Description
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="3">
+ Unit tests
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ Local Unit Tests
+ </td>
+ <td>
+ Unit tests that run locally on the Java Virtual Machine (JVM). Use these
+tests to minimize execution time when your tests have no Android framework
+dependencies or when you can mock the Android framework dependencies.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ Instrumented unit tests
+ </td>
+ <td>
+ Unit tests that run on an Android device or emulator. These tests have
+access to <code><a href=
+"/reference/android/app/Instrumentation.html">Instrumentation</a></code>
+information, such as the <code><a href=
+"/reference/android/content/Context.html">Context</a></code> of the app you are
+testing. Use these tests when your tests have Android dependencies that mock
+objects cannot satisfy.
+ </td>
+ </tr>
+
+ <tr>
+ <td style="white-space:nowrap" rowspan="3">
+ Integration Tests
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ Components within your app only
+ </td>
+ <td>
+ This type of test verifies that the target app behaves as expected when
+a user performs a specific action or enters a specific input in its activities.
+For example, it allows you to check that the target app returns the correct UI
+output in response to user interactions in the app’s activities. UI testing
+frameworks like <a href=
+ "/tools/testing-support-library/index.html#Espresso">Espresso</a> allow
+you to programmatically simulate user actions and test complex intra-app user
+interactions.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ Cross-app Components
+ </td>
+ <td>
+ This type of test verifies the correct behavior of interactions between
+different user apps or between user apps and system apps. For example, you might
+want to test that your app behaves correctly when the user performs an action
+in the Android Settings menu. UI testing frameworks that support cross-app
+interactions, such as <a
+href="/topic/libraries/testing-support-library/index.html#UIAutomator"
+>UI Automator</a>, allow you to create tests for such scenarios.
+ </td>
+ </tr>
</table>
-<p>
- You'll need to configure the testing dependencies for your project to use the
- standard APIs provided by the JUnit 4 framework. If your test needs to
- interact with Android dependencies, include the <a href=
- "https://github.com/mockito/mockito" class="external-link">Mockito</a>
- library to simplify your local unit tests. To learn more about using mock
- objects in your local unit tests, see <a href=
- "{@docRoot}training/testing/unit-testing/local-unit-tests.html#mocking-dependencies">
- Mocking Android dependencies</a>.
-</p>
-<p>
- In your app's top-level {@code build.gradle} file, you need to specify these
- libraries as dependencies:
-</p>
+
+
+
+
+<h2 id="test-apis">Test APIs</h2>
+
+<p>The following are common APIs used for testing apps on Android.</p>
+
+
+<h3 id="junit">JUnit</h3>
+
+<p>You should write your unit or integration test class as a <a href=
+"http://junit.org/" class="external-link">JUnit 4</a> test class. The framework
+offers a convenient way to perform common setup, teardown, and assertion
+operations in your test.</p>
+
+<p>A basic JUnit 4 test class is a Java class that contains one or more test
+methods. A test method begins with the <code>@Test</code> annotation and
+contains the code to exercise and verify a single functionality (that is, a
+logical unit) in the component that you want to test.</p>
+
+<p>The following snippet shows an example JUnit 4 integration test that uses the
+<a href="/topic/libraries/testing-support-library/index.html#Espresso">Espresso
+APIs</a> to perform a click action on a UI element, then checks to see if
+an expected string is displayed.</p>
<pre>
-dependencies {
- // Required -- JUnit 4 framework
- testCompile 'junit:junit:4.12'
- // Optional -- Mockito framework
- testCompile 'org.mockito:mockito-core:1.10.19'
-}
-</pre>
+@RunWith(AndroidJUnit4.class)
+@LargeTest
+public class MainActivityInstrumentationTest {
-<h3 id="config-instrumented-tests">
- Configure Your Project for Instrumented Tests
-</h3>
+ @Rule
+ public ActivityTestRule mActivityRule = new ActivityTestRule<>(
+ MainActivity.class);
-<p>
- In your Android Studio project, you must place the source code for your
- instrumentated tests under a specific directory
- (<code>src/androidTest/java</code>).
-</p>
+ @Test
+ public void sayHello(){
+ onView(withText("Say hello!")).perform(click());
-<p>
- <a href="{@docRoot}tools/testing-support-library/index.html#setup">Download
- the Android Testing Support Library Setup</a>, which provides APIs that allow
- you to quickly build and run instrumented test code for your apps. The
- Testing Support Library includes a JUnit 4 test runner (<a href=
- "{@docRoot}tools/testing-support-library/index.html#AndroidJUnitRunner">AndroidJUnitRunner</a>
- ) and APIs for functional UI tests (<a href=
- "{@docRoot}tools/testing-support-library/index.html#Espresso">Espresso</a>
- and <a href=
- "{@docRoot}tools/testing-support-library/index.html#UIAutomator">UI
- Automator</a>).
-</p>
-
-<p>
- You'll need to configure the Android testing dependencies for your project to
- use the test runner and the rules APIs provided by the Testing Support
- Library. To simplify your test development, we also recommend that you
- include the <a href="https://github.com/hamcrest" class=
- "external-link">Hamcrest</a> library, which lets you create more flexible
- assertions using the Hamcrest matcher APIs.
-</p>
-
-<p>
- In your app's top-level {@code build.gradle} file, you need to specify these
- libraries as dependencies:
-</p>
-
-<pre>
-dependencies {
- androidTestCompile 'com.android.support:support-annotations:23.0.1'
- androidTestCompile 'com.android.support.test:runner:0.4.1'
- androidTestCompile 'com.android.support.test:rules:0.4.1'
- // Optional -- Hamcrest library
- androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
- // Optional -- UI testing with Espresso
- androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
- // Optional -- UI testing with UI Automator
- androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
-}
-</pre>
-
-
-<p>
- To use JUnit 4 test classes, make sure to specify <a href=
- "{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">{@code
- AndroidJUnitRunner}</a> as the default test instrumentation runner in your
- project by including the following setting in your app's module-level {@code build.gradle}
- file:
-</p>
-
-<pre>
-android {
- defaultConfig {
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ onView(withId(R.id.textView)).check(matches(withText("Hello, World!")));
}
}
</pre>
-<h3 id="testartifacts">Work With Test Artifacts</h3>
-<p>Android Studio has two types of test artifacts: Android Instrumentation Tests
-and Unit Tests. Previously, you could work with just one test artifact at a
-time. Now, both test artifacts are enabled.
-The advantage of enabling both test artifacts is that any changes you make to
-the underlying code affect
-them both. For example, if you rename a class that both test artifacts access,
-both will know about the class name refactoring.</p>
-
-<p>The figure shows what your project looks like with both test
-artifacts enabled. Notice the shading of both test artifacts.</p>
-
-<!-- Commenting out for now, but leaving it in case we need to add it back.
-<img src="{@docRoot}images/training/testartifactseparate.png" style="float:left;width:250px;margin-right:20px" /> -->
-<img src="{@docRoot}images/training/testartifactcombined.png" style="float:left;width:250px" />
-<!-- Commenting out for now, but leaving it in case we need to add it back.
-<p>
-By default, both test artifacts are enabled in Android Studio. To enable just
-one, deselect <strong>Enable all test artifacts</strong> in your preferences:
-</p>
-
-<ol>
-<li>Select
-<strong>Android Studio</strong> > <strong>Preferences</strong> > <strong>Build,
-Execution, Deployment</strong> > <strong>Build Tools</strong> >
-<strong>Gradle</strong> > <strong>Experimental</strong>.</li>
-<li>Deselect the test artifacts option.</li>
-<li>Click <strong>OK</strong>.</li>
-</ol>
--->
-
-<h2 id="build">Build and Run Your Tests</h2>
-
-
-<p>
- Android Studio provides all the tools you need to build, run, and analyze
- your tests within the development environment. You can also run instrumented
- tests on multiple device configurations, simultaneously, using <a href=
- "https://developers.google.com/cloud-test-lab/">Cloud Test Lab</a>
- integration.
-</p>
-
-<p class="note">
- <strong>Note:</strong> While running or debugging instrumented tests,
- Android Studio does not inject the additional methods required for <a href=
- "{@docRoot}tools/building/building-studio.html#instant-run">Instant Run</a>
- and turns the feature off.
-</p>
-
-<h3 id="run-local-tests">
- Run Local Unit Tests
-</h3>
-
-<p>
- To run your local unit tests:
-</p>
-
-<ol>
-
- <li>In the <em>Project</em> window, right click on the project and
- synchronize your project.
- </li>
-
- <!--
-<li>If you enabled one test artifact only, open the
-<strong>Build Variants</strong> window by clicking the left-hand tab, then
-change the test artifact to <em>Unit Tests</em>.
-</li>
--->
-
- <li>In the <em>Project</em> window, navigate to your unit test class or
- method, then right-click it and select <strong>Run</strong> <img src=
- "{@docRoot}images/tools/as-run.png" alt="" style=
- "vertical-align:bottom;margin:0;">.
- <ul>
- <li>To run all tests in the unit test directory, right-click on the
- directory and select <strong>Run tests</strong> <img src=
- "{@docRoot}images/tools/as-run.png" alt="" style=
- "vertical-align:bottom;margin:0;">.
- </li>
- </ul>
- </li>
-
-</ol>
-
-<p>
- The Android Plugin for Gradle compiles the local unit test code located in
- the default directory ({@code src/test/java}), builds a test app, and
- executes it locally using the default test runner class. Android Studio then
- displays the results in the <em>Run</em> window.
-</p>
-
-<h3 id="run-instrumented-tests">
- Run Instrumented Tests
-</h3>
-
-<p>
- To run your instrumented tests:
-</p>
+<p>In your JUnit 4 test class, you can call out sections in your test code for
+special processing by using the following annotations:</p>
<ul>
- <!--
-<li>If you enabled one test artifact only, open the
-<strong>Build Variants</strong> window by clicking the left-hand tab, then set
-the test artifact to <em>Android Instrumentation Tests</em>.
-</li>
--->
+<li><code>@Before</code>: Use this annotation to specify a block of code that
+contains test setup operations. The test class invokes this code block before
+each test. You can have multiple <code>@Before</code> methods but the order in
+which the test class calls these methods is not guaranteed.</li>
- <li>In the <em>Project</em> window, navigate to your instrumented test class
- or method, then right-click and run it using the Android Test configuration.
- To run all tests in the instrumented test directory, right-click the
- directory and select <strong>Run tests</strong> <img src=
- "{@docRoot}images/tools/as-run.png" alt="" style=
- "vertical-align:bottom;margin:0;">.
- </li>
+<li><code>@After</code>: This annotation specifies a block of code that
+contains test tear-down operations. The test class calls this code block after
+every test method. You can define multiple <code>@After</code> operations in
+your test code. Use this annotation to release any resources from memory.</li>
+
+<li><code>@Test</code>: Use this annotation to mark a test method. A single
+test class can contain multiple test methods, each prefixed with this
+annotation.</li>
+
+<li><code>@Rule</code>: Rules allow you to flexibly add or redefine the
+behavior of each test method in a reusable way. In Android testing, use this
+annotation together with one of the test rule classes that the Android Testing
+Support Library provides, such as <a href=
+"/reference/android/support/test/rule/ActivityTestRule.html"><code>ActivityTestRule</code></a>
+or <a href=
+"/reference/android/support/test/rule/ServiceTestRule.html"><code>ServiceTestRule</code></a>.</li>
+
+<li><code>@BeforeClass</code>: Use this annotation to specify static methods
+for each test class to invoke only once. This testing step is useful for
+expensive operations such as connecting to a database.</li>
+
+<li><code>@AfterClass</code>: Use this annotation to specify static methods for
+the test class to invoke only after all tests in the class have run. This
+testing step is useful for releasing any resources allocated in the
+<code>@BeforeClass</code> block.</li>
+
+<li><code>@Test(timeout=)</code>: Some annotations support the ability to pass
+in elements for which you can set values. For example, you can specify a
+timeout period for the test. If the test starts but does not complete within
+the given timeout period, it automatically fails. You must specify the timeout
+period in milliseconds, for example: <code>@Test(timeout=5000)</code>.</li>
</ul>
-<p>
- The <a href="{@docRoot}tools/building/plugin-for-gradle.html">Android Plugin
- for Gradle</a> compiles the instrumented test code located in the default
- directory ({@code src/androidTest/java}), builds a test APK and production
- APK, installs both APKs on the connected device or emulator, and runs the
- tests. Android Studio then displays the results of the instrumented test execution in the
- <em>Run</em> window.
+<p>For more annotations, see the documentation for <a
+href="http://junit.sourceforge.net/javadoc/org/junit/package-summary.html"
+class="external-link">JUnit annotations</a> and the <a
+href="/reference/android/support/annotation/package-summary.html">Android
+annotations</a>.</p>
+
+<p>Use the JUnit <code><a href=
+"/reference/junit/framework/Assert.html">Assert</a></code> class to verify the
+correctness of an object's state. The assert methods compare values you expect
+from a test to the actual results and throw an exception if the comparison
+fails. <a href="#AssertionClasses">Assertion classes</a> describes these
+methods in more detail.</p>
+
+
+<h3 id="support-library">Android Testing Support Library</h3>
+
+<p>The <a href="/topic/libraries/testing-support-library/index.html">Android
+Testing Support Library</a> provides a set of APIs that allow you
+to quickly build and run test code for your apps, including JUnit 4 and
+functional UI tests. The library includes the following instrumentation-based
+APIs that are useful when you want to automate your tests:</p>
+
+<dt><a href="/topic/libraries/testing-support-library/index.html#AndroidJUnitRunner"
+>AndroidJUnitRunner</a></dt>
+<dd>A JUnit 4-compatible test runner for Android.</dd>
+
+<dt><a href="/topic/libraries/testing-support-library/index.html#Espresso"
+>Espresso</a></dt>
+<dd>A UI testing framework; suitable for functional UI testing within an
+app.</dd>
+
+<dt><a href="/topic/libraries/testing-support-library/index.html#UIAutomator"
+>UI Automator</a></dt>
+<dd>A UI testing framework suitable for cross-app functional UI testing between
+both system and installed apps.</dd>
+
+
+<h3 id="assertion">Assertion classes</h3>
+
+<p>Because Android Testing Support Library APIs extend JUnit, you can use
+assertion methods to display the results of tests. An assertion method compares
+an actual value returned by a test to an expected value, and throws an
+AssertionException if the comparison test fails. Using assertions is more
+convenient than logging, and provides better test performance.</p>
+
+<p>To simplify test development, you should use the <a href=
+"https://github.com/hamcrest" class="external-link">Hamcrest library</a>, which
+lets you create more flexible tests using the Hamcrest matcher APIs.</p>
+
+
+
+<h3 id="monkeyrunner">Monkey and monkeyrunner</h3>
+
+<p>The Android SDK includes two tools for functional-level app testing:</p>
+
+<dl>
+<dt>Monkey</dt>
+<dd>This is a command-line tool that sends pseudo-random streams of keystrokes,
+touches, and gestures to a device. You run it with the <a href=
+"/studio/command-line/adb.html">Android Debug Bridge (adb)</a> tool, and use it
+to stress-test your app, report back errors any that are encountered, or repeat
+a stream of events by running the tool multiple times with the same random
+number seed.</dd>
+
+
+<dt>monkeyrunner</dt>
+<dd>This tool is an API and execution environment for test programs written in
+Python. The API includes functions for connecting to a device, installing and
+uninstalling packages, taking screenshots, comparing two images, and running a
+test package against an app. Using the API, you can write a wide range of
+large, powerful, and complex tests. You run programs that use the API with the
+<code>monkeyrunner</code> command-line tool.</dd>
+</dl>
+
+
+
+
+<h2 id="build">Guides for Building Android Tests</h2>
+
+<p>The following documents provide more detail about how to build and run
+a variety of test types:
</p>
-<h3 id="run-ctl">Run Instrumented Tests with Cloud Test Lab</h3>
-
-<p>
- Using <a href="https://developers.google.com/cloud-test-lab/">Cloud Test
- Lab</a>, you can simultaneously test your app on many popular Android
- devices, across multiple languages, screen orientations, and versions of the
- Android platform. These tests run on actual physical devices in remote Google
- data centers. You can also <a href=
- "https://developers.google.com/cloud-test-lab/test-screenshots">configure
- your instrumented tests to take screenshots</a> while Cloud Test Lab runs its
- tests. You can <a href=
- "https://developers.google.com/cloud-test-lab/command-line">deploy tests to
- Cloud Test Lab from the command line</a>, or from Android Studio's integrated
- testing tools.
-</p>
-
-<p>
- Android Studio allows you to connect to your Google Cloud Platform account,
- configure your tests, deploy them to Cloud Test Lab, and analyze the results
- all within the development environment. Cloud Test Lab in Android Studio
- supports the following Android test frameworks: <a href=
- "{@docRoot}training/testing/ui-testing/espresso-testing.html">Espresso</a>,
- <a href="{@docRoot}tools/testing-support-library/index.html#UIAutomator">UI
- Automator 2.0</a>, or <a class="external-link" href=
- "https://github.com/robotiumtech/robotium">Robotium</a>. Test results provide
- test logs and include the details of any app failures.
-</p>
-
-<p>
- Before you can start using Cloud Test Lab, you need to:
-</p>
-
-<ol>
- <li>
- <a href="https://console.developers.google.com/freetrial">Create a
- Google Cloud Platform account</a> to use with active billing.
- </li>
-
- <li>
- <a href="https://support.google.com/cloud/answer/6251787">Create a Google
- Cloud project</a> for your app.
- </li>
-
- <li>
- <a href="https://support.google.com/cloud/answer/6288653">Set up an active
- billing account</a> and associate it with the project you just created.
- </li>
-</ol>
-
-
-<h4 id="configure-matrix">
-Configure a test matrix and run a test
-</h4>
-
-<p>
- Android Studio provides integrated tools that allow you to configure how you
- want to deploy your tests to Cloud Test Lab. After you have created a Google
- Cloud project with active billing, you can create a test configuration and
- run your tests:
-</p>
-
-<ol>
- <li>Click <strong>Run</strong> > <strong>Edit Configurations</strong> from
- the main menu.
- </li>
-
- <li>Click <strong>Add New Configuration (+)</strong> and select
- <strong>Android Tests</strong>.
- </li>
-
- <li>In the Android Test configuration dialog:
- <ol type="a">
- <li>Enter or select the details of your test, such as the test name, module
- type, test type, and test class.
- </li>
-
- <li>From the <em>Target</em> drop-down menu under <em>Deployment Target
- Options</em>, select <strong>Cloud Test Lab Device Matrix</strong>.
- </li>
-
- <li>If you are not logged in, click <strong>Connect to Google Cloud
- Platform</strong> and allow Android Studio access to your account.
- </li>
-
- <li>Next to <em>Cloud Project</em>, click the <img src=
- "{@docRoot}images/tools/as-wrench.png" alt="wrench and nut" style=
- "vertical-align:bottom;margin:0;"> button and select your Google Cloud
- Platform project from the list.
- </li>
- </ol>
- </li>
-
- <li>Create and configure a test matrix:
- <ol type="a">
- <li>Next to the <em>Matrix Configuration</em> drop-down list, click <strong>
- Open Dialog</strong> <img src="{@docRoot}images/tools/as-launchavdm.png"
- alt="ellipses button" style="vertical-align:bottom;margin:0;">.
- </li>
-
- <li>Click <strong>Add New Configuration (+)</strong>.
- </li>
-
- <li>In the <strong>Name</strong> field, enter a name for your new
- configuration.
- </li>
-
- <li>Select the device(s), Android version(s), locale(s) and screen
- orientation(s) that you want to test your app with. Cloud Test Lab will test
- your app against every combination of your selections when generating test
- results.
- </li>
-
- <li>Click <strong>OK</strong> to save your configuration.
- </li>
- </ol>
- </li>
-
- <li>Click <strong>OK</strong> in the <em>Run/Debug Configurations</em> dialog
- to exit.
- </li>
-
- <li>Run your tests by clicking <strong>Run</strong> <img src=
- "{@docRoot}images/tools/as-run.png" alt="" style=
- "vertical-align:bottom;margin:0;">.
- </li>
-</ol>
-
-<img src="{@docRoot}images/training/ctl-config.png" alt="">
-<p class="img-caption">
- <strong>Figure 1.</strong> Creating a test configuration for Cloud Test
- Lab.
-</p>
-
-<h4 id="ctl-results">
- Analyzing test results
-</h4>
-
-<p>
- When Cloud Test Lab completes running your tests, the <em>Run</em> window will
- open to show the results, as shown in figure 2. You may need to click
- <strong>Show Passed</strong> <img src="{@docRoot}images/tools/as-ok.png" alt=
- "" style="vertical-align:bottom;margin:0;"> to see all your executed tests.
-</p>
-
-<img src="{@docRoot}images/training/ctl-test-results.png" alt="">
-
-<p class="img-caption">
- <strong>Figure 2.</strong> Viewing the results of instrumented tests using
- Cloud Test Lab.
-</p>
-
-<p>
- You can also analyze your tests on the web by following the link displayed at
- the beginning of the test execution log in the <em>Run</em> window, as shown
- in figure 3.
-</p>
-
-<img src="{@docRoot}images/training/ctl-exec-log.png" alt="">
-
-<p class="img-caption">
- <strong>Figure 3.</strong> Click the link to view detailed test results on
- the web.
-</p>
-
-<p>
- To learn more about interpreting web results, see <a href=
- "https://developers.google.com/cloud-test-lab/analyzing-results">Analyzing
- Cloud Test Lab Web Results</a>.
-</p>
\ No newline at end of file
+<dl>
+ <dt><a href="/training/testing/unit-testing/local-unit-tests.html"
+ >Building Local Unit Tests</a></dt>
+ <dd>Build unit tests that have no dependencies or only simple dependencies
+ that you can mock, which run on your local JVM.</dd>
+ <dt><a href=
+ "/training/testing/unit-testing/instrumented-unit-tests.html"
+ >Building Instrumented Unit Tests</a></dt>
+ <dd>Build complex unit tests with
+ Android dependencies that cannot be satisfied with mock objects,
+ which run on a hardware device or emulator.</dd>
+ <dt><a href="/training/testing/ui-testing/index.html">Automating User
+ Interface Tests</a></dt>
+ <dd>Create tests to verify that the user interface
+ behaves correctly for user interactions within a single app or for
+ interactions across multiple apps.</dd>
+ <dt><a href="/training/testing/integration-testing/index.html">Testing App
+ Compontent Integrations</a></dt>
+ <dd>Verify the behavior of components that
+ users do not directly interact with, such as a service or a content
+ provider.</dd>
+ <dt><a href="/training/testing/performance.html">Testing Display
+ Performance</a></dt>
+ <dd>Write tests that measure your app's UI performance to ensure
+ a consistently smooth user experience.</dd>
+</dl>
\ No newline at end of file
diff --git a/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd b/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd
index 38321ee..f65766d 100644
--- a/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd
+++ b/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd
@@ -7,21 +7,20 @@
<!-- This is the training bar -->
<div id="tb-wrapper">
<div id="tb">
- <h2>Dependencies and Prerequisites</h2>
-
- <ul>
- <li>Android 2.2 (API level 8) or higher</li>
- <li><a href="{@docRoot}tools/testing-support-library/index.html">
- Android Testing Support Library</a></li>
- <li><a href="{@docRoot}tools/studio/index.html">Android Studio (latest version)</a>.</li>
- </ul>
-
<h2>This lesson teaches you to</h2>
<ol>
<li><a href="#setup">Set Up Your Testing Environment</a></li>
- <li><a href="#build">Create a Instrumented Unit Test Class</a></li>
- <li><a href="#run">Run Instrumented Unit Tests</a></li>
+ <li><a href="#build">Create a Instrumented Unit Test Class</a>
+ <ol>
+ <li><a href="#test-suites">Create a test suite</a></li>
+ </ol>
+ </li>
+ <li><a href="#run">Run Instrumented Unit Tests</a>
+ <ol>
+ <li><a href="#run-ctl">Run your tests with Firebase Test Lab</a></li>
+ </ol>
+ </li>
</ol>
<h2>Try it out</h2>
@@ -36,25 +35,88 @@
</div>
</div>
-<p>
-Instrumented unit tests are unit tests that run on physical devices and emulators, instead of
-the Java Virtual Machine (JVM) on your local machine. You should create instrumented unit tests
-if your tests need access to instrumentation information (such as the target app's
-{@link android.content.Context}) or if they require the real implementation of an Android framework
-component (such as a {@link android.os.Parcelable} or {@link android.content.SharedPreferences}
-object). Using instrumented unit tests also helps to reduce the effort required to write and
-maintain mock code. You are still free to use a mocking framework, if you choose, to simulate any
-dependency relationships. Instrumented unit tests can take advantage of the Android framework APIs
-and supporting APIs, such as the Android Testing Support Library.
-</p>
+<p>Instrumented unit tests are tests that run on physical devices and
+emulators, and they can take advantage of the Android framework APIs and
+supporting APIs, such as the Android Testing Support Library. You should create
+instrumented unit tests if your tests need access to instrumentation
+information (such as the target app's {@link android.content.Context}) or if
+they require the real implementation of an Android framework component (such as
+a {@link android.os.Parcelable} or {@link android.content.SharedPreferences}
+object).</p>
+
+<p>Using instrumented unit tests also helps to reduce the effort required to
+write and maintain mock code. You are still free to use a mocking framework, if
+you choose, to simulate any dependency relationships.</p>
+
<h2 id="setup">Set Up Your Testing Environment</h2>
-<p>Before building your instrumented unit test, make sure to configure your test source code
-location and project dependencies, as described in
-<a href="{@docRoot}training/testing/start/index.html#config-instrumented-tests">
-Getting Started with Testing</a>.</p>
+
+<p>In your Android Studio project, you must store the source files for
+instrumented tests at
+<code><var>module-name</var>/src/androidTests/java/</code>. This directory
+already exists when you create a new project.</p>
+
+<p>Before you begin, you should
+ <a href="{@docRoot}tools/testing-support-library/index.html#setup">download
+ the Android Testing Support Library Setup</a>, which provides APIs that allow
+ you to quickly build and run instrumented test code for your apps. The
+ Testing Support Library includes a JUnit 4 test runner (<a href=
+ "{@docRoot}tools/testing-support-library/index.html#AndroidJUnitRunner">AndroidJUnitRunner</a>
+ ) and APIs for functional UI tests (<a href=
+ "{@docRoot}tools/testing-support-library/index.html#Espresso">Espresso</a>
+ and <a href=
+ "{@docRoot}tools/testing-support-library/index.html#UIAutomator">UI
+ Automator</a>).
+</p>
+
+<p>You also need to configure the Android testing dependencies for your project
+to use the test runner and the rules APIs provided by the Testing Support
+Library. To simplify your test development, you should also include the
+<a href="https://github.com/hamcrest" class="external-link">Hamcrest</a>
+library, which lets you create more flexible assertions using the Hamcrest
+matcher APIs.</p>
+
+<p>
+ In your app's top-level {@code build.gradle} file, you need to specify these
+ libraries as dependencies:
+</p>
+
+<pre>
+dependencies {
+ androidTestCompile 'com.android.support:support-annotations:24.0.0'
+ androidTestCompile 'com.android.support.test:runner:0.5'
+ androidTestCompile 'com.android.support.test:rules:0.5'
+ // Optional -- Hamcrest library
+ androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
+ // Optional -- UI testing with Espresso
+ androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
+ // Optional -- UI testing with UI Automator
+ androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
+}
+</pre>
+
+
+<p>
+ To use JUnit 4 test classes, make sure to specify <a href=
+ "{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">{@code
+ AndroidJUnitRunner}</a> as the default test instrumentation runner in your
+ project by including the following setting in your app's module-level {@code build.gradle}
+ file:
+</p>
+
+<pre>
+android {
+ defaultConfig {
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+}
+</pre>
+
+
+
<h2 id="build">Create an Instrumented Unit Test Class</h2>
+
<p>
Your instrumented unit test class should be written as a JUnit 4 test class. To learn more about
creating JUnit 4 test classes and using JUnit 4 assertions and annotations, see
@@ -119,7 +181,7 @@
}
</pre>
-<h3 id="test-suites">Creating a test suite</h3>
+<h3 id="test-suites">Create a test suite</h3>
<p>
To organize the execution of your instrumented unit tests, you can group a collection of test
classes in a <em>test suite</em> class and run these tests together. Test suites can be nested;
@@ -162,9 +224,198 @@
public class UnitTestSuite {}
</pre>
+
<h2 id="run">Run Instrumented Unit Tests</h2>
+
+<p>To run your instrumented tests, follow these steps:</p>
+
+<ol>
+ <li>Be sure your project is synchronized with Gradle by clicking
+ <b>Sync Project</b> <img src="/images/tools/sync-project.png" alt=""
+ class="inline-icon"> in the toolbar.</li>
+
+ <li>Run your test in one of the following ways:
+ <ul>
+ <li>To run a single test, open the <b>Project</b> window, and then
+ right-click a test and click <strong>Run</strong> <img src=
+ "{@docRoot}images/tools/as-run.png" alt="" class="inline-icon">.</li>
+ <li>To test all methods in a class, right-click a class or method in the
+test file and click <b>Run</b> <img src=
+ "{@docRoot}images/tools/as-run.png" alt="" class="inline-icon">.
+ <li>To run all tests in a directory, right-click on the
+ directory and select <strong>Run tests</strong> <img src=
+ "{@docRoot}images/tools/as-run.png" alt="" class="inline-icon">.
+ </li>
+ </ul>
+ </li>
+
+</ol>
+
<p>
-To run your test, follow the steps for running instrumented tests
-described in <a href="{@docRoot}training/testing/start/index.html#run-instrumented-tests">
-Getting Started with Testing</a>.
+ The <a href="{@docRoot}tools/building/plugin-for-gradle.html">Android Plugin
+ for Gradle</a> compiles the instrumented test code located in the default
+ directory ({@code src/androidTest/java/}), builds a test APK and production
+ APK, installs both APKs on the connected device or emulator, and runs the
+ tests. Android Studio then displays the results of the instrumented test execution in the
+ <em>Run</em> window.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> While running or debugging instrumented tests,
+ Android Studio does not inject the additional methods required for <a href=
+ "{@docRoot}tools/building/building-studio.html#instant-run">Instant Run</a>
+ and turns the feature off.
+</p>
+
+
+<h3 id="run-ctl">Run your tests with Firebase Test Lab</h3>
+
+<p>Using <a href="https://firebase.google.com/docs/test-lab/">Firebase Test
+Lab</a>, you can simultaneously test your app on many popular Android devices
+and configurations such as locale, orientation, screen size, and platform
+version. These tests run on actual physical devices in remote Google data
+centers. You can deploy to Firebase Test Lab directly from Android Studio or
+from the command line. Test results provide test logs and include the details
+of any app failures.</p>
+
+<p>
+ Before you can start using Firebase Test Lab, you need to:
+</p>
+
+<ol>
+ <li>
+ <a href="https://console.developers.google.com/freetrial">Create a
+ Google Cloud Platform account</a> to use with active billing.
+ </li>
+
+ <li>
+ <a href="https://support.google.com/cloud/answer/6251787">Create a Google
+ Cloud project</a> for your app.
+ </li>
+
+ <li>
+ <a href="https://support.google.com/cloud/answer/6288653">Set up an active
+ billing account</a> and associate it with the project you just created.
+ </li>
+</ol>
+
+
+<h4 id="configure-matrix">
+Configure a test matrix and run a test
+</h4>
+
+<p>
+ Android Studio provides integrated tools that allow you to configure how you
+ want to deploy your tests to Firebase Test Lab. After you have created a Google
+ Cloud project with active billing, you can create a test configuration and
+ run your tests:
+</p>
+
+<ol>
+ <li>Click <strong>Run</strong> > <strong>Edit Configurations</strong> from
+ the main menu.
+ </li>
+
+ <li>Click <strong>Add New Configuration (+)</strong> and select
+ <strong>Android Tests</strong>.
+ </li>
+
+ <li>In the Android Test configuration dialog:
+ <ol type="a">
+ <li>Enter or select the details of your test, such as the test name, module
+ type, test type, and test class.
+ </li>
+
+ <li>From the <em>Target</em> drop-down menu under <em>Deployment Target
+ Options</em>, select <strong>Cloud Test Lab Device Matrix</strong>.
+ </li>
+
+ <li>If you are not logged in, click <strong>Connect to Google Cloud
+ Platform</strong> and allow Android Studio access to your account.
+ </li>
+
+ <li>Next to <em>Cloud Project</em>, click the <img src=
+ "{@docRoot}images/tools/as-wrench.png" alt="wrench and nut" style=
+ "vertical-align:bottom;margin:0;"> button and select your Google Cloud
+ Platform project from the list.
+ </li>
+ </ol>
+ </li>
+
+ <li>Create and configure a test matrix:
+ <ol type="a">
+ <li>Next to the <em>Matrix Configuration</em> drop-down list, click <strong>
+ Open Dialog</strong> <img src="{@docRoot}images/tools/as-launchavdm.png"
+ alt="ellipses button" style="vertical-align:bottom;margin:0;">.
+ </li>
+
+ <li>Click <strong>Add New Configuration (+)</strong>.
+ </li>
+
+ <li>In the <strong>Name</strong> field, enter a name for your new
+ configuration.
+ </li>
+
+ <li>Select the device(s), Android version(s), locale(s) and screen
+ orientation(s) that you want to test your app with. Firebase Test Lab will
+ test your app against every combination of your selections when generating
+ test results.
+ </li>
+
+ <li>Click <strong>OK</strong> to save your configuration.
+ </li>
+ </ol>
+ </li>
+
+ <li>Click <strong>OK</strong> in the <em>Run/Debug Configurations</em> dialog
+ to exit.
+ </li>
+
+ <li>Run your tests by clicking <strong>Run</strong> <img src=
+ "{@docRoot}images/tools/as-run.png" alt="" style=
+ "vertical-align:bottom;margin:0;">.
+ </li>
+</ol>
+
+<img src="{@docRoot}images/training/ctl-config.png" alt="">
+<p class="img-caption">
+ <strong>Figure 1.</strong> Creating a test configuration for Firebase Test
+ Lab.
+</p>
+
+<h4 id="ctl-results">
+ Analyzing test results
+</h4>
+
+<p>
+ When Firebase Test Lab completes running your tests, the <em>Run</em> window
+ will open to show the results, as shown in figure 2. You may need to click
+ <strong>Show Passed</strong> <img src="{@docRoot}images/tools/as-ok.png" alt=
+ "" style="vertical-align:bottom;margin:0;"> to see all your executed tests.
+</p>
+
+<img src="{@docRoot}images/training/ctl-test-results.png" alt="">
+
+<p class="img-caption">
+ <strong>Figure 2.</strong> Viewing the results of instrumented tests using
+ Firebase Test Lab.
+</p>
+
+<p>
+ You can also analyze your tests on the web by following the link displayed at
+ the beginning of the test execution log in the <em>Run</em> window, as shown
+ in figure 3.
+</p>
+
+<img src="{@docRoot}images/training/ctl-exec-log.png" alt="">
+
+<p class="img-caption">
+ <strong>Figure 3.</strong> Click the link to view detailed test results on
+ the web.
+</p>
+
+<p>
+ To learn more about interpreting web results, see <a href=
+ "https://firebase.google.com/docs/test-lab/analyzing-results">Analyze
+ Firebase Test Lab for Android Results</a>.
</p>
\ No newline at end of file
diff --git a/docs/html/training/testing/unit-testing/local-unit-tests.jd b/docs/html/training/testing/unit-testing/local-unit-tests.jd
index 893d957..25b62fa 100644
--- a/docs/html/training/testing/unit-testing/local-unit-tests.jd
+++ b/docs/html/training/testing/unit-testing/local-unit-tests.jd
@@ -7,17 +7,16 @@
<!-- This is the training bar -->
<div id="tb-wrapper">
<div id="tb">
- <h2>Dependencies and Prerequisites</h2>
-
- <ul>
- <li><a href="{@docRoot}tools/studio/index.html">Android Studio (latest version)</a>.</li>
- </ul>
<h2>This lesson teaches you to</h2>
<ol>
<li><a href="#setup">Set Up Your Testing Environment</a></li>
- <li><a href="#build">Create a Local Unit Test Class</a></li>
+ <li><a href="#build">Create a Local Unit Test Class</a>
+ <ol>
+ <li><a href="#mocking-dependencies">Mock Android dependencies</a></li>
+ </ol>
+ </li>
<li><a href="#run">Run Local Unit Tests</a></li>
</ol>
@@ -42,13 +41,35 @@
dependency relationships.</p>
<h2 id="setup">Set Up Your Testing Environment</h2>
-<p>Before building your local unit test, make sure to configure your test source code location and
-project dependencies, as described in
-<a href="{@docRoot}training/testing/start/index.html#config-local-tests">
-Getting Started with Testing</a>.</p>
+
+<p>In your Android Studio project, you must store the source files for local
+unit tests at <code><var>module-name</var>/src/test/java/</code>. This directory
+already exists when you create a new project.</p>
+
+<p>You also need to configure the testing dependencies for your project to use
+the standard APIs provided by the JUnit 4 framework. If your test needs to
+interact with Android dependencies, include the <a href=
+"https://github.com/mockito/mockito" class="external-link">Mockito</a> library
+to simplify your local unit tests. To learn more about using mock objects in
+your local unit tests, see <a href=
+"{@docRoot}training/testing/unit-testing/local-unit-tests.html#mocking-dependencies">
+Mocking Android dependencies</a>.</p>
+
+<p>In your app's top-level {@code build.gradle} file, you need to specify these
+libraries as dependencies:</p>
+
+<pre>
+dependencies {
+ // Required -- JUnit 4 framework
+ testCompile 'junit:junit:4.12'
+ // Optional -- Mockito framework
+ testCompile 'org.mockito:mockito-core:1.10.19'
+}
+</pre>
<h2 id="build">Create a Local Unit Test Class</h2>
+
<p>Your local unit test class should be written as a JUnit 4 test class.
<a href="http://junit.org/" class="external-link">JUnit</a> is the most popular
and widely-used unit testing framework for Java. The latest version of this framework, JUnit 4,
@@ -90,7 +111,7 @@
Hamcrest matchers</a> (such as the {@code is()} and {@code equalTo()} methods) to match the
returned result against the expected result.</p>
-<h3 id="mocking-dependencies">Mocking Android dependencies</h3>
+<h3 id="mocking-dependencies">Mock Android dependencies</h3>
<p>
By default, the <a href="{@docRoot}tools/building/plugin-for-gradle.html">
Android Plug-in for Gradle</a> executes your local unit tests against a modified
@@ -174,10 +195,37 @@
class="external-link">sample code</a>.
</p>
-<h2 id="run">Run Local Unit Tests</h2>
-<p>
-To run your tests, follow the steps for running local unit tests
-described in <a href="{@docRoot}training/testing/start/index.html#run-local-tests">
-Getting Started with Testing</a>.
-</p>
+<h2 id="run">Run Local Unit Tests</h2>
+
+<p>To run your local unit tests, follow these steps:</p>
+
+<ol>
+
+ <li>Be sure your project is synchronized with Gradle by clicking
+ <b>Sync Project</b> <img src="/images/tools/sync-project.png" alt=""
+ class="inline-icon"> in the toolbar.</li>
+
+ <li>Run your test in one of the following ways:
+ <ul>
+ <li>To run a single test, open the <b>Project</b> window, and then
+ right-click a test and click <strong>Run</strong> <img src=
+ "{@docRoot}images/tools/as-run.png" alt="" class="inline-icon">.</li>
+ <li>To test all methods in a class, right-click a class or method in the
+test file and click <b>Run</b> <img src=
+ "{@docRoot}images/tools/as-run.png" alt="" class="inline-icon">.
+ <li>To run all tests in a directory, right-click on the
+ directory and select <strong>Run tests</strong> <img src=
+ "{@docRoot}images/tools/as-run.png" alt="" class="inline-icon">.
+ </li>
+ </ul>
+ </li>
+
+</ol>
+
+<p>
+ The Android Plugin for Gradle compiles the local unit test code located in
+ the default directory ({@code src/test/java/}), builds a test app, and
+ executes it locally using the default test runner class. Android Studio then
+ displays the results in the <b>Run</b> window.
+</p>
diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java
index c6977746..d5143da 100644
--- a/graphics/java/android/graphics/drawable/DrawableContainer.java
+++ b/graphics/java/android/graphics/drawable/DrawableContainer.java
@@ -75,6 +75,9 @@
private long mEnterAnimationEnd;
private long mExitAnimationEnd;
+ /** Callback that blocks invalidation. Used for drawable initialization. */
+ private BlockInvalidateCallback mBlockInvalidateCallback;
+
// overrides from Drawable
@Override
@@ -500,11 +503,14 @@
* @param d The drawable to initialize.
*/
private void initializeDrawableForDisplay(Drawable d) {
+ if (mBlockInvalidateCallback == null) {
+ mBlockInvalidateCallback = new BlockInvalidateCallback();
+ }
+
// Temporary fix for suspending callbacks during initialization. We
// don't want any of these setters causing an invalidate() since that
// may call back into DrawableContainer.
- final Callback cb = d.getCallback();
- d.setCallback(null);
+ d.setCallback(mBlockInvalidateCallback.wrap(d.getCallback()));
try {
if (mDrawableContainerState.mEnterFadeDuration <= 0 && mHasAlpha) {
@@ -537,7 +543,7 @@
hotspotBounds.right, hotspotBounds.bottom);
}
} finally {
- d.setCallback(cb);
+ d.setCallback(mBlockInvalidateCallback.unwrap());
}
}
@@ -1215,4 +1221,41 @@
mLastIndex = -1;
mLastDrawable = null;
}
+
+ /**
+ * Callback that blocks drawable invalidation.
+ */
+ private static class BlockInvalidateCallback implements Drawable.Callback {
+ private Drawable.Callback mCallback;
+
+ public BlockInvalidateCallback wrap(Drawable.Callback callback) {
+ mCallback = callback;
+ return this;
+ }
+
+ public Drawable.Callback unwrap() {
+ final Drawable.Callback callback = mCallback;
+ mCallback = null;
+ return callback;
+ }
+
+ @Override
+ public void invalidateDrawable(@NonNull Drawable who) {
+ // Ignore invalidation.
+ }
+
+ @Override
+ public void scheduleDrawable(@NonNull Drawable who, @NonNull Runnable what, long when) {
+ if (mCallback != null) {
+ mCallback.scheduleDrawable(who, what, when);
+ }
+ }
+
+ @Override
+ public void unscheduleDrawable(@NonNull Drawable who, @NonNull Runnable what) {
+ if (mCallback != null) {
+ mCallback.unscheduleDrawable(who, what);
+ }
+ }
+ }
}
diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java
index 8efd599..39184f1 100644
--- a/media/java/android/media/AudioRecord.java
+++ b/media/java/android/media/AudioRecord.java
@@ -467,11 +467,11 @@
* <p>
* If the audio source is not set with {@link #setAudioSource(int)},
* {@link MediaRecorder.AudioSource#DEFAULT} is used.
- * <br>If the audio format is not specified or is incomplete, its sample rate will be the
- * default output sample rate of the device (see
- * {@link AudioManager#PROPERTY_OUTPUT_SAMPLE_RATE}), its channel configuration will be
+ * <br>If the audio format is not specified or is incomplete, its channel configuration will be
* {@link AudioFormat#CHANNEL_IN_MONO}, and the encoding will be
* {@link AudioFormat#ENCODING_PCM_16BIT}.
+ * The sample rate will depend on the device actually selected for capture and can be queried
+ * with {@link #getSampleRate()} method.
* <br>If the buffer size is not specified with {@link #setBufferSizeInBytes(int)},
* the minimum buffer size for the source is used.
*/
diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java
index 9a81668..12d5ead 100644
--- a/media/java/android/media/AudioTrack.java
+++ b/media/java/android/media/AudioTrack.java
@@ -619,11 +619,11 @@
* <p>
* If the audio attributes are not set with {@link #setAudioAttributes(AudioAttributes)},
* attributes comprising {@link AudioAttributes#USAGE_MEDIA} will be used.
- * <br>If the audio format is not specified or is incomplete, its sample rate will be the
- * default output sample rate of the device (see
- * {@link AudioManager#PROPERTY_OUTPUT_SAMPLE_RATE}), its channel configuration will be
+ * <br>If the audio format is not specified or is incomplete, its channel configuration will be
* {@link AudioFormat#CHANNEL_OUT_STEREO} and the encoding will be
* {@link AudioFormat#ENCODING_PCM_16BIT}.
+ * The sample rate will depend on the device actually selected for playback and can be queried
+ * with {@link #getSampleRate()} method.
* <br>If the buffer size is not specified with {@link #setBufferSizeInBytes(int)},
* and the mode is {@link AudioTrack#MODE_STREAM}, the minimum buffer size is used.
* <br>If the transfer mode is not specified with {@link #setTransferMode(int)},
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index 4d40e6b..8d4a151 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -476,10 +476,10 @@
* <td>This method can be called in any state and calling it does not change
* the object state. </p></td></tr>
* <tr><td>setPlaybackParams</p></td>
- * <td>any </p></td>
- * <td>{} </p></td>
- * <td>This method can be called in any state and calling it does not change
- * the object state. </p></td></tr>
+ * <td>{Initialized, Prepared, Started, Paused, PlaybackCompleted, Error}</p></td>
+ * <td>{Idle, Stopped} </p></td>
+ * <td>This method will change state in some cases, depending on when it's called.
+ * </p></td></tr>
* <tr><td>setScreenOnWhilePlaying</></td>
* <td>any </p></td>
* <td>{} </p></td>
@@ -1449,12 +1449,18 @@
}
/**
- * Sets playback rate using {@link PlaybackParams}.
+ * Sets playback rate using {@link PlaybackParams}. The object sets its internal
+ * PlaybackParams to the input, except that the object remembers previous speed
+ * when input speed is zero. This allows the object to resume at previous speed
+ * when start() is called. Calling it before the object is prepared does not change
+ * the object state. After the object is prepared, calling it with zero speed is
+ * equivalent to calling pause(). After the object is prepared, calling it with
+ * non-zero speed is equivalent to calling start().
*
* @param params the playback params.
*
* @throws IllegalStateException if the internal player engine has not been
- * initialized.
+ * initialized or has been released.
* @throws IllegalArgumentException if params is not supported.
*/
public native void setPlaybackParams(@NonNull PlaybackParams params);
diff --git a/packages/CtsShim/CtsShim.apk b/packages/CtsShim/CtsShim.apk
index 7a27a43..2728903 100644
--- a/packages/CtsShim/CtsShim.apk
+++ b/packages/CtsShim/CtsShim.apk
Binary files differ
diff --git a/packages/CtsShim/CtsShimPriv.apk b/packages/CtsShim/CtsShimPriv.apk
index 63e8688..9a8e75c 100644
--- a/packages/CtsShim/CtsShimPriv.apk
+++ b/packages/CtsShim/CtsShimPriv.apk
Binary files differ
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
index 9d4b50c..1922773 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
@@ -215,9 +215,12 @@
includeState(state);
// Advanced roots are shown by default without menu option if forced by config or intent.
- state.showAdvanced = Shared.shouldShowDeviceRoot(this, intent);
+ boolean forceAdvanced = Shared.shouldShowDeviceRoot(this, intent);
+ boolean chosenAdvanced = LocalPreferences.getShowDeviceRoot(this, state.action);
+ state.showAdvanced = forceAdvanced || chosenAdvanced;
+
// Menu option is shown for whitelisted intents if advanced roots are not shown by default.
- state.showAdvancedOption = !state.showAdvanced && (
+ state.showAdvancedOption = !forceAdvanced && (
Shared.shouldShowFancyFeatures(this)
|| state.action == ACTION_OPEN
|| state.action == ACTION_CREATE
@@ -483,6 +486,7 @@
Metrics.logUserAction(this,
display ? Metrics.USER_ACTION_SHOW_ADVANCED : Metrics.USER_ACTION_HIDE_ADVANCED);
+ LocalPreferences.setShowDeviceRoot(this, mState.action, display);
mState.showAdvanced = display;
RootsFragment.get(getFragmentManager()).onDisplayStateChanged();
invalidateOptionsMenu();
diff --git a/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java b/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java
index 2315664..d2e9885 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java
@@ -18,9 +18,6 @@
import static com.android.documentsui.State.MODE_UNKNOWN;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.content.Context;
@@ -28,11 +25,16 @@
import android.os.UserHandle;
import android.preference.PreferenceManager;
+import com.android.documentsui.State.ActionType;
import com.android.documentsui.State.ViewMode;
import com.android.documentsui.model.RootInfo;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
public class LocalPreferences {
private static final String KEY_FILE_SIZE = "fileSize";
+ private static final String INCLUDE_DEVICE_ROOT = "includeDeviceRoot-";
private static final String ROOT_VIEW_MODE_PREFIX = "rootViewMode-";
public static boolean getDisplayFileSize(Context context) {
@@ -48,9 +50,17 @@
getPrefs(context).edit().putBoolean(KEY_FILE_SIZE, display).apply();
}
+ public static boolean getShowDeviceRoot(Context context, @ActionType int action) {
+ return getPrefs(context).getBoolean(INCLUDE_DEVICE_ROOT + action, false);
+ }
+
+ public static void setShowDeviceRoot(
+ Context context, @ActionType int action, boolean display) {
+ getPrefs(context).edit().putBoolean(INCLUDE_DEVICE_ROOT + action, display).apply();
+ }
+
public static void setViewMode(Context context, RootInfo root, @ViewMode int viewMode) {
assert(viewMode != MODE_UNKNOWN);
-
getPrefs(context).edit().putInt(createKey(root), viewMode).apply();
}
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 2f5d97c..68ce2cb 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -72,7 +72,7 @@
<string name="screenshot_saving_ticker" msgid="7403652894056693515">"Ukládání snímku obrazovky..."</string>
<string name="screenshot_saving_title" msgid="8242282144535555697">"Ukládání snímku obrazovky..."</string>
<string name="screenshot_saving_text" msgid="2419718443411738818">"Probíhá ukládání snímku obrazovky."</string>
- <string name="screenshot_saved_title" msgid="6461865960961414961">"Snímek obrazovky Snímek obrazovky pořízen."</string>
+ <string name="screenshot_saved_title" msgid="6461865960961414961">"Snímek obrazovky pořízen"</string>
<string name="screenshot_saved_text" msgid="2685605830386712477">"Klepnutím zobrazíte snímek obrazovky."</string>
<string name="screenshot_failed_title" msgid="705781116746922771">"Snímek obrazovky se nepodařilo zachytit."</string>
<string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"Při ukládání snímku obrazovky došlo k problému."</string>
diff --git a/packages/SystemUI/res/values/strings_tv.xml b/packages/SystemUI/res/values/strings_tv.xml
index b1d23d8..f49d201 100644
--- a/packages/SystemUI/res/values/strings_tv.xml
+++ b/packages/SystemUI/res/values/strings_tv.xml
@@ -44,4 +44,8 @@
<string name="font_roboto_regular" translatable="false">sans-serif</string>
<!-- DO NOT TRANSLATE -->
<string name="font_roboto_light" translatable="false">sans-serif-light</string>
+ <!-- Package names to be blacklisted in Recents, add package names into overlay as needed -->
+ <string-array name="recents_tv_blacklist_array">
+ </string-array>
+
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index cad7f64..6759e6b 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -923,6 +923,11 @@
// In this case, send out ACTION_USER_PRESENT here instead of in
// handleKeyguardDone()
sendUserPresentBroadcast();
+ } else if (mSystemReady && shouldWaitForProvisioning()) {
+ // Skipping the lockscreen because we're not yet provisioned, but we still need to
+ // notify the StrongAuthTracker that it's now safe to run trust agents, in case the
+ // user sets a credential later.
+ getLockPatternUtils().userPresent(KeyguardUpdateMonitor.getCurrentUser());
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
index 8a0079d..0de1e30 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
@@ -233,6 +233,7 @@
setVisibility(View.GONE);
}
mNotifQsContainer.setCustomizerAnimating(false);
+ mRecyclerView.setAdapter(mTileAdapter);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
index f060502..8e4ed91 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
@@ -112,6 +112,9 @@
}
public void setTileSpecs(List<String> currentSpecs) {
+ if (currentSpecs.equals(mCurrentSpecs)) {
+ return;
+ }
mCurrentSpecs = currentSpecs;
recalcSpecs();
}
@@ -257,7 +260,7 @@
}
holder.mTileView.onStateChanged(info.state);
holder.mTileView.setAppLabel(info.appLabel);
- holder.mTileView.setShowAppLabel(mTileDividerIndex > -1 && position > mTileDividerIndex);
+ holder.mTileView.setShowAppLabel(position > mEditIndex && !info.isSystem);
if (mAccessibilityManager.isTouchExplorationEnabled()) {
final boolean selectable = !mAccessibilityMoving || position < mEditIndex;
@@ -292,13 +295,11 @@
mTiles.remove(mEditIndex--);
notifyItemRemoved(mEditIndex - 1);
move(mAccessibilityFromIndex, position, v);
- updateDividerLocations();
notifyDataSetChanged();
- saveSpecs(mHost);
}
private void showAccessibilityDialog(final int position, final View v) {
- TileInfo info = mTiles.get(position);
+ final TileInfo info = mTiles.get(position);
CharSequence[] options = new CharSequence[] {
mContext.getString(R.string.accessibility_qs_edit_move_tile, info.state.label),
mContext.getString(R.string.accessibility_qs_edit_remove_tile, info.state.label),
@@ -310,7 +311,9 @@
if (which == 0) {
startAccessibleDrag(position);
} else {
- move(position, mEditIndex, v);
+ move(position, info.isSystem ? mEditIndex : mTileDividerIndex, v);
+ notifyItemChanged(mTileDividerIndex);
+ notifyDataSetChanged();
}
}
}).setNegativeButton(android.R.string.cancel, null)
@@ -334,40 +337,12 @@
}
private boolean move(int from, int to, View v) {
- if (to >= mEditIndex) {
- if (from < mEditIndex) {
- // Removing a tile.
- // Sort tiles into system/non-system groups.
- TileInfo tile = mTiles.get(from);
- if (tile.isSystem) {
- if (to > mTileDividerIndex) {
- to = mTileDividerIndex;
- }
- } else {
- if (mTileDividerIndex == mTiles.size() - 1) {
- notifyItemChanged(mTileDividerIndex);
- }
- if (to <= mTileDividerIndex) {
- to = mTileDividerIndex;
- }
- }
- } else {
- if (to > mEditIndex) {
- // Don't allow tiles to be dragged around when they aren't added.
- to = from;
- }
- // Allow the case where to == mEditIndex to fall through and swap which
- // side the tile is currently on.
- // This lets the the cases where all tiles are on one side of the line
- // work.
- }
+ if (to == from) {
+ return true;
}
CharSequence fromLabel = mTiles.get(from).state.label;
move(from, to, mTiles);
updateDividerLocations();
- if (to == from) {
- return true;
- }
CharSequence announcement;
if (to >= mEditIndex) {
MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_QS_EDIT_REMOVE_SPEC,
@@ -427,7 +402,6 @@
private <T> void move(int from, int to, List<T> list) {
list.add(to, list.remove(from));
notifyItemMoved(from, to);
- notifyItemChanged(to);
}
public class Holder extends ViewHolder {
@@ -499,7 +473,7 @@
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
final ViewHolder holder = parent.getChildViewHolder(child);
- if (holder.getAdapterPosition() < mEditIndex) {
+ if (holder.getAdapterPosition() < mEditIndex && !(child instanceof TextView)) {
continue;
}
@@ -530,7 +504,15 @@
@Override
public void onSelectedChanged(ViewHolder viewHolder, int actionState) {
super.onSelectedChanged(viewHolder, actionState);
+ if (actionState != ItemTouchHelper.ACTION_STATE_DRAG) {
+ viewHolder = null;
+ }
+ if (viewHolder == mCurrentDrag) return;
if (mCurrentDrag != null) {
+ int position = mCurrentDrag.getAdapterPosition();
+ TileInfo info = mTiles.get(position);
+ mCurrentDrag.mTileView.setShowAppLabel(
+ position > mEditIndex && !info.isSystem);
mCurrentDrag.stopDrag();
mCurrentDrag = null;
}
@@ -547,6 +529,12 @@
}
@Override
+ public boolean canDropOver(RecyclerView recyclerView, ViewHolder current,
+ ViewHolder target) {
+ return target.getAdapterPosition() <= mEditIndex + 1;
+ }
+
+ @Override
public int getMovementFlags(RecyclerView recyclerView, ViewHolder viewHolder) {
if (viewHolder.getItemViewType() == TYPE_EDIT) {
return makeMovementFlags(0, 0);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java
index 777ed6a..1431b22 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java
@@ -155,7 +155,7 @@
addTile(spec, appLabel, state, false);
continue;
}
- if (info.serviceInfo.icon == 0) {
+ if (info.serviceInfo.icon == 0 && info.serviceInfo.applicationInfo.icon == 0) {
continue;
}
Drawable icon = info.serviceInfo.loadIcon(pm);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
index 46e7277..d3f5d26 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
@@ -84,11 +84,13 @@
PackageManager pm = mContext.getPackageManager();
ServiceInfo info = pm.getServiceInfo(mComponent,
PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE);
+ int icon = info.icon != 0 ? info.icon
+ : info.applicationInfo.icon;
// Update the icon if its not set or is the default icon.
boolean updateIcon = mTile.getIcon() == null
|| iconEquals(mTile.getIcon(), mDefaultIcon);
- mDefaultIcon = info.icon != 0 ? android.graphics.drawable.Icon
- .createWithResource(mComponent.getPackageName(), info.icon) : null;
+ mDefaultIcon = icon != 0 ? android.graphics.drawable.Icon
+ .createWithResource(mComponent.getPackageName(), icon) : null;
if (updateIcon) {
mTile.setIcon(mDefaultIcon);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
index dd46779..d68502e 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
@@ -88,7 +88,6 @@
mHandler = handler;
mIntent = intent;
mIntent.putExtra(TileService.EXTRA_SERVICE, service.asBinder());
- mIntent.putExtra(TileService.EXTRA_TILE, tile);
mUser = user;
if (DEBUG) Log.d(TAG, "Creating " + mIntent + " " + mUser);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java
index f84c5d0..6f0bed2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java
@@ -263,6 +263,16 @@
}
@Override
+ public Tile getTile(ComponentName componentName) {
+ verifyCaller(componentName.getPackageName());
+ CustomTile customTile = getTileForComponent(componentName);
+ if (customTile != null) {
+ return customTile.getQsTile();
+ }
+ return null;
+ }
+
+ @Override
public void startUnlockAndRun(Tile tile) {
ComponentName componentName = tile.getComponentName();
verifyCaller(componentName.getPackageName());
diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
index 1a944ce..94231c6 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
@@ -29,6 +29,7 @@
import android.app.AppGlobals;
import android.app.IActivityManager;
import android.app.ITaskStackListener;
+import android.app.UiModeManager;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
@@ -38,6 +39,7 @@
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -83,6 +85,7 @@
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
@@ -234,6 +237,13 @@
mDummyIcon = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
mDummyIcon.eraseColor(0xFF999999);
}
+
+ UiModeManager uiModeManager = (UiModeManager) context.
+ getSystemService(Context.UI_MODE_SERVICE);
+ if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) {
+ Collections.addAll(sRecentsBlacklist,
+ res.getStringArray(R.array.recents_tv_blacklist_array));
+ }
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 7bc4100..eb69f55 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -2491,7 +2491,7 @@
}
protected boolean shouldPeek(Entry entry, StatusBarNotification sbn) {
- if (isDeviceInVrMode()) {
+ if (!mUseHeadsUp || isDeviceInVrMode()) {
return false;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index e1d4c8a..f09eae8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -185,6 +185,7 @@
}
};
private OnClickListener mOnClickListener;
+ private boolean mHeadsupDisappearRunning;
private View mChildAfterViewWhenDismissed;
private View mGroupParentWhenDismissed;
private boolean mRefocusOnDismiss;
@@ -759,15 +760,17 @@
mRemoved = true;
mPrivateLayout.setRemoved();
- if (mChildrenContainer != null) {
- mChildrenContainer.setRemoved();
- }
}
public NotificationChildrenContainer getChildrenContainer() {
return mChildrenContainer;
}
+ public void setHeadsupDisappearRunning(boolean running) {
+ mHeadsupDisappearRunning = running;
+ mPrivateLayout.setHeadsupDisappearRunning(running);
+ }
+
public View getChildAfterViewWhenDismissed() {
return mChildAfterViewWhenDismissed;
}
@@ -1173,8 +1176,8 @@
return getMinHeight();
} else if (mIsSummaryWithChildren && !mOnKeyguard) {
return mChildrenContainer.getIntrinsicHeight();
- } else if (mIsHeadsUp) {
- if (isPinned()) {
+ } else if (mIsHeadsUp || mHeadsupDisappearRunning) {
+ if (isPinned() || mHeadsupDisappearRunning) {
return getPinnedHeadsUpHeight(true /* atLeastMinHeight */);
} else if (isExpanded()) {
return Math.max(getMaxExpandHeight(), mHeadsUpHeight);
@@ -1300,6 +1303,10 @@
if (!animated) {
mPublicLayout.animate().cancel();
mPrivateLayout.animate().cancel();
+ if (mChildrenContainer != null) {
+ mChildrenContainer.animate().cancel();
+ mChildrenContainer.setAlpha(1f);
+ }
mPublicLayout.setAlpha(1f);
mPrivateLayout.setAlpha(1f);
mPublicLayout.setVisibility(mShowingPublic ? View.VISIBLE : View.INVISIBLE);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
index 30ac9ca..9fd09d9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
@@ -119,6 +119,7 @@
private int mContentHeightAtAnimationStart = UNDEFINED;
private boolean mFocusOnVisibilityChange;
+ private boolean mHeadsupDisappearRunning;
public NotificationContentView(Context context, AttributeSet attrs) {
@@ -446,7 +447,8 @@
boolean transitioningBetweenHunAndExpanded =
isTransitioningFromTo(VISIBLE_TYPE_HEADSUP, VISIBLE_TYPE_EXPANDED) ||
isTransitioningFromTo(VISIBLE_TYPE_EXPANDED, VISIBLE_TYPE_HEADSUP);
- boolean pinned = !isVisibleOrTransitioning(VISIBLE_TYPE_CONTRACTED) && mIsHeadsUp;
+ boolean pinned = !isVisibleOrTransitioning(VISIBLE_TYPE_CONTRACTED)
+ && (mIsHeadsUp || mHeadsupDisappearRunning);
if (transitioningBetweenHunAndExpanded || pinned) {
return Math.min(mHeadsUpChild.getHeight(), mExpandedChild.getHeight());
}
@@ -830,7 +832,7 @@
return VISIBLE_TYPE_SINGLELINE;
}
- if (mIsHeadsUp && mHeadsUpChild != null) {
+ if ((mIsHeadsUp || mHeadsupDisappearRunning) && mHeadsUpChild != null) {
if (viewHeight <= mHeadsUpChild.getHeight() || noExpandedChild) {
return VISIBLE_TYPE_HEADSUP;
} else {
@@ -1153,6 +1155,11 @@
}
}
+ public void setHeadsupDisappearRunning(boolean headsupDisappearRunning) {
+ mHeadsupDisappearRunning = headsupDisappearRunning;
+ selectLayout(false /* animate */, true /* force */);
+ }
+
public void setFocusOnVisibilityChange() {
mFocusOnVisibilityChange = true;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java
index f75f3574..1ff2b13 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java
@@ -20,6 +20,7 @@
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.util.ArrayMap;
+import android.util.ArraySet;
import android.view.View;
import android.view.ViewGroup;
@@ -194,7 +195,7 @@
for (Integer viewType : mTransformedViews.keySet()) {
TransformState ownState = getCurrentState(viewType);
if (ownState != null) {
- ownState.setVisible(visible);
+ ownState.setVisible(visible, false /* force */);
ownState.recycle();
}
}
@@ -252,6 +253,19 @@
}
}
+ public void resetTransformedView(View view) {
+ TransformState state = TransformState.createFrom(view);
+ state.setVisible(true /* visible */, true /* force */);
+ state.recycle();
+ }
+
+ /**
+ * @return a set of all views are being transformed.
+ */
+ public ArraySet<View> getAllTransformingViews() {
+ return new ArraySet<>(mTransformedViews.values());
+ }
+
public static abstract class CustomTransformation {
/**
* Transform a state to the given view
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HeaderTransformState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HeaderTransformState.java
index 8463e06..9501f90 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HeaderTransformState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HeaderTransformState.java
@@ -123,8 +123,9 @@
}
}
- public void setVisible(boolean visible) {
- super.setVisible(visible);
+ @Override
+ public void setVisible(boolean visible, boolean force) {
+ super.setVisible(visible, force);
if (!(mTransformedView instanceof NotificationHeaderView)) {
return;
}
@@ -132,11 +133,13 @@
int childCount = header.getChildCount();
for (int i = 0; i < childCount; i++) {
View headerChild = header.getChildAt(i);
- if (headerChild.getVisibility() == View.GONE) {
+ if (!force && headerChild.getVisibility() == View.GONE) {
continue;
}
headerChild.animate().cancel();
- headerChild.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
+ if (headerChild.getVisibility() != View.GONE) {
+ headerChild.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
+ }
if (headerChild == mExpandButton) {
headerChild.setAlpha(visible ? 1.0f : 0.0f);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java
index 1bfbaa2..7794d5b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java
@@ -22,18 +22,17 @@
import android.content.Context;
import android.graphics.Color;
import android.graphics.ColorFilter;
-import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.service.notification.StatusBarNotification;
+import android.util.ArraySet;
import android.view.NotificationHeaderView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
-import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.ViewInvertHelper;
import com.android.systemui.statusbar.ExpandableNotificationRow;
@@ -92,12 +91,25 @@
@Override
public void notifyContentUpdated(StatusBarNotification notification) {
super.notifyContentUpdated(notification);
+
+ ArraySet<View> previousViews = mTransformationHelper.getAllTransformingViews();
+
// Reinspect the notification.
resolveHeaderViews();
updateInvertHelper();
updateTransformedTypes();
addRemainingTransformTypes();
updateCropToPaddingForImageViews();
+
+ // We need to reset all views that are no longer transforming in case a view was previously
+ // transformed, but now we decided to transform its container instead.
+ ArraySet<View> currentViews = mTransformationHelper.getAllTransformingViews();
+ for (int i = 0; i < previousViews.size(); i++) {
+ View view = previousViews.valueAt(i);
+ if (!currentViews.contains(view)) {
+ mTransformationHelper.resetTransformedView(view);
+ }
+ }
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/TransformState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/TransformState.java
index 7d3da1b..f0f5c8d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/TransformState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/TransformState.java
@@ -301,6 +301,9 @@
}
public static void setClippingDeactivated(final View transformedView, boolean deactivated) {
+ if (!(transformedView.getParent() instanceof ViewGroup)) {
+ return;
+ }
ViewGroup view = (ViewGroup) transformedView.getParent();
while (true) {
ArraySet<View> clipSet = (ArraySet<View>) view.getTag(CLIP_CLIPPING_SET);
@@ -456,12 +459,14 @@
mTransformationEndY = UNDEFINED;
}
- public void setVisible(boolean visible) {
- if (mTransformedView.getVisibility() == View.GONE) {
+ public void setVisible(boolean visible, boolean force) {
+ if (!force && mTransformedView.getVisibility() == View.GONE) {
return;
}
+ if (mTransformedView.getVisibility() != View.GONE) {
+ mTransformedView.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
+ }
mTransformedView.animate().cancel();
- mTransformedView.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
mTransformedView.setAlpha(visible ? 1.0f : 0.0f);
resetTransformedView();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
index 9ecff18d..204ab7e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
@@ -213,18 +213,18 @@
return isGroupSuppressed(getGroupKey(sbn)) && sbn.getNotification().isGroupSummary();
}
- public boolean isOnlyChildInSuppressedGroup(StatusBarNotification sbn) {
- return isGroupSuppressed(sbn.getGroupKey())
- && isOnlyChild(sbn);
- }
-
private boolean isOnlyChild(StatusBarNotification sbn) {
return !sbn.getNotification().isGroupSummary()
&& getTotalNumberOfChildren(sbn) == 1;
}
public boolean isOnlyChildInGroup(StatusBarNotification sbn) {
- return isOnlyChild(sbn) && getLogicalGroupSummary(sbn) != null;
+ if (!isOnlyChild(sbn)) {
+ return false;
+ }
+ ExpandableNotificationRow logicalGroupSummary = getLogicalGroupSummary(sbn);
+ return logicalGroupSummary != null
+ && !logicalGroupSummary.getStatusBarNotification().equals(sbn);
}
private int getTotalNumberOfChildren(StatusBarNotification sbn) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index de5e06c..8201b06 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -1408,7 +1408,7 @@
if (shadeEntry == null) {
return;
}
- boolean isHeadsUped = mUseHeadsUp && shouldPeek(shadeEntry);
+ boolean isHeadsUped = shouldPeek(shadeEntry);
if (isHeadsUped) {
mHeadsUpManager.showNotification(shadeEntry);
// Mark as seen immediately
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java
index 9041341..4664851 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java
@@ -16,12 +16,14 @@
package com.android.systemui.statusbar.policy;
+import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.wifi.WifiManager;
+import android.os.UserManager;
import android.util.Log;
import java.io.FileDescriptor;
@@ -49,7 +51,8 @@
@Override
public boolean isHotspotSupported() {
return mConnectivityManager.isTetheringSupported()
- && mConnectivityManager.getTetherableWifiRegexs().length != 0;
+ && mConnectivityManager.getTetherableWifiRegexs().length != 0
+ && UserManager.get(mContext).isUserAdmin(ActivityManager.getCurrentUser());
}
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java
index ba191cd..3c9373b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java
@@ -856,14 +856,6 @@
mNotificationParent.getNotificationColor());
}
- public void setRemoved() {
- int childCount = mChildren.size();
- for (int i = 0; i < childCount; i++) {
- ExpandableNotificationRow child = mChildren.get(i);
- child.setRemoved();
- }
- }
-
public int getPositionInLinearLayout(View childInGroup) {
int position = mNotificationHeaderMargin + mNotificatonTopPadding;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
index 71ef1ea..7de3879 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -3689,6 +3689,9 @@
if (mAnimationsEnabled) {
mHeadsUpChangeAnimations.add(new Pair<>(row, isHeadsUp));
mNeedsAnimation = true;
+ if (!mIsExpanded && !isHeadsUp) {
+ row.setHeadsupDisappearRunning(true);
+ }
requestChildrenUpdate();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
index c8c7d3d..5eaea90 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
@@ -152,8 +152,10 @@
float newYTranslation = state.yTranslation;
float newHeight = state.height;
float newNotificationEnd = newYTranslation + newHeight;
-
- if (newYTranslation < previousNotificationEnd) {
+ boolean isHeadsUp = (child instanceof ExpandableNotificationRow)
+ && ((ExpandableNotificationRow) child).isPinned();
+ if (newYTranslation < previousNotificationEnd && ambientState.isShadeExpanded()
+ && !isHeadsUp) {
// The previous view is overlapping on top, clip!
float overlapAmount = previousNotificationEnd - newYTranslation;
state.clipTopAmount = (int) overlapAmount;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
index 7ac0d80..659eaf7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
@@ -225,16 +225,22 @@
// start height animation
if (heightChanging) {
startHeightAnimation(child, viewState, duration, delay);
+ } else {
+ abortAnimation(child, TAG_ANIMATOR_HEIGHT);
}
// start shadow alpha animation
if (shadowAlphaChanging) {
startShadowAlphaAnimation(child, viewState, duration, delay);
+ } else {
+ abortAnimation(child, TAG_ANIMATOR_SHADOW_ALPHA);
}
// start top inset animation
if (topInsetChanging) {
startInsetAnimation(child, viewState, duration, delay);
+ } else {
+ abortAnimation(child, TAG_ANIMATOR_TOP_INSET);
}
// start dimmed animation
@@ -286,16 +292,29 @@
// start translationY animation
if (yTranslationChanging) {
startYTranslationAnimation(child, viewState, duration, delay);
+ } else {
+ abortAnimation(child, TAG_ANIMATOR_TRANSLATION_Y);
}
// start translationZ animation
if (zTranslationChanging) {
startZTranslationAnimation(child, viewState, duration, delay);
+ } else {
+ abortAnimation(child, TAG_ANIMATOR_TRANSLATION_Z);
}
// start alpha animation
if (alphaChanging && child.getTranslationX() == 0) {
startAlphaAnimation(child, viewState, duration, delay);
+ } else {
+ abortAnimation(child, TAG_ANIMATOR_ALPHA);
+ }
+ }
+
+ private void abortAnimation(View child, int animatorTag) {
+ Animator previousAnimator = getChildTag(child, animatorTag);
+ if (previousAnimator != null) {
+ previousAnimator.cancel();
}
}
@@ -413,7 +432,8 @@
animator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
long newDuration = cancelAnimatorAndGetNewDuration(duration, previousAnimator);
animator.setDuration(newDuration);
- if (delay > 0 && (previousAnimator == null || !previousAnimator.isRunning())) {
+ if (delay > 0 && (previousAnimator == null
+ || previousAnimator.getAnimatedFraction() == 0)) {
animator.setStartDelay(delay);
}
animator.addListener(getGlobalAnimationFinishedListener());
@@ -472,7 +492,8 @@
animator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
long newDuration = cancelAnimatorAndGetNewDuration(duration, previousAnimator);
animator.setDuration(newDuration);
- if (delay > 0 && (previousAnimator == null || !previousAnimator.isRunning())) {
+ if (delay > 0 && (previousAnimator == null
+ || previousAnimator.getAnimatedFraction() == 0)) {
animator.setStartDelay(delay);
}
animator.addListener(getGlobalAnimationFinishedListener());
@@ -548,7 +569,8 @@
animator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
long newDuration = cancelAnimatorAndGetNewDuration(duration, previousAnimator);
animator.setDuration(newDuration);
- if (delay > 0 && (previousAnimator == null || !previousAnimator.isRunning())) {
+ if (delay > 0 && (previousAnimator == null
+ || previousAnimator.getAnimatedFraction() == 0)) {
animator.setStartDelay(delay);
}
animator.addListener(getGlobalAnimationFinishedListener());
@@ -630,7 +652,8 @@
});
long newDuration = cancelAnimatorAndGetNewDuration(duration, previousAnimator);
animator.setDuration(newDuration);
- if (delay > 0 && (previousAnimator == null || !previousAnimator.isRunning())) {
+ if (delay > 0 && (previousAnimator == null
+ || previousAnimator.getAnimatedFraction() == 0)) {
animator.setStartDelay(delay);
}
animator.addListener(getGlobalAnimationFinishedListener());
@@ -674,7 +697,8 @@
animator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
long newDuration = cancelAnimatorAndGetNewDuration(duration, previousAnimator);
animator.setDuration(newDuration);
- if (delay > 0 && (previousAnimator == null || !previousAnimator.isRunning())) {
+ if (delay > 0 && (previousAnimator == null
+ || previousAnimator.getAnimatedFraction() == 0)) {
animator.setStartDelay(delay);
}
animator.addListener(getGlobalAnimationFinishedListener());
@@ -729,10 +753,12 @@
animator.setInterpolator(interpolator);
long newDuration = cancelAnimatorAndGetNewDuration(duration, previousAnimator);
animator.setDuration(newDuration);
- if (delay > 0 && (previousAnimator == null || !previousAnimator.isRunning())) {
+ if (delay > 0 && (previousAnimator == null
+ || previousAnimator.getAnimatedFraction() == 0)) {
animator.setStartDelay(delay);
}
animator.addListener(getGlobalAnimationFinishedListener());
+ final boolean isHeadsUpDisappear = mHeadsUpDisappearChildren.contains(child);
// remove the tag when the animation is finished
animator.addListener(new AnimatorListenerAdapter() {
@Override
@@ -741,6 +767,9 @@
child.setTag(TAG_ANIMATOR_TRANSLATION_Y, null);
child.setTag(TAG_START_TRANSLATION_Y, null);
child.setTag(TAG_END_TRANSLATION_Y, null);
+ if (isHeadsUpDisappear) {
+ ((ExpandableNotificationRow) child).setHeadsupDisappearRunning(false);
+ }
}
});
startAnimator(animator);
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 130fb7c..b12972c 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -30,8 +30,6 @@
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import static android.net.NetworkPolicyManager.RULE_ALLOW_ALL;
import static android.net.NetworkPolicyManager.RULE_ALLOW_METERED;
-import static android.net.NetworkPolicyManager.MASK_METERED_NETWORKS;
-import static android.net.NetworkPolicyManager.MASK_ALL_NETWORKS;
import static android.net.NetworkPolicyManager.RULE_NONE;
import static android.net.NetworkPolicyManager.RULE_REJECT_ALL;
import static android.net.NetworkPolicyManager.RULE_REJECT_METERED;
@@ -921,7 +919,7 @@
// Networks aren't blocked when ignoring blocked status
if (ignoreBlocked) return false;
// Networks are never blocked for system services
- if (uid < Process.FIRST_APPLICATION_UID) return false;
+ if (isSystem(uid)) return false;
final boolean networkMetered;
final int uidRules;
@@ -4032,12 +4030,18 @@
return false;
}
+ private boolean isSystem(int uid) {
+ return uid < Process.FIRST_APPLICATION_UID;
+ }
private void enforceMeteredApnPolicy(NetworkCapabilities networkCapabilities) {
+ final int uid = Binder.getCallingUid();
+ if (isSystem(uid)) {
+ return;
+ }
// if UID is restricted, don't allow them to bring up metered APNs
if (networkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED) == false) {
final int uidRules;
- final int uid = Binder.getCallingUid();
synchronized(mRulesLock) {
uidRules = mUidRules.get(uid, RULE_ALLOW_ALL);
}
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index 9c75a00..55464e4 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -2030,6 +2030,9 @@
enforcePermission(android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS);
waitForReady();
+ final VolumeInfo from;
+ final VolumeInfo to;
+
synchronized (mLock) {
if (Objects.equals(mPrimaryStorageUuid, volumeUuid)) {
throw new IllegalArgumentException("Primary storage already at " + volumeUuid);
@@ -2049,10 +2052,11 @@
onMoveStatusLocked(MOVE_STATUS_COPY_FINISHED);
onMoveStatusLocked(PackageManager.MOVE_SUCCEEDED);
mHandler.obtainMessage(H_RESET).sendToTarget();
+ return;
} else {
- final VolumeInfo from = findStorageForUuid(mPrimaryStorageUuid);
- final VolumeInfo to = findStorageForUuid(volumeUuid);
+ from = findStorageForUuid(mPrimaryStorageUuid);
+ to = findStorageForUuid(volumeUuid);
if (from == null) {
Slog.w(TAG, "Failing move due to missing from volume " + mPrimaryStorageUuid);
@@ -2063,14 +2067,14 @@
onMoveStatusLocked(PackageManager.MOVE_FAILED_INTERNAL_ERROR);
return;
}
-
- try {
- mConnector.execute("volume", "move_storage", from.id, to.id);
- } catch (NativeDaemonConnectorException e) {
- throw e.rethrowAsParcelableException();
- }
}
}
+
+ try {
+ mConnector.execute("volume", "move_storage", from.id, to.id);
+ } catch (NativeDaemonConnectorException e) {
+ throw e.rethrowAsParcelableException();
+ }
}
@Override
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 0cf5172..f7bd04b 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -3538,7 +3538,7 @@
@Override
public void addSharedAccountsFromParentUser(int parentUserId, int userId) {
- checkManageUsersPermission("addSharedAccountsFromParentUser");
+ checkManageOrCreateUsersPermission("addSharedAccountsFromParentUser");
Account[] accounts = getAccountsAsUser(null, parentUserId, mContext.getOpPackageName());
for (Account account : accounts) {
addSharedAccountAsUser(account, userId);
@@ -5092,6 +5092,16 @@
}
}
+ private static void checkManageOrCreateUsersPermission(String message) {
+ if (ActivityManager.checkComponentPermission(android.Manifest.permission.MANAGE_USERS,
+ Binder.getCallingUid(), -1, true) != PackageManager.PERMISSION_GRANTED &&
+ ActivityManager.checkComponentPermission(android.Manifest.permission.CREATE_USERS,
+ Binder.getCallingUid(), -1, true) != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("You need MANAGE_USERS or CREATE_USERS permission to: "
+ + message);
+ }
+ }
+
private boolean hasExplicitlyGrantedPermission(Account account, String authTokenType,
int callerUid) {
if (callerUid == Process.SYSTEM_UID) {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index e984112..09a5185 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -273,6 +273,10 @@
import static android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.content.res.Configuration.UI_MODE_TYPE_TELEVISION;
+import static android.os.Process.PROC_CHAR;
+import static android.os.Process.PROC_OUT_LONG;
+import static android.os.Process.PROC_PARENS;
+import static android.os.Process.PROC_SPACE_TERM;
import static android.provider.Settings.Global.ALWAYS_FINISH_ACTIVITIES;
import static android.provider.Settings.Global.DEBUG_APP;
import static android.provider.Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT;
@@ -6412,7 +6416,7 @@
EventLog.writeEvent(EventLogTags.AM_PROC_BOUND, app.userId, app.pid, app.processName);
app.makeActive(thread, mProcessStats);
- app.curAdj = app.setAdj = ProcessList.INVALID_ADJ;
+ app.curAdj = app.setAdj = app.verifiedAdj = ProcessList.INVALID_ADJ;
app.curSchedGroup = app.setSchedGroup = ProcessList.SCHED_GROUP_DEFAULT;
app.forcingToForeground = null;
updateProcessForegroundLocked(app, false, false);
@@ -10535,6 +10539,30 @@
}
}
+ private static final int[] PROCESS_STATE_STATS_FORMAT = new int[] {
+ PROC_SPACE_TERM,
+ PROC_SPACE_TERM|PROC_PARENS,
+ PROC_SPACE_TERM|PROC_CHAR|PROC_OUT_LONG, // 3: process state
+ };
+
+ private final long[] mProcessStateStatsLongs = new long[1];
+
+ boolean isProcessAliveLocked(ProcessRecord proc) {
+ if (proc.procStatFile == null) {
+ proc.procStatFile = "/proc/" + proc.pid + "/stat";
+ }
+ mProcessStateStatsLongs[0] = 0;
+ if (!Process.readProcFile(proc.procStatFile, PROCESS_STATE_STATS_FORMAT, null,
+ mProcessStateStatsLongs, null)) {
+ if (DEBUG_OOM_ADJ) Slog.d(TAG, "UNABLE TO RETRIEVE STATE FOR " + proc.procStatFile);
+ return false;
+ }
+ final long state = mProcessStateStatsLongs[0];
+ if (DEBUG_OOM_ADJ) Slog.d(TAG, "RETRIEVED STATE FOR " + proc.procStatFile + ": "
+ + (char)state);
+ return state != 'Z' && state != 'X' && state != 'x' && state != 'K';
+ }
+
private ContentProviderHolder getContentProviderImpl(IApplicationThread caller,
String name, IBinder token, boolean stable, int userId) {
ContentProviderRecord cpr;
@@ -10622,7 +10650,16 @@
}
checkTime(startTime, "getContentProviderImpl: before updateOomAdj");
+ final int verifiedAdj = cpr.proc.verifiedAdj;
boolean success = updateOomAdjLocked(cpr.proc);
+ // XXX things have changed so updateOomAdjLocked doesn't actually tell us
+ // if the process has been successfully adjusted. So to reduce races with
+ // it, we will check whether the process still exists. Note that this doesn't
+ // completely get rid of races with LMK killing the process, but should make
+ // them much smaller.
+ if (success && verifiedAdj != cpr.proc.setAdj && !isProcessAliveLocked(cpr.proc)) {
+ success = false;
+ }
maybeUpdateProviderUsageStatsLocked(r, cpr.info.packageName, name);
checkTime(startTime, "getContentProviderImpl: after updateOomAdj");
if (DEBUG_PROVIDER) Slog.i(TAG_PROVIDER, "Adjust success: " + success);
@@ -10648,6 +10685,8 @@
}
providerRunning = false;
conn = null;
+ } else {
+ cpr.proc.verifiedAdj = cpr.proc.setAdj;
}
Binder.restoreCallingIdentity(origId);
@@ -17917,6 +17956,19 @@
// Apps should use JobScehduler to monitor for media provider changes.
Slog.w(TAG, action + " no longer allowed; dropping from "
+ UserHandle.formatUid(callingUid));
+ if (resultTo != null) {
+ final BroadcastQueue queue = broadcastQueueForIntent(intent);
+ try {
+ queue.performReceiveLocked(callerApp, resultTo, intent,
+ Activity.RESULT_CANCELED, null, null,
+ false, false, userId);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failure ["
+ + queue.mQueueName + "] sending broadcast result of "
+ + intent, e);
+
+ }
+ }
// Lie; we don't want to crash the app.
return ActivityManager.BROADCAST_SUCCESS;
}
@@ -18780,7 +18832,7 @@
starting = mainStack.topRunningActivityLocked();
}
- if (starting != null && starting.state != ActivityState.STOPPED) {
+ if (starting != null) {
kept = mainStack.ensureActivityConfigurationLocked(starting, changes, false);
// And we need to make sure at this point that all other activities
// are made visible with the correct configuration.
@@ -20069,6 +20121,7 @@
"Set " + app.pid + " " + app.processName + " adj " + app.curAdj + ": "
+ app.adjType);
app.setAdj = app.curAdj;
+ app.verifiedAdj = ProcessList.INVALID_ADJ;
}
if (app.setSchedGroup != app.curSchedGroup) {
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index 6510cb4..50b6c0c 100755
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -1157,13 +1157,6 @@
public void reportFullyDrawnLocked() {
final long curTime = SystemClock.uptimeMillis();
- // Normally launch time counts from the point when the activity is resumed, to when the
- // first window is drawn. However the activity could become visible before it is resumed,
- // due to some other activity in the same task being launched. In this case we still need
- // to report launch time to unblock ActivityStarter.startActivityMayWait().
- if (displayStartTime == 0 && task != null && task.isLaunching) {
- displayStartTime = curTime;
- }
if (displayStartTime != 0) {
reportLaunchTimeLocked(curTime);
}
@@ -1229,22 +1222,13 @@
//service.mUsageStatsService.noteLaunchTime(realActivity, (int)totalTime);
}
displayStartTime = 0;
- task.isLaunching = false;
stack.mLaunchStartTime = 0;
}
void windowsDrawnLocked() {
mStackSupervisor.mActivityMetricsLogger.notifyWindowsDrawn();
- final long curTime = SystemClock.uptimeMillis();
- // Normally launch time counts from the point when the activity is resumed, to when the
- // first window is drawn. However the activity could become visible before it is resumed,
- // due to some other activity in the same task being launched. In this case we still need
- // to report launch time to unblock ActivityStarter.startActivityMayWait().
- if (displayStartTime == 0 && task != null && task.isLaunching) {
- displayStartTime = curTime;
- }
if (displayStartTime != 0) {
- reportLaunchTimeLocked(curTime);
+ reportLaunchTimeLocked(SystemClock.uptimeMillis());
}
mStackSupervisor.sendWaitingVisibleReportLocked(this);
startTime = 0;
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 6af7a5d..a5c34e2 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -825,7 +825,8 @@
* is the same as the given activity. Returns null if no such activity
* is found.
*/
- ActivityRecord findActivityLocked(Intent intent, ActivityInfo info) {
+ ActivityRecord findActivityLocked(Intent intent, ActivityInfo info,
+ boolean compareIntentFilters) {
ComponentName cls = intent.getComponent();
if (info.targetActivity != null) {
cls = new ComponentName(info.packageName, info.targetActivity);
@@ -843,8 +844,16 @@
if (notCurrentUserTask && (r.info.flags & FLAG_SHOW_FOR_ALL_USERS) == 0) {
continue;
}
- if (!r.finishing && r.intent.getComponent().equals(cls) && r.userId == userId) {
- return r;
+ if (!r.finishing && r.userId == userId) {
+ if (compareIntentFilters) {
+ if (r.intent.filterEquals(intent)) {
+ return r;
+ }
+ } else {
+ if (r.intent.getComponent().equals(cls)) {
+ return r;
+ }
+ }
}
}
}
@@ -924,9 +933,6 @@
void setLaunchTime(ActivityRecord r) {
if (r.displayStartTime == 0) {
r.fullyDrawnStartTime = r.displayStartTime = SystemClock.uptimeMillis();
- if (r.task != null) {
- r.task.isLaunching = true;
- }
if (mLaunchStartTime == 0) {
startLaunchTraces(r.packageName);
mLaunchStartTime = mFullyDrawnStartTime = r.displayStartTime;
@@ -941,9 +947,6 @@
// Make sure that there is no activity waiting for this to launch.
if (mStackSupervisor.mWaitingActivityLaunched.isEmpty()) {
r.displayStartTime = r.fullyDrawnStartTime = 0;
- if (r.task != null) {
- r.task.isLaunching = false;
- }
} else {
mStackSupervisor.removeTimeoutsForActivityLocked(r);
mStackSupervisor.scheduleIdleTimeoutLocked(r);
@@ -1398,6 +1401,7 @@
if (next.nowVisible) {
// We won't get a call to reportActivityVisibleLocked() so dismiss lockscreen now.
+ mStackSupervisor.reportActivityVisibleLocked(next);
mStackSupervisor.notifyActivityDrawnForKeyguard();
}
@@ -1820,8 +1824,7 @@
boolean stackVisibleBehind, ActivityRecord visibleBehind,
boolean behindFullscreenActivity) {
- if (!okToShowLocked(r)
- || (mService.isSleepingOrShuttingDownLocked() && r.voiceSession == null)) {
+ if (!okToShowLocked(r)) {
return false;
}
@@ -4449,7 +4452,7 @@
}
}
if (updatedConfig) {
- // Ensure the resumed state of the focus activity if we updated the confiugaration of
+ // Ensure the resumed state of the focus activity if we updated the configuration of
// any activity.
mStackSupervisor.resumeFocusedStackTopActivityLocked();
}
@@ -4469,6 +4472,15 @@
return true;
}
+ // TODO: We could probably make the condition below just check that the activity state is
+ // stopped, but also checking the sleep state for now to reduce change impact late in
+ // development cycle.
+ if (mService.isSleepingOrShuttingDownLocked() && r.state == ActivityState.STOPPED) {
+ if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
+ "Skipping config check (stopped while sleeping): " + r);
+ return true;
+ }
+
if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
"Ensuring correct configuration: " + r);
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 738622fd..36207c4 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -111,6 +111,7 @@
import static android.app.ActivityManager.LOCK_TASK_MODE_PINNED;
import static android.app.ActivityManager.RESIZE_MODE_FORCED;
import static android.app.ActivityManager.RESIZE_MODE_SYSTEM;
+import static android.app.ActivityManager.START_TASK_TO_FRONT;
import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
import static android.app.ActivityManager.StackId.FIRST_DYNAMIC_STACK_ID;
import static android.app.ActivityManager.StackId.FIRST_STATIC_STACK_ID;
@@ -1002,6 +1003,24 @@
}
}
+ void reportTaskToFrontNoLaunch(ActivityRecord r) {
+ boolean changed = false;
+ for (int i = mWaitingActivityLaunched.size() - 1; i >= 0; i--) {
+ WaitResult w = mWaitingActivityLaunched.remove(i);
+ if (w.who == null) {
+ changed = true;
+ // Set result to START_TASK_TO_FRONT so that startActivityMayWait() knows that
+ // the starting activity ends up moving another activity to front, and it should
+ // wait for this new activity to become visible instead.
+ // Do not modify other fields.
+ w.result = START_TASK_TO_FRONT;
+ }
+ }
+ if (changed) {
+ mService.notifyAll();
+ }
+ }
+
void reportActivityLaunchedLocked(boolean timeout, ActivityRecord r,
long thisTime, long totalTime) {
boolean changed = false;
@@ -1015,6 +1034,7 @@
}
w.thisTime = thisTime;
w.totalTime = totalTime;
+ // Do not modify w.result.
}
}
if (changed) {
@@ -2619,11 +2639,13 @@
return mTmpFindTaskResult.r;
}
- ActivityRecord findActivityLocked(Intent intent, ActivityInfo info) {
+ ActivityRecord findActivityLocked(Intent intent, ActivityInfo info,
+ boolean compareIntentFilters) {
for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
- final ActivityRecord ar = stacks.get(stackNdx).findActivityLocked(intent, info);
+ final ActivityRecord ar = stacks.get(stackNdx)
+ .findActivityLocked(intent, info, compareIntentFilters);
if (ar != null) {
return ar;
}
@@ -3023,8 +3045,9 @@
/** Checks whether the activity should be shown for current user. */
boolean okToShowLocked(ActivityRecord r) {
- return r != null && (isCurrentProfileLocked(r.userId)
- || (r.info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0);
+ return r != null && ((r.info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0
+ || (isCurrentProfileLocked(r.userId)
+ && !mService.mUserController.isUserStoppingOrShuttingDownLocked(r.userId)));
}
final ArrayList<ActivityRecord> processStoppingActivitiesLocked(boolean remove) {
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index e425484..234a467 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -553,6 +553,13 @@
return;
}
+ // We're waiting for an activity launch to finish, but that activity simply
+ // brought another activity to front. Let startActivityMayWait() know about
+ // this, so it waits for the new activity to become visible instead.
+ if (result == START_TASK_TO_FRONT && !mSupervisor.mWaitingActivityLaunched.isEmpty()) {
+ mSupervisor.reportTaskToFrontNoLaunch(mStartActivity);
+ }
+
int startedActivityStackId = INVALID_STACK_ID;
if (r.task != null && r.task.stack != null) {
startedActivityStackId = r.task.stack.mStackId;
@@ -840,8 +847,13 @@
mService.wait();
} catch (InterruptedException e) {
}
- } while (!outResult.timeout && outResult.who == null);
- } else if (res == START_TASK_TO_FRONT) {
+ } while (outResult.result != START_TASK_TO_FRONT
+ && !outResult.timeout && outResult.who == null);
+ if (outResult.result == START_TASK_TO_FRONT) {
+ res = START_TASK_TO_FRONT;
+ }
+ }
+ if (res == START_TASK_TO_FRONT) {
ActivityRecord r = stack.topRunningActivityLocked();
if (r.nowVisible && r.state == RESUMED) {
outResult.timeout = false;
@@ -1409,11 +1421,11 @@
if (mLaunchSingleInstance) {
// There can be one and only one instance of single instance activity in the
// history, and it is always in its own unique task, so we do a special search.
- intentActivity = mSupervisor.findActivityLocked(mIntent, mStartActivity.info);
+ intentActivity = mSupervisor.findActivityLocked(mIntent, mStartActivity.info, false);
} else if ((mLaunchFlags & FLAG_ACTIVITY_LAUNCH_ADJACENT) != 0) {
// For the launch adjacent case we only want to put the activity in an existing
// task if the activity already exists in the history.
- intentActivity = mSupervisor.findActivityLocked(mIntent, mStartActivity.info);
+ intentActivity = mSupervisor.findActivityLocked(mIntent, mStartActivity.info, true);
} else {
// Otherwise find the best task to put the activity in.
intentActivity = mSupervisor.findTaskLocked(mStartActivity);
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index 88645c1..a279290 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -456,7 +456,7 @@
}
}
- private void performReceiveLocked(ProcessRecord app, IIntentReceiver receiver,
+ void performReceiveLocked(ProcessRecord app, IIntentReceiver receiver,
Intent intent, int resultCode, String data, Bundle extras,
boolean ordered, boolean sticky, int sendingUser) throws RemoteException {
// Send the intent to the receiver asynchronously using one-way binder calls.
diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java
index 691fd2a..8911a3e 100644
--- a/services/core/java/com/android/server/am/ProcessRecord.java
+++ b/services/core/java/com/android/server/am/ProcessRecord.java
@@ -75,6 +75,7 @@
ProcessState baseProcessTracker;
BatteryStatsImpl.Uid.Proc curProcBatteryStats;
int pid; // The process of this application; 0 if none
+ String procStatFile; // path to /proc/<pid>/stat
int[] gids; // The gids this process was launched with
String requiredAbi; // The ABI this process was launched with
String instructionSet; // The instruction set this process was launched with
@@ -93,6 +94,7 @@
int setRawAdj; // Last set OOM unlimited adjustment for this process
int curAdj; // Current OOM adjustment for this process
int setAdj; // Last set OOM adjustment for this process
+ int verifiedAdj; // The last adjustment that was verified as actually being set
int curSchedGroup; // Currently desired scheduling class
int setSchedGroup; // Last set to background scheduling class
int trimMemoryLevel; // Last selected memory trimming level
@@ -441,7 +443,7 @@
pkgList.put(_info.packageName, new ProcessStats.ProcessStateHolder(_info.versionCode));
maxAdj = ProcessList.UNKNOWN_ADJ;
curRawAdj = setRawAdj = ProcessList.INVALID_ADJ;
- curAdj = setAdj = ProcessList.INVALID_ADJ;
+ curAdj = setAdj = verifiedAdj = ProcessList.INVALID_ADJ;
persistent = false;
removed = false;
lastStateTime = lastPssTime = nextPssTime = SystemClock.uptimeMillis();
@@ -449,6 +451,7 @@
public void setPid(int _pid) {
pid = _pid;
+ procStatFile = null;
shortStringName = null;
stringName = null;
}
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index c84aaac..3f6db99 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -154,7 +154,6 @@
long lastActiveTime; // Last time this task was active, including sleep.
boolean inRecents; // Actually in the recents list?
boolean isAvailable; // Is the activity available to be launched?
- boolean isLaunching; // Is an activity in this task launching?
boolean rootWasReset; // True if the intent at the root of the task had
// the FLAG_ACTIVITY_RESET_TASK_IF_NEEDED flag.
boolean autoRemoveRecents; // If true, we should automatically remove the task from
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index 4380af3..b685dd3 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -1335,6 +1335,15 @@
return mStartedUserArray;
}
+ boolean isUserStoppingOrShuttingDownLocked(int userId) {
+ UserState state = getStartedUserStateLocked(userId);
+ if (state == null) {
+ return false;
+ }
+ return state.state == UserState.STATE_STOPPING
+ || state.state == UserState.STATE_SHUTDOWN;
+ }
+
boolean isUserRunningLocked(int userId, int flags) {
UserState state = getStartedUserStateLocked(userId);
if (state == null) {
diff --git a/services/core/java/com/android/server/job/controllers/ContentObserverController.java b/services/core/java/com/android/server/job/controllers/ContentObserverController.java
index 26660e8..9dce070 100644
--- a/services/core/java/com/android/server/job/controllers/ContentObserverController.java
+++ b/services/core/java/com/android/server/job/controllers/ContentObserverController.java
@@ -57,7 +57,7 @@
private static volatile ContentObserverController sController;
final private List<JobStatus> mTrackedTasks = new ArrayList<JobStatus>();
- ArrayMap<Uri, ObserverInstance> mObservers = new ArrayMap<>();
+ ArrayMap<JobInfo.TriggerContentUri, ObserverInstance> mObservers = new ArrayMap<>();
final Handler mHandler;
public static ContentObserverController get(JobSchedulerService taskManagerService) {
@@ -253,10 +253,10 @@
final JobInfo.TriggerContentUri[] uris = jobStatus.getJob().getTriggerContentUris();
if (uris != null) {
for (JobInfo.TriggerContentUri uri : uris) {
- ObserverInstance obs = mObservers.get(uri.getUri());
+ ObserverInstance obs = mObservers.get(uri);
if (obs == null) {
obs = new ObserverInstance(mHandler, uri.getUri());
- mObservers.put(uri.getUri(), obs);
+ mObservers.put(uri, obs);
mContext.getContentResolver().registerContentObserver(
uri.getUri(),
(uri.getFlags() &
@@ -316,7 +316,7 @@
obs.mJobs.remove(this);
if (obs.mJobs.size() == 0) {
mContext.getContentResolver().unregisterContentObserver(obs);
- mObservers.remove(obs.mUri);
+ mObservers.remove(obs);
}
}
}
@@ -355,7 +355,10 @@
continue;
}
pw.print(" ");
- pw.print(mObservers.keyAt(i));
+ JobInfo.TriggerContentUri trigger = mObservers.keyAt(i);
+ pw.print(trigger.getUri());
+ pw.print(" 0x");
+ pw.print(Integer.toHexString(trigger.getFlags()));
pw.print(" (");
pw.print(System.identityHashCode(obs));
pw.println("):");
diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java
index 9aef98a..173f76f 100644
--- a/services/core/java/com/android/server/location/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/GnssLocationProvider.java
@@ -1196,7 +1196,7 @@
}
if (DEBUG) Log.d(TAG, "setRequest " + mProviderRequest);
- if (mProviderRequest.reportLocation && !mDisableGps) {
+ if (mProviderRequest.reportLocation && !mDisableGps && isEnabled()) {
// update client uids
updateClientUids(mWorkSource);
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 67cd7c3..228c015 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -1989,6 +1989,7 @@
}
private void setRestrictBackgroundLocked(boolean restrictBackground) {
+ Slog.d(TAG, "setRestrictBackgroundLocked(): " + restrictBackground);
final boolean oldRestrictBackground = mRestrictBackground;
mRestrictBackground = restrictBackground;
// Must whitelist foreground apps before turning data saver mode on.
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 662516e..73850de 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -67,7 +67,6 @@
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
-import android.content.IIntentSender;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
@@ -2805,7 +2804,7 @@
// notification was a summary and its group key changed.
if (oldIsSummary && (!isSummary || !oldGroup.equals(group))) {
cancelGroupChildrenLocked(old, callingUid, callingPid, null,
- REASON_GROUP_SUMMARY_CANCELED);
+ REASON_GROUP_SUMMARY_CANCELED, false /* sendDelete */);
}
}
@@ -3438,7 +3437,7 @@
cancelNotificationLocked(r, sendDelete, reason);
cancelGroupChildrenLocked(r, callingUid, callingPid, listenerName,
- REASON_GROUP_SUMMARY_CANCELED);
+ REASON_GROUP_SUMMARY_CANCELED, sendDelete);
updateLightsLocked();
}
}
@@ -3517,7 +3516,7 @@
final int M = canceledNotifications.size();
for (int i = 0; i < M; i++) {
cancelGroupChildrenLocked(canceledNotifications.get(i), callingUid, callingPid,
- listenerName, REASON_GROUP_SUMMARY_CANCELED);
+ listenerName, REASON_GROUP_SUMMARY_CANCELED, false /* sendDelete */);
}
}
if (canceledNotifications != null) {
@@ -3561,14 +3560,14 @@
int M = canceledNotifications != null ? canceledNotifications.size() : 0;
for (int i = 0; i < M; i++) {
cancelGroupChildrenLocked(canceledNotifications.get(i), callingUid, callingPid,
- listenerName, REASON_GROUP_SUMMARY_CANCELED);
+ listenerName, REASON_GROUP_SUMMARY_CANCELED, false /* sendDelete */);
}
updateLightsLocked();
}
// Warning: The caller is responsible for invoking updateLightsLocked().
private void cancelGroupChildrenLocked(NotificationRecord r, int callingUid, int callingPid,
- String listenerName, int reason) {
+ String listenerName, int reason, boolean sendDelete) {
Notification n = r.getNotification();
if (!n.isGroupSummary()) {
return;
@@ -3591,7 +3590,7 @@
EventLogTags.writeNotificationCancel(callingUid, callingPid, pkg, childSbn.getId(),
childSbn.getTag(), userId, 0, 0, reason, listenerName);
mNotificationList.remove(i);
- cancelNotificationLocked(childR, false, reason);
+ cancelNotificationLocked(childR, sendDelete, reason);
}
}
}
@@ -3899,7 +3898,9 @@
@Override
public void onUserSwitched(int user) {
synchronized (mNotificationList) {
- for (ManagedServiceInfo info : mServices) {
+ int i = mServices.size()-1;
+ while (i --> 0) {
+ final ManagedServiceInfo info = mServices.get(i);
unregisterService(info.service, info.userid);
}
}
diff --git a/services/core/java/com/android/server/notification/NotificationUsageStats.java b/services/core/java/com/android/server/notification/NotificationUsageStats.java
index 07142f0..34c5283 100644
--- a/services/core/java/com/android/server/notification/NotificationUsageStats.java
+++ b/services/core/java/com/android/server/notification/NotificationUsageStats.java
@@ -146,7 +146,8 @@
/**
* Called when a notification has been updated.
*/
- public void registerUpdatedByApp(NotificationRecord notification, NotificationRecord old) {
+ public synchronized void registerUpdatedByApp(NotificationRecord notification,
+ NotificationRecord old) {
notification.stats.updateFrom(old.stats);
AggregatedStats[] aggregatedStatsArray = getAggregatedStatsLocked(notification);
for (AggregatedStats stats : aggregatedStatsArray) {
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 4c515f0..d8a1c77 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -732,9 +732,9 @@
long identity = Binder.clearCallingIdentity();
try {
if (enableQuietMode) {
+ ActivityManagerNative.getDefault().stopUser(userHandle, /* force */true, null);
LocalServices.getService(ActivityManagerInternal.class)
.killForegroundAppsForUser(userHandle);
- ActivityManagerNative.getDefault().stopUser(userHandle, /* force */true, null);
} else {
ActivityManagerNative.getDefault().startUserInBackground(userHandle);
}
diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
index 4148cd0..359063c 100644
--- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
+++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
@@ -731,9 +731,7 @@
}
try {
- if (task == null || task.mStack.getBoundsAnimating()) {
- w.mClient.moved(left, top);
- }
+ w.mClient.moved(left, top);
} catch (RemoteException e) {
}
w.mMovedByResize = false;
diff --git a/test-runner/src/android/test/mock/MockContext.java b/test-runner/src/android/test/mock/MockContext.java
index b14fc41..9471326 100644
--- a/test-runner/src/android/test/mock/MockContext.java
+++ b/test-runner/src/android/test/mock/MockContext.java
@@ -702,6 +702,12 @@
throw new UnsupportedOperationException();
}
+ /** @hide */
+ @Override
+ public Display getDisplay() {
+ throw new UnsupportedOperationException();
+ }
+
@Override
public File[] getExternalFilesDirs(String type) {
throw new UnsupportedOperationException();