summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/accounts/ChooseTypeAndAccountActivity.java24
-rw-r--r--core/java/android/app/ActivityManager.java7
-rw-r--r--core/java/android/app/IProcessObserver.aidl1
-rw-r--r--core/java/android/provider/ContactsContract.java15
-rw-r--r--core/java/android/view/DisplayList.java7
-rw-r--r--core/java/android/view/HardwareRenderer.java42
-rw-r--r--core/java/android/view/ViewRootImpl.java5
-rw-r--r--core/java/android/view/VolumePanel.java20
-rw-r--r--core/java/android/webkit/WebViewClassic.java5
-rw-r--r--core/java/android/widget/AbsListView.java100
-rw-r--r--core/jni/android_view_DisplayEventReceiver.cpp42
-rw-r--r--core/jni/android_view_InputEventReceiver.cpp35
-rw-r--r--core/res/res/values-af/strings.xml19
-rw-r--r--core/res/res/values-am/strings.xml1
-rw-r--r--core/res/res/values-ar/strings.xml1
-rw-r--r--core/res/res/values-be/strings.xml1
-rw-r--r--core/res/res/values-bg/strings.xml1
-rw-r--r--core/res/res/values-ca/strings.xml1
-rw-r--r--core/res/res/values-cs/strings.xml4
-rw-r--r--core/res/res/values-da/strings.xml19
-rw-r--r--core/res/res/values-de/strings.xml1
-rw-r--r--core/res/res/values-el/strings.xml1
-rw-r--r--core/res/res/values-en-rGB/strings.xml1
-rw-r--r--core/res/res/values-es-rUS/strings.xml1
-rw-r--r--core/res/res/values-es/strings.xml1
-rw-r--r--core/res/res/values-et/strings.xml1
-rw-r--r--core/res/res/values-fa/strings.xml1
-rw-r--r--core/res/res/values-fi/strings.xml1
-rw-r--r--core/res/res/values-fr/strings.xml1
-rw-r--r--core/res/res/values-hi/strings.xml1
-rw-r--r--core/res/res/values-hr/strings.xml1
-rw-r--r--core/res/res/values-hu/strings.xml1
-rw-r--r--core/res/res/values-in/strings.xml1
-rw-r--r--core/res/res/values-it/strings.xml19
-rw-r--r--core/res/res/values-iw/strings.xml1
-rw-r--r--core/res/res/values-ja/strings.xml1
-rw-r--r--core/res/res/values-ko/strings.xml1
-rw-r--r--core/res/res/values-lt/strings.xml1
-rw-r--r--core/res/res/values-lv/strings.xml1
-rw-r--r--core/res/res/values-ms/strings.xml1
-rw-r--r--core/res/res/values-nb/strings.xml3
-rw-r--r--core/res/res/values-nl/strings.xml1
-rw-r--r--core/res/res/values-pl/strings.xml1
-rw-r--r--core/res/res/values-pt-rPT/strings.xml1
-rw-r--r--core/res/res/values-pt/strings.xml1
-rw-r--r--core/res/res/values-rm/strings.xml2
-rw-r--r--core/res/res/values-ro/strings.xml1
-rw-r--r--core/res/res/values-ru/strings.xml19
-rw-r--r--core/res/res/values-sk/strings.xml1
-rw-r--r--core/res/res/values-sl/strings.xml1
-rw-r--r--core/res/res/values-sr/strings.xml1
-rw-r--r--core/res/res/values-sv/strings.xml19
-rw-r--r--core/res/res/values-sw/strings.xml1
-rw-r--r--core/res/res/values-th/strings.xml1
-rw-r--r--core/res/res/values-tl/strings.xml1
-rw-r--r--core/res/res/values-tr/strings.xml1
-rw-r--r--core/res/res/values-uk/strings.xml1
-rw-r--r--core/res/res/values-vi/strings.xml1
-rw-r--r--core/res/res/values-zh-rCN/strings.xml19
-rw-r--r--core/res/res/values-zh-rTW/strings.xml1
-rw-r--r--core/res/res/values-zu/strings.xml1
-rwxr-xr-xcore/res/res/values/strings.xml2
-rw-r--r--include/private/hwui/DrawGlInfo.h9
-rw-r--r--libs/hwui/DisplayListRenderer.cpp115
-rw-r--r--libs/hwui/DisplayListRenderer.h40
-rw-r--r--libs/hwui/OpenGLRenderer.cpp152
-rw-r--r--libs/hwui/OpenGLRenderer.h42
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java21
-rw-r--r--services/java/com/android/server/PowerManagerService.java9
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java171
-rw-r--r--services/java/com/android/server/am/ProcessRecord.java1
-rw-r--r--services/java/com/android/server/net/NetworkPolicyManagerService.java4
-rwxr-xr-xservices/java/com/android/server/wm/WindowManagerService.java4
-rw-r--r--wifi/java/android/net/wifi/WifiWatchdogStateMachine.java17
74 files changed, 606 insertions, 447 deletions
diff --git a/core/java/android/accounts/ChooseTypeAndAccountActivity.java b/core/java/android/accounts/ChooseTypeAndAccountActivity.java
index 85438487d22e..6b3b7fd59f52 100644
--- a/core/java/android/accounts/ChooseTypeAndAccountActivity.java
+++ b/core/java/android/accounts/ChooseTypeAndAccountActivity.java
@@ -22,7 +22,6 @@ import android.os.Parcelable;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
-import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
@@ -280,23 +279,16 @@ public class ChooseTypeAndAccountActivity extends Activity
if (selectedAddNewAccount) {
mSelectedItemIndex = mAccounts.size();
}
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "mSelectedItemIndex is " + mSelectedItemIndex);
- }
-
- ViewGroup buttonBar = (ViewGroup) findViewById(R.id.button_bar);
- if (buttonBar != null) {
- mOkButton = (Button) buttonBar.findViewById(android.R.id.button2);
- if (mSelectedItemIndex != SELECTED_ITEM_NONE) {
- // If caller specified a selectedAccount, then display that as selected and enable
- // the "OK" button by default.
- list.setSelection(mSelectedItemIndex);
- mOkButton.setEnabled(true);
- } else {
- // Otherwise "OK" button is disabled since nothing is pre-selected.
- mOkButton.setEnabled(false);
+ if (mSelectedItemIndex != SELECTED_ITEM_NONE) {
+ list.setItemChecked(mSelectedItemIndex, true);
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "List item " + mSelectedItemIndex + " should be selected");
}
}
+
+ // Only enable "OK" button if something has been selected.
+ mOkButton = (Button) findViewById(android.R.id.button2);
+ mOkButton.setEnabled(mSelectedItemIndex != SELECTED_ITEM_NONE);
}
@Override
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 17b19626c2e2..92b6f7216c00 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -1360,6 +1360,13 @@ public class ActivityManager {
public int lastTrimLevel;
/**
+ * Constant for {@link #importance}: this is a persistent process.
+ * Only used when reporting to process observers.
+ * @hide
+ */
+ public static final int IMPORTANCE_PERSISTENT = 50;
+
+ /**
* Constant for {@link #importance}: this process is running the
* foreground UI.
*/
diff --git a/core/java/android/app/IProcessObserver.aidl b/core/java/android/app/IProcessObserver.aidl
index 209429439120..e587912feaa5 100644
--- a/core/java/android/app/IProcessObserver.aidl
+++ b/core/java/android/app/IProcessObserver.aidl
@@ -20,6 +20,7 @@ package android.app;
oneway interface IProcessObserver {
void onForegroundActivitiesChanged(int pid, int uid, boolean foregroundActivities);
+ void onImportanceChanged(int pid, int uid, int importance);
void onProcessDied(int pid, int uid);
}
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 2782dcaab11c..e8f87bb4bc33 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -24,6 +24,7 @@ import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
+import android.content.ContextWrapper;
import android.content.CursorEntityIterator;
import android.content.Entity;
import android.content.EntityIterator;
@@ -7711,9 +7712,19 @@ public final class ContactsContract {
*/
public static void showQuickContact(Context context, Rect target, Uri lookupUri, int mode,
String[] excludeMimes) {
+ // When launching from an Activiy, we don't want to start a new task, but otherwise
+ // we *must* start a new task. (Otherwise startActivity() would crash.)
+ Context actualContext = context;
+ while ((actualContext instanceof ContextWrapper)
+ && !(actualContext instanceof Activity)) {
+ actualContext = ((ContextWrapper) actualContext).getBaseContext();
+ }
+ final int intentFlags = (actualContext instanceof Activity)
+ ? Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
+ : Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK;
+
// Launch pivot dialog through intent for now
- final Intent intent = new Intent(ACTION_QUICK_CONTACT)
- .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ final Intent intent = new Intent(ACTION_QUICK_CONTACT).addFlags(intentFlags);
intent.setData(lookupUri);
intent.setSourceBounds(target);
diff --git a/core/java/android/view/DisplayList.java b/core/java/android/view/DisplayList.java
index da666b5ecadb..a42e15677c39 100644
--- a/core/java/android/view/DisplayList.java
+++ b/core/java/android/view/DisplayList.java
@@ -62,6 +62,13 @@ public abstract class DisplayList {
public static final int STATUS_INVOKE = 0x2;
/**
+ * Indicates that the display list performed GL drawing operations.
+ *
+ * @see HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int)
+ */
+ public static final int STATUS_DREW = 0x4;
+
+ /**
* Starts recording the display list. All operations performed on the
* returned canvas are recorded and stored in this display list.
*
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index f986d15144f2..7e86ea3a542e 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -457,9 +457,11 @@ public abstract class HardwareRenderer {
* @param functor The native functor to insert in the execution queue.
*
* @see HardwareCanvas#callDrawGLFunction(int)
- * @see #detachFunctor(int)
+ * @see #detachFunctor(int)
+ *
+ * @return true if the functor was attached successfully
*/
- abstract void attachFunctor(View.AttachInfo attachInfo, int functor);
+ abstract boolean attachFunctor(View.AttachInfo attachInfo, int functor);
/**
* Initializes the hardware renderer for the specified surface and setup the
@@ -1102,6 +1104,7 @@ public abstract class HardwareRenderer {
onPreDraw(dirty);
+ int status = DisplayList.STATUS_DONE;
int saveCount = canvas.save();
callbacks.onHardwarePreDraw(canvas);
@@ -1135,7 +1138,7 @@ public abstract class HardwareRenderer {
drawDisplayListStartTime = System.nanoTime();
}
- int status = canvas.drawDisplayList(displayList, mRedrawClip,
+ status = canvas.drawDisplayList(displayList, mRedrawClip,
DisplayList.FLAG_CLIP_CHILDREN);
if (mProfileEnabled) {
@@ -1171,22 +1174,25 @@ public abstract class HardwareRenderer {
onPostDraw();
attachInfo.mIgnoreDirtyState = false;
+
+ if ((status & DisplayList.STATUS_DREW) == DisplayList.STATUS_DREW) {
- long eglSwapBuffersStartTime = 0;
- if (mProfileEnabled) {
- eglSwapBuffersStartTime = System.nanoTime();
- }
-
- sEgl.eglSwapBuffers(sEglDisplay, mEglSurface);
-
- if (mProfileEnabled) {
- long now = System.nanoTime();
- float total = (now - eglSwapBuffersStartTime) * 0.000001f;
- mProfileData[mProfileCurrentFrame + 2] = total;
+ long eglSwapBuffersStartTime = 0;
+ if (mProfileEnabled) {
+ eglSwapBuffersStartTime = System.nanoTime();
+ }
+
+ sEgl.eglSwapBuffers(sEglDisplay, mEglSurface);
+
+ if (mProfileEnabled) {
+ long now = System.nanoTime();
+ float total = (now - eglSwapBuffersStartTime) * 0.000001f;
+ mProfileData[mProfileCurrentFrame + 2] = total;
+ }
+
+ checkEglErrors();
}
- checkEglErrors();
-
return dirty == null;
}
}
@@ -1227,11 +1233,13 @@ public abstract class HardwareRenderer {
}
@Override
- void attachFunctor(View.AttachInfo attachInfo, int functor) {
+ boolean attachFunctor(View.AttachInfo attachInfo, int functor) {
if (mCanvas != null) {
mCanvas.attachFunctor(functor);
scheduleFunctors(attachInfo);
+ return true;
}
+ return false;
}
/**
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 551b6cc648c4..3138692deb5c 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -670,10 +670,11 @@ public final class ViewRootImpl implements ViewParent,
}
}
- public void attachFunctor(int functor) {
+ public boolean attachFunctor(int functor) {
if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled()) {
- mAttachInfo.mHardwareRenderer.attachFunctor(mAttachInfo, functor);
+ return mAttachInfo.mHardwareRenderer.attachFunctor(mAttachInfo, functor);
}
+ return false;
}
public void detachFunctor(int functor) {
diff --git a/core/java/android/view/VolumePanel.java b/core/java/android/view/VolumePanel.java
index 78984e08ff58..5ffc2c36d9d4 100644
--- a/core/java/android/view/VolumePanel.java
+++ b/core/java/android/view/VolumePanel.java
@@ -437,8 +437,10 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie
public void postVolumeChanged(int streamType, int flags) {
if (hasMessages(MSG_VOLUME_CHANGED)) return;
- if (mStreamControls == null) {
- createSliders();
+ synchronized (this) {
+ if (mStreamControls == null) {
+ createSliders();
+ }
}
removeMessages(MSG_FREE_RESOURCES);
obtainMessage(MSG_VOLUME_CHANGED, streamType, flags).sendToTarget();
@@ -450,8 +452,10 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie
public void postMuteChanged(int streamType, int flags) {
if (hasMessages(MSG_VOLUME_CHANGED)) return;
- if (mStreamControls == null) {
- createSliders();
+ synchronized (this) {
+ if (mStreamControls == null) {
+ createSliders();
+ }
}
removeMessages(MSG_FREE_RESOURCES);
obtainMessage(MSG_MUTE_CHANGED, streamType, flags).sendToTarget();
@@ -471,10 +475,12 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie
if (LOGD) Log.d(TAG, "onVolumeChanged(streamType: " + streamType + ", flags: " + flags + ")");
if ((flags & AudioManager.FLAG_SHOW_UI) != 0) {
- if (mActiveStreamType != streamType) {
- reorderSliders(streamType);
+ synchronized (this) {
+ if (mActiveStreamType != streamType) {
+ reorderSliders(streamType);
+ }
+ onShowVolumeChanged(streamType, flags);
}
- onShowVolumeChanged(streamType, flags);
}
if ((flags & AudioManager.FLAG_PLAY_SOUND) != 0 && ! mRingIsSilent) {
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index 65fd59a9f369..d1da53be517e 100644
--- a/core/java/android/webkit/WebViewClassic.java
+++ b/core/java/android/webkit/WebViewClassic.java
@@ -7827,15 +7827,18 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
mSendScrollEvent = true;
int functor = 0;
+ boolean forceInval = isPictureAfterFirstLayout;
ViewRootImpl viewRoot = mWebView.getViewRootImpl();
if (mWebView.isHardwareAccelerated() && viewRoot != null) {
functor = nativeGetDrawGLFunction(mNativeClass);
if (functor != 0) {
- viewRoot.attachFunctor(functor);
+ // force an invalidate if functor attach not successful
+ forceInval |= !viewRoot.attachFunctor(functor);
}
}
if (functor == 0
+ || forceInval
|| mWebView.getLayerType() != View.LAYER_TYPE_NONE) {
// invalidate the screen so that the next repaint will show new content
// TODO: partial invalidate
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index dae9c6a43a94..edffb5e9c7aa 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -57,7 +57,6 @@ import android.view.ViewConfiguration;
import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.ViewParent;
-import android.view.ViewRootImpl;
import android.view.ViewTreeObserver;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
@@ -1331,43 +1330,42 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
@Override
public void addFocusables(ArrayList<View> views, int direction, int focusableMode) {
- if ((focusableMode & FOCUSABLES_ACCESSIBILITY) == FOCUSABLES_ACCESSIBILITY
- && (direction == ACCESSIBILITY_FOCUS_FORWARD
- || direction == ACCESSIBILITY_FOCUS_BACKWARD)) {
- if (canTakeAccessibilityFocusFromHover()) {
- views.add(this);
+ if ((focusableMode & FOCUSABLES_ACCESSIBILITY) == FOCUSABLES_ACCESSIBILITY) {
+ switch(direction) {
+ case ACCESSIBILITY_FOCUS_BACKWARD: {
+ View focusable = (getChildCount() > 0) ? getChildAt(getChildCount() - 1) : this;
+ if (focusable.canTakeAccessibilityFocusFromHover()) {
+ views.add(focusable);
+ }
+ } return;
+ case ACCESSIBILITY_FOCUS_FORWARD: {
+ if (canTakeAccessibilityFocusFromHover()) {
+ views.add(this);
+ }
+ } return;
}
- } else {
super.addFocusables(views, direction, focusableMode);
}
}
@Override
public View focusSearch(int direction) {
- return focusSearch(null, direction);
+ return focusSearch(this, direction);
}
@Override
public View focusSearch(View focused, int direction) {
switch (direction) {
case ACCESSIBILITY_FOCUS_FORWARD: {
- ViewRootImpl viewRootImpl = getViewRootImpl();
- if (viewRootImpl == null) {
- return null;
- }
- View currentFocus = viewRootImpl.getAccessibilityFocusedHost();
- if (currentFocus == null) {
- return super.focusSearch(this, direction);
- }
- // If we have the focus try giving it to the first child.
- if (currentFocus == this) {
+ // If we are the focused view try giving it to the first child.
+ if (focused == this) {
if (getChildCount() > 0) {
return getChildAt(0);
}
return super.focusSearch(this, direction);
}
- // Find the item that has accessibility focus.
- final int currentPosition = getPositionForView(currentFocus);
+ // Find the item that has the focused view.
+ final int currentPosition = getPositionForView(focused);
if (currentPosition < 0 || currentPosition >= getCount()) {
return super.focusSearch(this, direction);
}
@@ -1376,9 +1374,9 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
if (currentItem instanceof ViewGroup) {
ViewGroup currentItemGroup = (ViewGroup) currentItem;
View nextFocus = FocusFinder.getInstance().findNextFocus(currentItemGroup,
- currentFocus, direction);
+ focused, direction);
if (nextFocus != null && nextFocus != currentItemGroup
- && nextFocus != currentFocus) {
+ && nextFocus != focused) {
return nextFocus;
}
}
@@ -1386,50 +1384,54 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
final int nextPosition = currentPosition - getFirstVisiblePosition() + 1;
if (nextPosition < getChildCount()) {
return getChildAt(nextPosition);
- } else {
- return super.focusSearch(this, direction);
}
+ // No next item start searching from the list.
+ return super.focusSearch(this, direction);
}
case ACCESSIBILITY_FOCUS_BACKWARD: {
- ViewRootImpl viewRootImpl = getViewRootImpl();
- if (viewRootImpl == null) {
- return null;
- }
- View currentFocus = viewRootImpl.getAccessibilityFocusedHost();
- if (currentFocus == null) {
- return super.focusSearch(this, direction);
- }
- // If we have the focus do a generic search.
- if (currentFocus == this) {
- final int lastChildIndex = getChildCount() - 1;
- if (lastChildIndex >= 0) {
- return getChildAt(lastChildIndex);
+ // If we are the focused search from the view that is
+ // as closer to the bottom as possible.
+ if (focused == this) {
+ final int childCount = getChildCount();
+ if (childCount > 0) {
+ return super.focusSearch(getChildAt(childCount - 1), direction);
}
return super.focusSearch(this, direction);
}
- // Find the item that has accessibility focus.
- final int currentPosition = getPositionForView(currentFocus);
+ // Find the item that has the focused view.
+ final int currentPosition = getPositionForView(focused);
if (currentPosition < 0 || currentPosition >= getCount()) {
return super.focusSearch(this, direction);
}
- // Try to advance focus in the current item.
+
View currentItem = getChildAt(currentPosition - getFirstVisiblePosition());
+
+ // If a list item is the focused view we try to find a view
+ // in the previous item since in reverse the item contents
+ // get accessibility focus before the item itself.
+ if (currentItem == focused) {
+ // This list gets accessibility focus after the last first item.
+ final int previoustPosition = currentPosition - getFirstVisiblePosition() - 1;
+ if (previoustPosition < 0) {
+ return this;
+ }
+ currentItem = getChildAt(previoustPosition);
+ focused = null;
+ }
+
+ // Search for into the item.
if (currentItem instanceof ViewGroup) {
ViewGroup currentItemGroup = (ViewGroup) currentItem;
View nextFocus = FocusFinder.getInstance().findNextFocus(currentItemGroup,
- currentFocus, direction);
+ focused, direction);
if (nextFocus != null && nextFocus != currentItemGroup
- && nextFocus != currentFocus) {
+ && nextFocus != focused) {
return nextFocus;
}
}
- // Try to move focus to the previous item.
- final int nextPosition = currentPosition - getFirstVisiblePosition() - 1;
- if (nextPosition >= 0) {
- return getChildAt(nextPosition);
- } else {
- return super.focusSearch(this, direction);
- }
+
+ // If not item content wants focus we give it to the item.
+ return currentItem;
}
}
return super.focusSearch(focused, direction);
diff --git a/core/jni/android_view_DisplayEventReceiver.cpp b/core/jni/android_view_DisplayEventReceiver.cpp
index d80bfb339040..89058a741e5c 100644
--- a/core/jni/android_view_DisplayEventReceiver.cpp
+++ b/core/jni/android_view_DisplayEventReceiver.cpp
@@ -42,12 +42,13 @@ static struct {
} gDisplayEventReceiverClassInfo;
-class NativeDisplayEventReceiver : public RefBase {
+class NativeDisplayEventReceiver : public LooperCallback {
public:
NativeDisplayEventReceiver(JNIEnv* env,
jobject receiverObj, const sp<MessageQueue>& messageQueue);
status_t initialize();
+ void dispose();
status_t scheduleVsync();
protected:
@@ -59,7 +60,7 @@ private:
DisplayEventReceiver mReceiver;
bool mWaitingForVsync;
- static int handleReceiveCallback(int receiveFd, int events, void* data);
+ virtual int handleEvent(int receiveFd, int events, void* data);
bool readLastVsyncMessage(nsecs_t* outTimestamp, uint32_t* outCount);
};
@@ -72,12 +73,6 @@ NativeDisplayEventReceiver::NativeDisplayEventReceiver(JNIEnv* env,
}
NativeDisplayEventReceiver::~NativeDisplayEventReceiver() {
- ALOGV("receiver %p ~ Disposing display event receiver.", this);
-
- if (!mReceiver.initCheck()) {
- mMessageQueue->getLooper()->removeFd(mReceiver.getFd());
- }
-
JNIEnv* env = AndroidRuntime::getJNIEnv();
env->DeleteGlobalRef(mReceiverObjGlobal);
}
@@ -90,13 +85,21 @@ status_t NativeDisplayEventReceiver::initialize() {
}
int rc = mMessageQueue->getLooper()->addFd(mReceiver.getFd(), 0, ALOOPER_EVENT_INPUT,
- handleReceiveCallback, this);
+ this, NULL);
if (rc < 0) {
return UNKNOWN_ERROR;
}
return OK;
}
+void NativeDisplayEventReceiver::dispose() {
+ ALOGV("receiver %p ~ Disposing display event receiver.", this);
+
+ if (!mReceiver.initCheck()) {
+ mMessageQueue->getLooper()->removeFd(mReceiver.getFd());
+ }
+}
+
status_t NativeDisplayEventReceiver::scheduleVsync() {
if (!mWaitingForVsync) {
ALOGV("receiver %p ~ Scheduling vsync.", this);
@@ -117,9 +120,7 @@ status_t NativeDisplayEventReceiver::scheduleVsync() {
return OK;
}
-int NativeDisplayEventReceiver::handleReceiveCallback(int receiveFd, int events, void* data) {
- sp<NativeDisplayEventReceiver> r = static_cast<NativeDisplayEventReceiver*>(data);
-
+int NativeDisplayEventReceiver::handleEvent(int receiveFd, int events, void* data) {
if (events & (ALOOPER_EVENT_ERROR | ALOOPER_EVENT_HANGUP)) {
ALOGE("Display event receiver pipe was closed or an error occurred. "
"events=0x%x", events);
@@ -135,23 +136,23 @@ int NativeDisplayEventReceiver::handleReceiveCallback(int receiveFd, int events,
// Drain all pending events, keep the last vsync.
nsecs_t vsyncTimestamp;
uint32_t vsyncCount;
- if (!r->readLastVsyncMessage(&vsyncTimestamp, &vsyncCount)) {
- ALOGV("receiver %p ~ Woke up but there was no vsync pulse!", data);
+ if (!readLastVsyncMessage(&vsyncTimestamp, &vsyncCount)) {
+ ALOGV("receiver %p ~ Woke up but there was no vsync pulse!", this);
return 1; // keep the callback, did not obtain a vsync pulse
}
ALOGV("receiver %p ~ Vsync pulse: timestamp=%lld, count=%d",
- data, vsyncTimestamp, vsyncCount);
- r->mWaitingForVsync = false;
+ this, vsyncTimestamp, vsyncCount);
+ mWaitingForVsync = false;
JNIEnv* env = AndroidRuntime::getJNIEnv();
- ALOGV("receiver %p ~ Invoking vsync handler.", data);
- env->CallVoidMethod(r->mReceiverObjGlobal,
+ ALOGV("receiver %p ~ Invoking vsync handler.", this);
+ env->CallVoidMethod(mReceiverObjGlobal,
gDisplayEventReceiverClassInfo.dispatchVsync, vsyncTimestamp, vsyncCount);
- ALOGV("receiver %p ~ Returned from vsync handler.", data);
+ ALOGV("receiver %p ~ Returned from vsync handler.", this);
- r->mMessageQueue->raiseAndClearException(env, "dispatchVsync");
+ mMessageQueue->raiseAndClearException(env, "dispatchVsync");
return 1; // keep the callback
}
@@ -201,6 +202,7 @@ static jint nativeInit(JNIEnv* env, jclass clazz, jobject receiverObj,
static void nativeDispose(JNIEnv* env, jclass clazz, jint receiverPtr) {
sp<NativeDisplayEventReceiver> receiver =
reinterpret_cast<NativeDisplayEventReceiver*>(receiverPtr);
+ receiver->dispose();
receiver->decStrong(gDisplayEventReceiverClassInfo.clazz); // drop reference held by the object
}
diff --git a/core/jni/android_view_InputEventReceiver.cpp b/core/jni/android_view_InputEventReceiver.cpp
index 08e08b94bcf8..9501cf225293 100644
--- a/core/jni/android_view_InputEventReceiver.cpp
+++ b/core/jni/android_view_InputEventReceiver.cpp
@@ -44,13 +44,14 @@ static struct {
} gInputEventReceiverClassInfo;
-class NativeInputEventReceiver : public RefBase {
+class NativeInputEventReceiver : public LooperCallback {
public:
NativeInputEventReceiver(JNIEnv* env,
jobject receiverObj, const sp<InputChannel>& inputChannel,
const sp<MessageQueue>& messageQueue);
status_t initialize();
+ void dispose();
status_t finishInputEvent(uint32_t seq, bool handled);
status_t consumeEvents(JNIEnv* env, bool consumeBatches, nsecs_t frameTime);
@@ -68,7 +69,7 @@ private:
return mInputConsumer.getChannel()->getName().string();
}
- static int handleReceiveCallback(int receiveFd, int events, void* data);
+ virtual int handleEvent(int receiveFd, int events, void* data);
};
@@ -84,23 +85,24 @@ NativeInputEventReceiver::NativeInputEventReceiver(JNIEnv* env,
}
NativeInputEventReceiver::~NativeInputEventReceiver() {
-#if DEBUG_DISPATCH_CYCLE
- ALOGD("channel '%s' ~ Disposing input event receiver.", getInputChannelName());
-#endif
-
- mMessageQueue->getLooper()->removeFd(mInputConsumer.getChannel()->getFd());
-
JNIEnv* env = AndroidRuntime::getJNIEnv();
env->DeleteGlobalRef(mReceiverObjGlobal);
}
status_t NativeInputEventReceiver::initialize() {
int receiveFd = mInputConsumer.getChannel()->getFd();
- mMessageQueue->getLooper()->addFd(
- receiveFd, 0, ALOOPER_EVENT_INPUT, handleReceiveCallback, this);
+ mMessageQueue->getLooper()->addFd(receiveFd, 0, ALOOPER_EVENT_INPUT, this, NULL);
return OK;
}
+void NativeInputEventReceiver::dispose() {
+#if DEBUG_DISPATCH_CYCLE
+ ALOGD("channel '%s' ~ Disposing input event receiver.", getInputChannelName());
+#endif
+
+ mMessageQueue->getLooper()->removeFd(mInputConsumer.getChannel()->getFd());
+}
+
status_t NativeInputEventReceiver::finishInputEvent(uint32_t seq, bool handled) {
#if DEBUG_DISPATCH_CYCLE
ALOGD("channel '%s' ~ Finished input event.", getInputChannelName());
@@ -114,24 +116,22 @@ status_t NativeInputEventReceiver::finishInputEvent(uint32_t seq, bool handled)
return status;
}
-int NativeInputEventReceiver::handleReceiveCallback(int receiveFd, int events, void* data) {
- sp<NativeInputEventReceiver> r = static_cast<NativeInputEventReceiver*>(data);
-
+int NativeInputEventReceiver::handleEvent(int receiveFd, int events, void* data) {
if (events & (ALOOPER_EVENT_ERROR | ALOOPER_EVENT_HANGUP)) {
ALOGE("channel '%s' ~ Publisher closed input channel or an error occurred. "
- "events=0x%x", r->getInputChannelName(), events);
+ "events=0x%x", getInputChannelName(), events);
return 0; // remove the callback
}
if (!(events & ALOOPER_EVENT_INPUT)) {
ALOGW("channel '%s' ~ Received spurious callback for unhandled poll event. "
- "events=0x%x", r->getInputChannelName(), events);
+ "events=0x%x", getInputChannelName(), events);
return 1;
}
JNIEnv* env = AndroidRuntime::getJNIEnv();
- status_t status = r->consumeEvents(env, false /*consumeBatches*/, -1);
- r->mMessageQueue->raiseAndClearException(env, "handleReceiveCallback");
+ status_t status = consumeEvents(env, false /*consumeBatches*/, -1);
+ mMessageQueue->raiseAndClearException(env, "handleReceiveCallback");
return status == OK || status == NO_MEMORY ? 1 : 0;
}
@@ -256,6 +256,7 @@ static jint nativeInit(JNIEnv* env, jclass clazz, jobject receiverObj,
static void nativeDispose(JNIEnv* env, jclass clazz, jint receiverPtr) {
sp<NativeInputEventReceiver> receiver =
reinterpret_cast<NativeInputEventReceiver*>(receiverPtr);
+ receiver->dispose();
receiver->decStrong(gInputEventReceiverClassInfo.clazz); // drop reference held by the object
}
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index fd3268554ba3..7c9351c05766 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -855,12 +855,9 @@
<string name="searchview_description_clear" msgid="1330281990951833033">"Maak navraag skoon"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"Dien navraag in"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"Stemsoektog"</string>
- <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) -->
- <skip />
- <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) -->
- <skip />
- <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) -->
- <skip />
+ <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Wil jy Ontek-met-raak aktiveer?"</string>
+ <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> wil Ontdek-met-raak aktiveer. Wanneer Ontek-met-raak aangeskakel is, kan jy beskrywings van wat onder jou vinger is hoor of sien, of jy kan gebare uitvoer om interaksie met die tablet te hê."</string>
+ <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> wil Ontdek-met-raak aktiveer. Wanneer Ontek-met-raak aangeskakel is, kan jy beskrywings van wat onder jou vinger is hoor of sien, of jy kan gebare uitvoer om interaksie met die foon te hê ."</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 maand gelede"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Voor 1 maand gelede"</string>
<plurals name="num_seconds_ago">
@@ -1127,10 +1124,8 @@
<string name="configure_input_methods" msgid="9091652157722495116">"Stel invoermetodes op"</string>
<string name="use_physical_keyboard" msgid="6203112478095117625">"Fisiese sleutelbord"</string>
<string name="hardware" msgid="7517821086888990278">"Hardeware"</string>
- <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) -->
- <skip />
- <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) -->
- <skip />
+ <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Kies sleutelborduitleg"</string>
+ <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Raak om \'n sleutelborduitleg te kies."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidate"</u></string>
@@ -1239,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Doen vir eers niks nie"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Kies \'n rekening"</string>
<string name="add_account_label" msgid="2935267344849993553">"Voeg \'n rekening by"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Watter rekening wil jy gebruik?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Voeg rekening by"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Vermeerder"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Verminder"</string>
@@ -1324,6 +1318,5 @@
<string name="launchBrowserDefault" msgid="2057951947297614725">"Begin webblaaier?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Aanvaar oproep?"</string>
<string name="activity_resolver_use_always" msgid="8017770747801494933">"Altyd"</string>
- <!-- no translation found for activity_resolver_use_once (2404644797149173758) -->
- <skip />
+ <string name="activity_resolver_use_once" msgid="2404644797149173758">"Net een keer"</string>
</resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index fb11af3c21e7..18cbf43dbcf5 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"ለአሁን ምንም አታድርግ"</string>
<string name="choose_account_label" msgid="5655203089746423927">"መለያ ምረጥ"</string>
<string name="add_account_label" msgid="2935267344849993553">"መለያ አክል"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"የትኛውን መለያ መጠቀም ትፈልጋለህ?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"መለያ አክል"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"ጨምር"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"ቀንስ"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index d70aec8857a2..171b5d992f66 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"عدم تنفيذ أي شيء الآن"</string>
<string name="choose_account_label" msgid="5655203089746423927">"اختيار حساب"</string>
<string name="add_account_label" msgid="2935267344849993553">"إضافة حساب"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"ما الحساب الذي تريد استخدامه؟"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"إضافة حساب"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"زيادة"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"تقليل"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 40686100bb50..ca5d5f6b285d 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Нічога зараз не рабіць"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Выберыце ўліковы запіс"</string>
<string name="add_account_label" msgid="2935267344849993553">"Дадаць уліковы запіс"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Які ўліковы запіс вы жадаеце выкарыстоўваць?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Дадаць уліковы запіс"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Павялічыць"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Паменшыць"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 086d33a712f3..709cc1b1e8d1 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Да не се прави нищо засега"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Избор на профил"</string>
<string name="add_account_label" msgid="2935267344849993553">"Добавяне на профил"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Кой профил искате да използвате?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Добавяне на профил"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Увеличаване"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Намаляване"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 4190bdba2b0a..d02008b71962 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"No facis res per ara"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Tria un compte"</string>
<string name="add_account_label" msgid="2935267344849993553">"Addició d\'un compte"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Quin compte vols utilitzar?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Afegeix un compte"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Incrementa"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Redueix"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index ad25a3e67f0e..98c7ac53af98 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Zatím nic neprovádět."</string>
<string name="choose_account_label" msgid="5655203089746423927">"Vybrat účet"</string>
<string name="add_account_label" msgid="2935267344849993553">"Přidat účet"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Který účet chcete použít?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Přidat účet"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Zvýšit"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Snížit"</string>
@@ -1324,6 +1323,5 @@
<string name="launchBrowserDefault" msgid="2057951947297614725">"Spustit prohlížeč?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Přijmout hovor?"</string>
<string name="activity_resolver_use_always" msgid="8017770747801494933">"Vždy"</string>
- <!-- no translation found for activity_resolver_use_once (2404644797149173758) -->
- <skip />
+ <string name="activity_resolver_use_once" msgid="2404644797149173758">"Jen jednou"</string>
</resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 9dc89a0eb306..1704fe1cde03 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -855,12 +855,9 @@
<string name="searchview_description_clear" msgid="1330281990951833033">"Ryd forespørgslen"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"Indsend forespørgslen"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"Stemmesøgning"</string>
- <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) -->
- <skip />
- <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) -->
- <skip />
- <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) -->
- <skip />
+ <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Vil du aktivere Udforsk ved berøring?"</string>
+ <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ønsker at aktivere Udforsk ved berøring. Når Udforsk ved berøring er tændt, kan du høre eller se beskrivelser af, hvad der er under din finger eller udføre bevægelser for at interagere med tabletten."</string>
+ <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ønsker at aktivere Udforsk ved berøring. Når Udforsk ved berøring er aktiveret, kan du høre eller se beskrivelser af, hvad der er under din finger, eller udføre bevægelser for at interagere med telefonen."</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"For 1 måned siden"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Før for 1 måned siden"</string>
<plurals name="num_seconds_ago">
@@ -1127,10 +1124,8 @@
<string name="configure_input_methods" msgid="9091652157722495116">"Konfigurer inputmetoder"</string>
<string name="use_physical_keyboard" msgid="6203112478095117625">"Fysisk tastatur"</string>
<string name="hardware" msgid="7517821086888990278">"Hardware"</string>
- <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) -->
- <skip />
- <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) -->
- <skip />
+ <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Vælg tastaturlayout"</string>
+ <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Tryk for at vælge et tastaturlayout."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidater"</u></string>
@@ -1239,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Gør ikke noget lige nu."</string>
<string name="choose_account_label" msgid="5655203089746423927">"Vælg en konto"</string>
<string name="add_account_label" msgid="2935267344849993553">"Tilføj en konto"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Hvilken konto vil du bruge?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Tilføj konto"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Højere"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Lavere"</string>
@@ -1324,6 +1318,5 @@
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vil du starte browseren?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vil du besvare opkaldet?"</string>
<string name="activity_resolver_use_always" msgid="8017770747801494933">"Altid"</string>
- <!-- no translation found for activity_resolver_use_once (2404644797149173758) -->
- <skip />
+ <string name="activity_resolver_use_once" msgid="2404644797149173758">"Kun én gang"</string>
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index ec8ca3e6fb5b..a326e2dca13e 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Im Moment nichts unternehmen"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Konto auswählen"</string>
<string name="add_account_label" msgid="2935267344849993553">"Konto hinzufügen"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Welches Konto möchten Sie verwenden?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Konto hinzufügen"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Verlängern"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Verringern"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 8cde21f2ac05..53a64fc4b86e 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Να μην γίνει καμία ενέργεια τώρα."</string>
<string name="choose_account_label" msgid="5655203089746423927">"Επιλέξτε λογαριασμό"</string>
<string name="add_account_label" msgid="2935267344849993553">"Προσθήκη λογαριασμού"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Ποιον λογαριασμό θέλετε να χρησιμοποιήσετε;"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Προσθήκη λογαριασμού"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Αύξηση"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Μείωση"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 4ad7daf9cb38..18a682708892 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Do nothing for now"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Choose an account"</string>
<string name="add_account_label" msgid="2935267344849993553">"Add an account"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Which account do you want to use?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Add account"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Increase"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Decrease"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 4d861fc918f6..1015e65490e7 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"No hacer nada por ahora"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Seleccionar una cuenta"</string>
<string name="add_account_label" msgid="2935267344849993553">"Agregar una cuenta"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"¿Qué cuenta quieres usar?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Agregar una cuenta"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Aumentar"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Reducir"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index f5d879522a48..e53e3bcbe594 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"No hacer nada por ahora"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Seleccionar una cuenta"</string>
<string name="add_account_label" msgid="2935267344849993553">"Añadir una cuenta"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"¿Qué cuenta quieres usar?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Añadir cuenta"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Aumentar"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Reducir"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index af4b160f876f..89fc8f4f5905 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Ära tee praegu midagi"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Konto valimine"</string>
<string name="add_account_label" msgid="2935267344849993553">"Konto lisamine"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Millist kontot soovite kasutada?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Lisa konto"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Suurendamine"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Vähendamine"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index cb83ba3d9193..eaf784971864 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"اکنون کاری انجام نشود"</string>
<string name="choose_account_label" msgid="5655203089746423927">"انتخاب حساب"</string>
<string name="add_account_label" msgid="2935267344849993553">"افزودن یک حساب"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"کدام حساب را می‎خواهید استفاده کنید؟"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"افزودن حساب"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"افزایش"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"کاهش"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 9e0e8e6da4bc..1ec3a3edfe35 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Älä tee mitään"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Valitse tili"</string>
<string name="add_account_label" msgid="2935267344849993553">"Lisää tili"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Mitä tiliä haluat käyttää?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Lisää tili"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Lisää"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Vähennä"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index f757e274a479..d7cb12c72132 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Ne rien faire pour l\'instant"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Sélectionnez un compte"</string>
<string name="add_account_label" msgid="2935267344849993553">"Ajouter un compte"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Quel compte souhaitez-vous utiliser ?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Ajouter un compte"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Augmenter"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Diminuer"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 47656b6718e2..2a83a16e1e08 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"फिलहाल कुछ न करें"</string>
<string name="choose_account_label" msgid="5655203089746423927">"कोई खाता चुनें"</string>
<string name="add_account_label" msgid="2935267344849993553">"कोई खाता जोड़ें"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"आप कौन-सा खाता उपयोग करना चाहते हैं?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"खाता जोड़ें"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"बढ़ाएं"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"कम करें"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 98f736ba3305..d8bd15ff79c1 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Za sada nemoj ništa učiniti"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Odaberite račun"</string>
<string name="add_account_label" msgid="2935267344849993553">"Dodajte račun"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Koji račun želite upotrijebiti?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Dodaj račun"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Povećavanje"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Smanjivanje"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 239bfe4d178d..188f6d75249f 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Egyelőre ne legyen semmilyen művelet"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Válasszon fiókot"</string>
<string name="add_account_label" msgid="2935267344849993553">"Fiók hozzáadása"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Melyik fiókot szeretné használni?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Fiók hozzáadása"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Növelés"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Csökkentés"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index b2879e9458e3..fda15f241572 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Jangan lakukan apa pun untuk saat ini"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Pilih akun"</string>
<string name="add_account_label" msgid="2935267344849993553">"Tambahkan akun"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Akun mana yang ingin Anda gunakan?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Tambahkan akun"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Tambah"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Kurangi"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index ffcf6bb2392a..92f4cef60773 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -855,12 +855,9 @@
<string name="searchview_description_clear" msgid="1330281990951833033">"Cancella query"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"Invia query"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"Ricerca vocale"</string>
- <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) -->
- <skip />
- <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) -->
- <skip />
- <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) -->
- <skip />
+ <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Attivare Esplora al tocco?"</string>
+ <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vuole attivare la funzione Esplora al tocco. Quando la funzione Esplora al tocco è attiva, puoi ascoltare o visualizzare le descrizioni di ciò che stai toccando oppure interagire con il tablet tramite gesti."</string>
+ <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vuole attivare la funzione Esplora al tocco. Quando la funzione Esplora al tocco è attiva, puoi ascoltare o visualizzare le descrizioni di ciò che stai toccando oppure interagire con il telefono tramite gesti."</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 mese fa"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Oltre 1 mese fa"</string>
<plurals name="num_seconds_ago">
@@ -1127,10 +1124,8 @@
<string name="configure_input_methods" msgid="9091652157722495116">"Configura metodi di immissione"</string>
<string name="use_physical_keyboard" msgid="6203112478095117625">"Tastiera fisica"</string>
<string name="hardware" msgid="7517821086888990278">"Hardware"</string>
- <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) -->
- <skip />
- <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) -->
- <skip />
+ <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Seleziona layout tastiera"</string>
+ <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Tocca per selezionare un layout di tastiera."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidati"</u></string>
@@ -1239,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Non fare nulla per ora"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Scegli un account"</string>
<string name="add_account_label" msgid="2935267344849993553">"Aggiungi un account"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Quale account vuoi usare?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Aggiungi account"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Aumenta"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Riduci"</string>
@@ -1324,6 +1318,5 @@
<string name="launchBrowserDefault" msgid="2057951947297614725">"Avviare l\'applicazione Browser?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Accettare la chiamata?"</string>
<string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string>
- <!-- no translation found for activity_resolver_use_once (2404644797149173758) -->
- <skip />
+ <string name="activity_resolver_use_once" msgid="2404644797149173758">"Solo una volta"</string>
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 265da954371c..54b762003a8e 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"אל תעשה דבר כרגע"</string>
<string name="choose_account_label" msgid="5655203089746423927">"בחר חשבון"</string>
<string name="add_account_label" msgid="2935267344849993553">"הוסף חשבון"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"באיזה חשבון ברצונך להשתמש?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"הוסף חשבון"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"הוסף"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"הפחת"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 176a6b5ccc0a..604e1636f623 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"今は何もしない"</string>
<string name="choose_account_label" msgid="5655203089746423927">"アカウントの選択"</string>
<string name="add_account_label" msgid="2935267344849993553">"アカウントを追加"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"どのアカウントを使用しますか?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"アカウントを追加"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"進めます"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"戻します"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 4e3fe51ec5b1..64ef6a34c394 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"나중에 작업"</string>
<string name="choose_account_label" msgid="5655203089746423927">"계정 선택"</string>
<string name="add_account_label" msgid="2935267344849993553">"계정 추가"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"사용할 계정을 선택하세요."</string>
<string name="add_account_button_label" msgid="3611982894853435874">"계정 추가"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"늘리기"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"줄이기"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 52b7a4befbc9..fe4683da5b48 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Kol kas nieko nedaryti"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Pasirinkti paskyrą"</string>
<string name="add_account_label" msgid="2935267344849993553">"Pridėti paskyrą"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Kurią paskyrą norite naudoti?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Pridėti paskyrą"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Padidinti"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Sumažinti"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 1fb76f67b08a..263323c7ba1e 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Pagaidām neveiciet nekādas darbības."</string>
<string name="choose_account_label" msgid="5655203089746423927">"Izvēlēties kontu"</string>
<string name="add_account_label" msgid="2935267344849993553">"Pievienot kontu"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Kuru kontu vēlaties izmantot?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Pievienot kontu"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Palielināt"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Samazināt"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 2168b9a85976..295fae2d9a63 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Jangan lakukan apa-apa sekarang"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Pilih akaun"</string>
<string name="add_account_label" msgid="2935267344849993553">"Tambah akaun"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Akaun mana yang mahu anda gunakan?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Tambah akaun"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Tingkatkan"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Kurangkan"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 47935fde8ca6..6ed825fb56c9 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -748,7 +748,7 @@
<string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Pause-knappen"</string>
<string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Avspillingsknappen"</string>
<string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Stopp-knappen"</string>
- <string name="emergency_calls_only" msgid="6733978304386365407">"Kun nødanrop"</string>
+ <string name="emergency_calls_only" msgid="6733978304386365407">"Bare nødanrop"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Nettverk ikke tillatt"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kortet er PUK-låst."</string>
<string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Les i brukerhåndboken eller kontakt brukerstøtten."</string>
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Ikke gjør noe nå"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Velg en konto"</string>
<string name="add_account_label" msgid="2935267344849993553">"Legg til en konto"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Hvilken konto vil du bruke?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Legg til konto"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Øk"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Reduser"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 4ad7180e6d5e..b92c38cd848a 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Nu niets doen."</string>
<string name="choose_account_label" msgid="5655203089746423927">"Een account selecteren"</string>
<string name="add_account_label" msgid="2935267344849993553">"Een account toevoegen"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Welk account wilt u gebruiken?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Account toevoegen"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Verhogen"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Verlagen"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index a1cbe5a2a908..ce284d0f71b7 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Nie wykonuj teraz żadnych czynności."</string>
<string name="choose_account_label" msgid="5655203089746423927">"Wybierz konto."</string>
<string name="add_account_label" msgid="2935267344849993553">"Dodaj konto"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Którego konta chcesz użyć?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Dodaj konto"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Zwiększ"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Zmniejsz"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 38ce3acbe246..956cadce0aac 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Não fazer nada por agora"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Selecionar uma conta"</string>
<string name="add_account_label" msgid="2935267344849993553">"Adicionar uma conta"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Que conta pretende utilizar?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Adicionar conta"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Aumentar"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Diminuir"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 3acafb173d6f..e9cf75bf7ead 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Não fazer nada por enquanto"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Escolha uma conta"</string>
<string name="add_account_label" msgid="2935267344849993553">"Adicionar uma conta"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Qual conta você deseja usar?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Adicionar conta"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Aumentar"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Diminuir"</string>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 397b0953aee5..fdf8159e5340 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -1915,8 +1915,6 @@
<skip />
<!-- no translation found for add_account_label (2935267344849993553) -->
<skip />
- <!-- no translation found for choose_account_text (6303348737197849675) -->
- <skip />
<!-- no translation found for add_account_button_label (3611982894853435874) -->
<skip />
<!-- no translation found for number_picker_increment_button (2412072272832284313) -->
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 52fd28ec8b64..32b6f30369aa 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Nu trebuie să luaţi nicio măsură deocamdată"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Alegeţi un cont"</string>
<string name="add_account_label" msgid="2935267344849993553">"Adăugaţi un cont"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Ce cont doriţi să utilizaţi?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Adăugaţi un cont"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Creşteţi"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Reduceţi"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 75face45285d..f846198f5883 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -855,12 +855,9 @@
<string name="searchview_description_clear" msgid="1330281990951833033">"Удалить запрос"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"Отправить запрос"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"Голосовой поиск"</string>
- <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) -->
- <skip />
- <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) -->
- <skip />
- <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) -->
- <skip />
+ <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Включить \"Изучение касанием\"?"</string>
+ <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> хочет включить функцию \"Изучение касанием\". Она позволяет прослушивать или просматривать описание элементов, которых вы касаетесь, и управлять планшетным ПК с помощью жестов."</string>
+ <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> хочет включить функцию \"Изучение касанием\". Она позволяет прослушивать или просматривать описание элементов, которых вы касаетесь, и управлять телефоном с помощью жестов."</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 месяц назад"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Более месяца назад"</string>
<plurals name="num_seconds_ago">
@@ -1127,10 +1124,8 @@
<string name="configure_input_methods" msgid="9091652157722495116">"Настройка способов ввода"</string>
<string name="use_physical_keyboard" msgid="6203112478095117625">"Физическая клавиатура"</string>
<string name="hardware" msgid="7517821086888990278">"Аппаратура"</string>
- <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) -->
- <skip />
- <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) -->
- <skip />
+ <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Выберите раскладку клавиатуры"</string>
+ <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Нажмите, чтобы выбрать раскладку клавиатуры."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"варианты"</u></string>
@@ -1239,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Ничего не делать"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Выберите аккаунт"</string>
<string name="add_account_label" msgid="2935267344849993553">"Добавить аккаунт"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Выберите аккаунт"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Добавить аккаунт"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Увеличить"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Уменьшить"</string>
@@ -1324,6 +1318,5 @@
<string name="launchBrowserDefault" msgid="2057951947297614725">"Запустить браузер?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Ответить?"</string>
<string name="activity_resolver_use_always" msgid="8017770747801494933">"Всегда"</string>
- <!-- no translation found for activity_resolver_use_once (2404644797149173758) -->
- <skip />
+ <string name="activity_resolver_use_once" msgid="2404644797149173758">"Только один раз"</string>
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 6f1c5e7ce8e3..6c5ea3266ab9 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Teraz nič nerobte"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Zvoliť účet"</string>
<string name="add_account_label" msgid="2935267344849993553">"Pridať účet"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Ktorý účet chcete použiť?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Pridať účet"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Zvýšiť"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Znížiť"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 2e019d4e2442..049c1d8b86b5 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Za zdaj ne naredi ničesar"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Izberite račun"</string>
<string name="add_account_label" msgid="2935267344849993553">"Dodajanje računa"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Kateri račun želite uporabiti?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Dodaj račun"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Več"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Manj"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 6f067a132b03..fa7da0100224 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Не ради ништа за сада"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Избор налога"</string>
<string name="add_account_label" msgid="2935267344849993553">"Додај налог"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Који налог желите да користите?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Додај налог"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Повећавање"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Смањивање"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index c9b7e2bd084d..bf7c6b241e91 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -855,12 +855,9 @@
<string name="searchview_description_clear" msgid="1330281990951833033">"Ta bort frågan"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"Skicka fråga"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"Röstsökning"</string>
- <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) -->
- <skip />
- <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) -->
- <skip />
- <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) -->
- <skip />
+ <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Aktivera Explore by Touch?"</string>
+ <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vill aktivera Explore by Touch. När funktionen är aktiv kan du höra eller se beskrivningar av vad du har under fingret eller utföra gester för att göra saker med pekdatorn."</string>
+ <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vill aktivera Explore by Touch. När funktionen är aktiv kan du höra eller se beskrivningar av vad du har under fingret eller utföra gester för att göra saker med telefonen."</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"för 1 månad sedan"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"För mer än en månad sedan"</string>
<plurals name="num_seconds_ago">
@@ -1127,10 +1124,8 @@
<string name="configure_input_methods" msgid="9091652157722495116">"Konfigurera inmatningsmetoder"</string>
<string name="use_physical_keyboard" msgid="6203112478095117625">"Fysiskt tangentbord"</string>
<string name="hardware" msgid="7517821086888990278">"Maskinvara"</string>
- <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) -->
- <skip />
- <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) -->
- <skip />
+ <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Välj en tangentbordslayout"</string>
+ <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Välj en tangentbordslayout genom att trycka."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidater"</u></string>
@@ -1239,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Gör ingenting just nu"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Välj ett konto"</string>
<string name="add_account_label" msgid="2935267344849993553">"Lägg till ett konto"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Vilket konto vill du använda?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Lägg till konto"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Öka"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Minska"</string>
@@ -1324,6 +1318,5 @@
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vill du öppna webbläsaren?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vill du ta emot samtal?"</string>
<string name="activity_resolver_use_always" msgid="8017770747801494933">"Alltid"</string>
- <!-- no translation found for activity_resolver_use_once (2404644797149173758) -->
- <skip />
+ <string name="activity_resolver_use_once" msgid="2404644797149173758">"Bara en gång"</string>
</resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 35079c580e5d..405c74f4faf9 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Usifanye chochote kwa sasa"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Chagua akaunti"</string>
<string name="add_account_label" msgid="2935267344849993553">"Ongeza akaunti"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Je, ni akaunti gani unataka kutumia?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Ongeza akaunti"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Ongeza"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Punguza"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 34e443362cc3..a70740de5cee 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"ไม่ต้องทำอะไรในขณะนี้"</string>
<string name="choose_account_label" msgid="5655203089746423927">"เลือกบัญชี"</string>
<string name="add_account_label" msgid="2935267344849993553">"เพิ่มบัญชี"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"คุณต้องการใช้บัญชีใด"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"เพิ่มบัญชี"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"เพิ่ม"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"ลด"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 666d131d2558..c64a4a159320 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Walang gawin sa ngayon"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Pumili ng isang account"</string>
<string name="add_account_label" msgid="2935267344849993553">"Magdagdag ng account"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Aling account ang nais mong gamitin?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Magdagdag ng account"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Dagdagan"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Bawasan"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index c9ee1155176a..f2430c23704b 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Şimdilik bir şey yapma"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Bir hesap seçin"</string>
<string name="add_account_label" msgid="2935267344849993553">"Hesap ekleyin"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Hangi hesabı kullanmak istiyorsunuz?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Hesap ekle"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Artır"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Azalt"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 3e3b5068145f..207ea061e0b2 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Наразі нічого не робити"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Вибрати обліковий запис"</string>
<string name="add_account_label" msgid="2935267344849993553">"Додати обліковий запис"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Який обліковий запис використовувати?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Додати облік. запис"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Збільшити"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Зменшити"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index af89a2de1995..c6f2971a2094 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Không thực hiện tác vụ nào bây giờ"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Chọn tài khoản"</string>
<string name="add_account_label" msgid="2935267344849993553">"Thêm tài khoản"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Bạn muốn sử dụng tài khoản nào?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Thêm tài khoản"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Tăng"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Giảm"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 865761b463a0..01871597e8c2 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -855,12 +855,9 @@
<string name="searchview_description_clear" msgid="1330281990951833033">"清除查询"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"提交查询"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"语音搜索"</string>
- <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) -->
- <skip />
- <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) -->
- <skip />
- <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) -->
- <skip />
+ <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"是否启用“触摸浏览”?"</string>
+ <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>想要启用“触摸浏览”。“触摸浏览”启用后,您可以听到或看到触摸内容的说明,或通过手指操作与平板电脑互动。"</string>
+ <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>想要启用“触摸浏览”。“触摸浏览”启用后,您可以听到或看到触摸内容的说明,或通过手指操作与手机互动。"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 个月前"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 个月前"</string>
<plurals name="num_seconds_ago">
@@ -1127,10 +1124,8 @@
<string name="configure_input_methods" msgid="9091652157722495116">"设置输入法"</string>
<string name="use_physical_keyboard" msgid="6203112478095117625">"物理键盘"</string>
<string name="hardware" msgid="7517821086888990278">"硬件"</string>
- <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) -->
- <skip />
- <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) -->
- <skip />
+ <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"选择键盘布局"</string>
+ <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"触摸以选择键盘布局。"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"候选"</u></string>
@@ -1239,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"目前不进行任何操作"</string>
<string name="choose_account_label" msgid="5655203089746423927">"选择帐户"</string>
<string name="add_account_label" msgid="2935267344849993553">"添加帐户"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"您要使用哪个帐户?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"添加帐户"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"增大"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"减小"</string>
@@ -1324,6 +1318,5 @@
<string name="launchBrowserDefault" msgid="2057951947297614725">"要启动浏览器吗?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"要接听电话吗?"</string>
<string name="activity_resolver_use_always" msgid="8017770747801494933">"始终"</string>
- <!-- no translation found for activity_resolver_use_once (2404644797149173758) -->
- <skip />
+ <string name="activity_resolver_use_once" msgid="2404644797149173758">"仅一次"</string>
</resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 95b3fa3870cd..2c6a4ed28ad5 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1239,7 +1239,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"暫不執行"</string>
<string name="choose_account_label" msgid="5655203089746423927">"選擇帳戶"</string>
<string name="add_account_label" msgid="2935267344849993553">"新增帳戶"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"您要使用哪個帳戶?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"新增帳戶"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"增加"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"減少"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 796615316dc5..c979aec8e70f 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1234,7 +1234,6 @@
<string name="sync_do_nothing" msgid="3743764740430821845">"Ungenzi lutho okwamanje."</string>
<string name="choose_account_label" msgid="5655203089746423927">"Khetha i-akhawunti"</string>
<string name="add_account_label" msgid="2935267344849993553">"Yengeza i-akhawunti"</string>
- <string name="choose_account_text" msgid="6303348737197849675">"Ingabe iyiphi i-akhawunti ofuna ukuyisebenzisa?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Engeza i-akhawunti"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Khulisa"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Yehlisa"</string>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 65457b38994f..2b966f68c82c 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -2505,7 +2505,7 @@
<!-- Title for a warning message about the interaction model changes after allowing an accessibility
service to put the device into explore by touch mode, displayed as a dialog message when
- the user selects to enables the service. (default). [CHAR LIMIT=35] -->
+ the user selects to enables the service. (default). [CHAR LIMIT=45] -->
<string name="enable_explore_by_touch_warning_title">Enable Explore by Touch?</string>
<!-- Summary for a warning message about the interaction model changes after allowing an accessibility
service to put the device into explore by touch mode, displayed as a dialog message when
diff --git a/include/private/hwui/DrawGlInfo.h b/include/private/hwui/DrawGlInfo.h
index e33823e96b9e..fc810be8dc62 100644
--- a/include/private/hwui/DrawGlInfo.h
+++ b/include/private/hwui/DrawGlInfo.h
@@ -72,7 +72,14 @@ struct DrawGlInfo {
// The functor needs to be invoked again but will
// not redraw. Only the functor is invoked again
// (unless another functor requests a redraw.)
- kStatusInvoke = 0x2
+ kStatusInvoke = 0x2,
+ // DisplayList actually issued GL drawing commands.
+ // This is used to signal the HardwareRenderer that the
+ // buffers should be flipped - otherwise, there were no
+ // changes to the buffer, so no need to flip. Some hardware
+ // has issues with stale buffer contents when no GL
+ // commands are issued.
+ kStatusDrew = 0x4
};
}; // struct DrawGlInfo
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index 546925e6b963..88d2209154c1 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -833,7 +833,7 @@ void DisplayList::setViewProperties(OpenGLRenderer& renderer, uint32_t level) {
* purposes of logging display list info for a given view.
*/
status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flags, uint32_t level) {
- status_t drawGlStatus = 0;
+ status_t drawGlStatus = DrawGlInfo::kStatusDone;
TextContainer text;
mReader.rewind();
@@ -859,7 +859,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, "RestoreToCount", restoreTo);
renderer.restoreToCount(restoreTo);
renderer.endMark();
- return false;
+ return drawGlStatus;
}
DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance();
@@ -1002,7 +1002,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
}
DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
layer, x, y, paint);
- renderer.drawLayer(layer, x, y, paint);
+ drawGlStatus |= renderer.drawLayer(layer, x, y, paint);
}
break;
case DrawBitmap: {
@@ -1015,7 +1015,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
}
DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
bitmap, x, y, paint);
- renderer.drawBitmap(bitmap, x, y, paint);
+ drawGlStatus |= renderer.drawBitmap(bitmap, x, y, paint);
}
break;
case DrawBitmapMatrix: {
@@ -1024,7 +1024,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op],
bitmap, matrix, paint);
- renderer.drawBitmap(bitmap, matrix, paint);
+ drawGlStatus |= renderer.drawBitmap(bitmap, matrix, paint);
}
break;
case DrawBitmapRect: {
@@ -1041,7 +1041,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p",
(char*) indent, OP_NAMES[op], bitmap,
f1, f2, f3, f4, f5, f6, f7, f8,paint);
- renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint);
+ drawGlStatus |= renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint);
}
break;
case DrawBitmapData: {
@@ -1051,7 +1051,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
bitmap, x, y, paint);
- renderer.drawBitmap(bitmap, x, y, paint);
+ drawGlStatus |= renderer.drawBitmap(bitmap, x, y, paint);
}
break;
case DrawBitmapMesh: {
@@ -1067,7 +1067,8 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
- renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, colors, paint);
+ drawGlStatus |= renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices,
+ colors, paint);
}
break;
case DrawPatch: {
@@ -1091,15 +1092,15 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
- renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount,
- numColors, left, top, right, bottom, paint);
+ drawGlStatus |= renderer.drawPatch(bitmap, xDivs, yDivs, colors,
+ xDivsCount, yDivsCount, numColors, left, top, right, bottom, paint);
}
break;
case DrawColor: {
int32_t color = getInt();
int32_t xferMode = getInt();
DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode);
- renderer.drawColor(color, (SkXfermode::Mode) xferMode);
+ drawGlStatus |= renderer.drawColor(color, (SkXfermode::Mode) xferMode);
}
break;
case DrawRect: {
@@ -1110,7 +1111,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
f1, f2, f3, f4, paint);
- renderer.drawRect(f1, f2, f3, f4, paint);
+ drawGlStatus |= renderer.drawRect(f1, f2, f3, f4, paint);
}
break;
case DrawRoundRect: {
@@ -1123,7 +1124,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p",
(char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint);
- renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint);
+ drawGlStatus |= renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint);
}
break;
case DrawCircle: {
@@ -1133,7 +1134,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p",
(char*) indent, OP_NAMES[op], f1, f2, f3, paint);
- renderer.drawCircle(f1, f2, f3, paint);
+ drawGlStatus |= renderer.drawCircle(f1, f2, f3, paint);
}
break;
case DrawOval: {
@@ -1144,7 +1145,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p",
(char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint);
- renderer.drawOval(f1, f2, f3, f4, paint);
+ drawGlStatus |= renderer.drawOval(f1, f2, f3, f4, paint);
}
break;
case DrawArc: {
@@ -1158,14 +1159,14 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p",
(char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint);
- renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint);
+ drawGlStatus |= renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint);
}
break;
case DrawPath: {
SkPath* path = getPath();
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint);
- renderer.drawPath(path, paint);
+ drawGlStatus |= renderer.drawPath(path, paint);
}
break;
case DrawLines: {
@@ -1173,7 +1174,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
float* points = getFloats(count);
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
- renderer.drawLines(points, count, paint);
+ drawGlStatus |= renderer.drawLines(points, count, paint);
}
break;
case DrawPoints: {
@@ -1181,7 +1182,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
float* points = getFloats(count);
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
- renderer.drawPoints(points, count, paint);
+ drawGlStatus |= renderer.drawPoints(points, count, paint);
}
break;
case DrawText: {
@@ -1193,7 +1194,8 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
float length = getFloat();
DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p, %.2f", (char*) indent,
OP_NAMES[op], text.text(), text.length(), count, x, y, paint, length);
- renderer.drawText(text.text(), text.length(), count, x, y, paint, length);
+ drawGlStatus |= renderer.drawText(text.text(), text.length(), count, x, y,
+ paint, length);
}
break;
case DrawTextOnPath: {
@@ -1205,7 +1207,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op],
text.text(), text.length(), count, paint);
- renderer.drawTextOnPath(text.text(), text.length(), count, path,
+ drawGlStatus |= renderer.drawTextOnPath(text.text(), text.length(), count, path,
hOffset, vOffset, paint);
}
break;
@@ -1217,7 +1219,8 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag
SkPaint* paint = getPaint(renderer);
DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent,
OP_NAMES[op], text.text(), text.length(), count, paint);
- renderer.drawPosText(text.text(), text.length(), count, positions, paint);
+ drawGlStatus |= renderer.drawPosText(text.text(), text.length(), count,
+ positions, paint);
}
break;
case ResetShader: {
@@ -1490,23 +1493,25 @@ status_t DisplayListRenderer::drawDisplayList(DisplayList* displayList,
return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) {
+status_t DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) {
addOp(DisplayList::DrawLayer);
addInt((int) layer);
addPoint(x, y);
addPaint(paint);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint) {
+status_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint) {
const bool reject = quickReject(left, top, left + bitmap->width(), top + bitmap->height());
uint32_t* location = addOp(DisplayList::DrawBitmap, reject);
addBitmap(bitmap);
addPoint(left, top);
addPaint(paint);
addSkip(location);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint) {
+status_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint) {
Rect r(0.0f, 0.0f, bitmap->width(), bitmap->height());
const mat4 transform(*matrix);
transform.mapRect(r);
@@ -1517,9 +1522,10 @@ void DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint
addMatrix(matrix);
addPaint(paint);
addSkip(location);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
+status_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
float srcRight, float srcBottom, float dstLeft, float dstTop,
float dstRight, float dstBottom, SkPaint* paint) {
const bool reject = quickReject(dstLeft, dstTop, dstRight, dstBottom);
@@ -1529,18 +1535,21 @@ void DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcT
addBounds(dstLeft, dstTop, dstRight, dstBottom);
addPaint(paint);
addSkip(location);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top, SkPaint* paint) {
+status_t DisplayListRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top,
+ SkPaint* paint) {
const bool reject = quickReject(left, top, left + bitmap->width(), bitmap->height());
uint32_t* location = addOp(DisplayList::DrawBitmapData, reject);
addBitmapData(bitmap);
addPoint(left, top);
addPaint(paint);
addSkip(location);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
+status_t DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
float* vertices, int* colors, SkPaint* paint) {
addOp(DisplayList::DrawBitmapMesh);
addBitmap(bitmap);
@@ -1554,11 +1563,12 @@ void DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int me
addInt(0);
}
addPaint(paint);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs,
- const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors,
- float left, float top, float right, float bottom, SkPaint* paint) {
+status_t DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs,
+ const int32_t* yDivs, const uint32_t* colors, uint32_t width, uint32_t height,
+ int8_t numColors, float left, float top, float right, float bottom, SkPaint* paint) {
const bool reject = quickReject(left, top, right, bottom);
uint32_t* location = addOp(DisplayList::DrawPatch, reject);
addBitmap(bitmap);
@@ -1568,15 +1578,17 @@ void DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, cons
addBounds(left, top, right, bottom);
addPaint(paint);
addSkip(location);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) {
+status_t DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) {
addOp(DisplayList::DrawColor);
addInt(color);
addInt(mode);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawRect(float left, float top, float right, float bottom,
+status_t DisplayListRenderer::drawRect(float left, float top, float right, float bottom,
SkPaint* paint) {
const bool reject = paint->getStyle() == SkPaint::kFill_Style &&
quickReject(left, top, right, bottom);
@@ -1584,9 +1596,10 @@ void DisplayListRenderer::drawRect(float left, float top, float right, float bot
addBounds(left, top, right, bottom);
addPaint(paint);
addSkip(location);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom,
+status_t DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom,
float rx, float ry, SkPaint* paint) {
const bool reject = paint->getStyle() == SkPaint::kFill_Style &&
quickReject(left, top, right, bottom);
@@ -1595,32 +1608,36 @@ void DisplayListRenderer::drawRoundRect(float left, float top, float right, floa
addPoint(rx, ry);
addPaint(paint);
addSkip(location);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) {
+status_t DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) {
addOp(DisplayList::DrawCircle);
addPoint(x, y);
addFloat(radius);
addPaint(paint);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawOval(float left, float top, float right, float bottom,
+status_t DisplayListRenderer::drawOval(float left, float top, float right, float bottom,
SkPaint* paint) {
addOp(DisplayList::DrawOval);
addBounds(left, top, right, bottom);
addPaint(paint);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawArc(float left, float top, float right, float bottom,
+status_t DisplayListRenderer::drawArc(float left, float top, float right, float bottom,
float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) {
addOp(DisplayList::DrawArc);
addBounds(left, top, right, bottom);
addPoint(startAngle, sweepAngle);
addInt(useCenter ? 1 : 0);
addPaint(paint);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) {
+status_t DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) {
float left, top, offset;
uint32_t width, height;
computePathBounds(path, paint, left, top, offset, width, height);
@@ -1630,23 +1647,26 @@ void DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) {
addPath(path);
addPaint(paint);
addSkip(location);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) {
+status_t DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) {
addOp(DisplayList::DrawLines);
addFloats(points, count);
addPaint(paint);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawPoints(float* points, int count, SkPaint* paint) {
+status_t DisplayListRenderer::drawPoints(float* points, int count, SkPaint* paint) {
addOp(DisplayList::DrawPoints);
addFloats(points, count);
addPaint(paint);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawText(const char* text, int bytesCount, int count,
+status_t DisplayListRenderer::drawText(const char* text, int bytesCount, int count,
float x, float y, SkPaint* paint, float length) {
- if (!text || count <= 0) return;
+ if (!text || count <= 0) return DrawGlInfo::kStatusDone;
// TODO: We should probably make a copy of the paint instead of modifying
// it; modifying the paint will change its generationID the first
@@ -1672,11 +1692,12 @@ void DisplayListRenderer::drawText(const char* text, int bytesCount, int count,
addPaint(paint);
addFloat(length);
addSkip(location);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawTextOnPath(const char* text, int bytesCount, int count,
+status_t DisplayListRenderer::drawTextOnPath(const char* text, int bytesCount, int count,
SkPath* path, float hOffset, float vOffset, SkPaint* paint) {
- if (!text || count <= 0) return;
+ if (!text || count <= 0) return DrawGlInfo::kStatusDone;
addOp(DisplayList::DrawTextOnPath);
addText(text, bytesCount);
addInt(count);
@@ -1685,17 +1706,19 @@ void DisplayListRenderer::drawTextOnPath(const char* text, int bytesCount, int c
addFloat(vOffset);
paint->setAntiAlias(true);
addPaint(paint);
+ return DrawGlInfo::kStatusDone;
}
-void DisplayListRenderer::drawPosText(const char* text, int bytesCount, int count,
+status_t DisplayListRenderer::drawPosText(const char* text, int bytesCount, int count,
const float* positions, SkPaint* paint) {
- if (!text || count <= 0) return;
+ if (!text || count <= 0) return DrawGlInfo::kStatusDone;
addOp(DisplayList::DrawPosText);
addText(text, bytesCount);
addInt(count);
addFloats(positions, count * 2);
paint->setAntiAlias(true);
addPaint(paint);
+ return DrawGlInfo::kStatusDone;
}
void DisplayListRenderer::resetShader() {
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index 0ba4078e61e8..4fa1baa74199 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -576,35 +576,35 @@ public:
virtual status_t drawDisplayList(DisplayList* displayList, Rect& dirty, int32_t flags,
uint32_t level = 0);
- virtual void drawLayer(Layer* layer, float x, float y, SkPaint* paint);
- virtual void drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint);
- virtual void drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint);
- virtual void drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
+ virtual status_t drawLayer(Layer* layer, float x, float y, SkPaint* paint);
+ virtual status_t drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint);
+ virtual status_t drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint);
+ virtual status_t drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
float srcRight, float srcBottom, float dstLeft, float dstTop,
float dstRight, float dstBottom, SkPaint* paint);
- virtual void drawBitmapData(SkBitmap* bitmap, float left, float top, SkPaint* paint);
- virtual void drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
+ virtual status_t drawBitmapData(SkBitmap* bitmap, float left, float top, SkPaint* paint);
+ virtual status_t drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
float* vertices, int* colors, SkPaint* paint);
- virtual void drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs,
+ virtual status_t drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs,
const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors,
float left, float top, float right, float bottom, SkPaint* paint);
- virtual void drawColor(int color, SkXfermode::Mode mode);
- virtual void drawRect(float left, float top, float right, float bottom, SkPaint* paint);
- virtual void drawRoundRect(float left, float top, float right, float bottom,
+ virtual status_t drawColor(int color, SkXfermode::Mode mode);
+ virtual status_t drawRect(float left, float top, float right, float bottom, SkPaint* paint);
+ virtual status_t drawRoundRect(float left, float top, float right, float bottom,
float rx, float ry, SkPaint* paint);
- virtual void drawCircle(float x, float y, float radius, SkPaint* paint);
- virtual void drawOval(float left, float top, float right, float bottom, SkPaint* paint);
- virtual void drawArc(float left, float top, float right, float bottom,
+ virtual status_t drawCircle(float x, float y, float radius, SkPaint* paint);
+ virtual status_t drawOval(float left, float top, float right, float bottom, SkPaint* paint);
+ virtual status_t drawArc(float left, float top, float right, float bottom,
float startAngle, float sweepAngle, bool useCenter, SkPaint* paint);
- virtual void drawPath(SkPath* path, SkPaint* paint);
- virtual void drawLines(float* points, int count, SkPaint* paint);
- virtual void drawPoints(float* points, int count, SkPaint* paint);
- virtual void drawText(const char* text, int bytesCount, int count, float x, float y,
+ virtual status_t drawPath(SkPath* path, SkPaint* paint);
+ virtual status_t drawLines(float* points, int count, SkPaint* paint);
+ virtual status_t drawPoints(float* points, int count, SkPaint* paint);
+ virtual status_t drawText(const char* text, int bytesCount, int count, float x, float y,
SkPaint* paint, float length = -1.0f);
- virtual void drawTextOnPath(const char* text, int bytesCount, int count, SkPath* path,
+ virtual status_t drawTextOnPath(const char* text, int bytesCount, int count, SkPath* path,
float hOffset, float vOffset, SkPaint* paint);
- virtual void drawPosText(const char* text, int bytesCount, int count, const float* positions,
- SkPaint* paint);
+ virtual status_t drawPosText(const char* text, int bytesCount, int count,
+ const float* positions, SkPaint* paint);
virtual void resetShader();
virtual void setupShader(SkiaShader* shader);
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 2a8b32c4721a..2dc9726ab9ca 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -336,7 +336,7 @@ status_t OpenGLRenderer::callDrawGLFunction(Functor* functor, Rect& dirty) {
info.height = getSnapshot()->height;
getSnapshot()->transform->copyTo(&info.transform[0]);
- status_t result = (*functor)(DrawGlInfo::kModeDraw, &info);
+ status_t result = (*functor)(DrawGlInfo::kModeDraw, &info) | DrawGlInfo::kStatusDrew;
if (result != DrawGlInfo::kStatusDone) {
Rect localDirty(info.dirtyLeft, info.dirtyTop, info.dirtyRight, info.dirtyBottom);
@@ -1472,17 +1472,17 @@ void OpenGLRenderer::drawAlphaBitmap(Texture* texture, float left, float top, Sk
finishDrawTexture();
}
-void OpenGLRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint) {
+status_t OpenGLRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint) {
const float right = left + bitmap->width();
const float bottom = top + bitmap->height();
if (quickReject(left, top, right, bottom)) {
- return;
+ return DrawGlInfo::kStatusDone;
}
mCaches.activeTexture(0);
Texture* texture = mCaches.textureCache.get(bitmap);
- if (!texture) return;
+ if (!texture) return DrawGlInfo::kStatusDone;
const AutoTexture autoCleanup(texture);
if (CC_UNLIKELY(bitmap->getConfig() == SkBitmap::kA8_Config)) {
@@ -1490,20 +1490,22 @@ void OpenGLRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint
} else {
drawTextureRect(left, top, right, bottom, texture, paint);
}
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint) {
+status_t OpenGLRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint) {
Rect r(0.0f, 0.0f, bitmap->width(), bitmap->height());
const mat4 transform(*matrix);
transform.mapRect(r);
if (quickReject(r.left, r.top, r.right, r.bottom)) {
- return;
+ return DrawGlInfo::kStatusDone;
}
mCaches.activeTexture(0);
Texture* texture = mCaches.textureCache.get(bitmap);
- if (!texture) return;
+ if (!texture) return DrawGlInfo::kStatusDone;
const AutoTexture autoCleanup(texture);
// This could be done in a cheaper way, all we need is pass the matrix
@@ -1512,14 +1514,16 @@ void OpenGLRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* pai
concatMatrix(matrix);
drawTextureRect(0.0f, 0.0f, bitmap->width(), bitmap->height(), texture, paint);
restore();
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top, SkPaint* paint) {
+status_t OpenGLRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top, SkPaint* paint) {
const float right = left + bitmap->width();
const float bottom = top + bitmap->height();
if (quickReject(left, top, right, bottom)) {
- return;
+ return DrawGlInfo::kStatusDone;
}
mCaches.activeTexture(0);
@@ -1527,18 +1531,20 @@ void OpenGLRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top, SkP
const AutoTexture autoCleanup(texture);
drawTextureRect(left, top, right, bottom, texture, paint);
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
+status_t OpenGLRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
float* vertices, int* colors, SkPaint* paint) {
// TODO: Do a quickReject
if (!vertices || mSnapshot->isIgnored()) {
- return;
+ return DrawGlInfo::kStatusDone;
}
mCaches.activeTexture(0);
Texture* texture = mCaches.textureCache.get(bitmap);
- if (!texture) return;
+ if (!texture) return DrawGlInfo::kStatusDone;
const AutoTexture autoCleanup(texture);
texture->setWrap(GL_CLAMP_TO_EDGE, true);
@@ -1611,19 +1617,21 @@ void OpenGLRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHei
drawTextureMesh(0.0f, 0.0f, 1.0f, 1.0f, texture->id, alpha / 255.0f,
mode, texture->blend, &mesh[0].position[0], &mesh[0].texture[0],
GL_TRIANGLES, count, false, false, 0, false, false);
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawBitmap(SkBitmap* bitmap,
+status_t OpenGLRenderer::drawBitmap(SkBitmap* bitmap,
float srcLeft, float srcTop, float srcRight, float srcBottom,
float dstLeft, float dstTop, float dstRight, float dstBottom,
SkPaint* paint) {
if (quickReject(dstLeft, dstTop, dstRight, dstBottom)) {
- return;
+ return DrawGlInfo::kStatusDone;
}
mCaches.activeTexture(0);
Texture* texture = mCaches.textureCache.get(bitmap);
- if (!texture) return;
+ if (!texture) return DrawGlInfo::kStatusDone;
const AutoTexture autoCleanup(texture);
const float width = texture->width;
@@ -1666,18 +1674,20 @@ void OpenGLRenderer::drawBitmap(SkBitmap* bitmap,
}
resetDrawTextureTexCoords(0.0f, 0.0f, 1.0f, 1.0f);
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs,
+status_t OpenGLRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs,
const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors,
float left, float top, float right, float bottom, SkPaint* paint) {
if (quickReject(left, top, right, bottom)) {
- return;
+ return DrawGlInfo::kStatusDone;
}
mCaches.activeTexture(0);
Texture* texture = mCaches.textureCache.get(bitmap);
- if (!texture) return;
+ if (!texture) return DrawGlInfo::kStatusDone;
const AutoTexture autoCleanup(texture);
texture->setWrap(GL_CLAMP_TO_EDGE, true);
texture->setFilter(GL_LINEAR, true);
@@ -1726,6 +1736,8 @@ void OpenGLRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int
true, !mesh->hasEmptyQuads);
}
}
+
+ return DrawGlInfo::kStatusDrew;
}
/**
@@ -1826,8 +1838,8 @@ void OpenGLRenderer::drawAARect(float left, float top, float right, float bottom
* 'inside' the line area being filled opaquely and the other pixels being filled according to
* how far into the boundary region they are, which is determined by shader interpolation.
*/
-void OpenGLRenderer::drawLines(float* points, int count, SkPaint* paint) {
- if (mSnapshot->isIgnored()) return;
+status_t OpenGLRenderer::drawLines(float* points, int count, SkPaint* paint) {
+ if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
const bool isAA = paint->isAntiAlias();
// We use half the stroke width here because we're going to position the quad
@@ -2083,10 +2095,12 @@ void OpenGLRenderer::drawLines(float* points, int count, SkPaint* paint) {
if (isAA) {
finishDrawAALine(widthSlot, lengthSlot);
}
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawPoints(float* points, int count, SkPaint* paint) {
- if (mSnapshot->isIgnored()) return;
+status_t OpenGLRenderer::drawPoints(float* points, int count, SkPaint* paint) {
+ if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
// TODO: The paint's cap style defines whether the points are square or circular
// TODO: Handle AA for round points
@@ -2138,86 +2152,92 @@ void OpenGLRenderer::drawPoints(float* points, int count, SkPaint* paint) {
}
glDrawArrays(GL_POINTS, 0, generatedVerticesCount);
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawColor(int color, SkXfermode::Mode mode) {
+status_t OpenGLRenderer::drawColor(int color, SkXfermode::Mode mode) {
// No need to check against the clip, we fill the clip region
- if (mSnapshot->isIgnored()) return;
+ if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
Rect& clip(*mSnapshot->clipRect);
clip.snapToPixelBoundaries();
drawColorRect(clip.left, clip.top, clip.right, clip.bottom, color, mode, true);
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawShape(float left, float top, const PathTexture* texture, SkPaint* paint) {
- if (!texture) return;
+status_t OpenGLRenderer::drawShape(float left, float top, const PathTexture* texture,
+ SkPaint* paint) {
+ if (!texture) return DrawGlInfo::kStatusDone;
const AutoTexture autoCleanup(texture);
const float x = left + texture->left - texture->offset;
const float y = top + texture->top - texture->offset;
drawPathTexture(texture, x, y, paint);
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawRoundRect(float left, float top, float right, float bottom,
+status_t OpenGLRenderer::drawRoundRect(float left, float top, float right, float bottom,
float rx, float ry, SkPaint* paint) {
- if (mSnapshot->isIgnored()) return;
+ if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
mCaches.activeTexture(0);
const PathTexture* texture = mCaches.roundRectShapeCache.getRoundRect(
right - left, bottom - top, rx, ry, paint);
- drawShape(left, top, texture, paint);
+ return drawShape(left, top, texture, paint);
}
-void OpenGLRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) {
- if (mSnapshot->isIgnored()) return;
+status_t OpenGLRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) {
+ if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
mCaches.activeTexture(0);
const PathTexture* texture = mCaches.circleShapeCache.getCircle(radius, paint);
- drawShape(x - radius, y - radius, texture, paint);
+ return drawShape(x - radius, y - radius, texture, paint);
}
-void OpenGLRenderer::drawOval(float left, float top, float right, float bottom, SkPaint* paint) {
- if (mSnapshot->isIgnored()) return;
+status_t OpenGLRenderer::drawOval(float left, float top, float right, float bottom,
+ SkPaint* paint) {
+ if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
mCaches.activeTexture(0);
const PathTexture* texture = mCaches.ovalShapeCache.getOval(right - left, bottom - top, paint);
- drawShape(left, top, texture, paint);
+ return drawShape(left, top, texture, paint);
}
-void OpenGLRenderer::drawArc(float left, float top, float right, float bottom,
+status_t OpenGLRenderer::drawArc(float left, float top, float right, float bottom,
float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) {
- if (mSnapshot->isIgnored()) return;
+ if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
if (fabs(sweepAngle) >= 360.0f) {
- drawOval(left, top, right, bottom, paint);
- return;
+ return drawOval(left, top, right, bottom, paint);
}
mCaches.activeTexture(0);
const PathTexture* texture = mCaches.arcShapeCache.getArc(right - left, bottom - top,
startAngle, sweepAngle, useCenter, paint);
- drawShape(left, top, texture, paint);
+ return drawShape(left, top, texture, paint);
}
-void OpenGLRenderer::drawRectAsShape(float left, float top, float right, float bottom,
+status_t OpenGLRenderer::drawRectAsShape(float left, float top, float right, float bottom,
SkPaint* paint) {
- if (mSnapshot->isIgnored()) return;
+ if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
mCaches.activeTexture(0);
const PathTexture* texture = mCaches.rectShapeCache.getRect(right - left, bottom - top, paint);
- drawShape(left, top, texture, paint);
+ return drawShape(left, top, texture, paint);
}
-void OpenGLRenderer::drawRect(float left, float top, float right, float bottom, SkPaint* p) {
+status_t OpenGLRenderer::drawRect(float left, float top, float right, float bottom, SkPaint* p) {
if (p->getStyle() != SkPaint::kFill_Style) {
- drawRectAsShape(left, top, right, bottom, p);
- return;
+ return drawRectAsShape(left, top, right, bottom, p);
}
if (quickReject(left, top, right, bottom)) {
- return;
+ return DrawGlInfo::kStatusDone;
}
SkXfermode::Mode mode;
@@ -2237,18 +2257,20 @@ void OpenGLRenderer::drawRect(float left, float top, float right, float bottom,
} else {
drawColorRect(left, top, right, bottom, color, mode);
}
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count,
+status_t OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count,
const float* positions, SkPaint* paint) {
if (text == NULL || count == 0 || mSnapshot->isIgnored() ||
(paint->getAlpha() == 0 && paint->getXfermode() == NULL)) {
- return;
+ return DrawGlInfo::kStatusDone;
}
// NOTE: Skia does not support perspective transform on drawPosText yet
if (!mSnapshot->transform->isSimple()) {
- return;
+ return DrawGlInfo::kStatusDone;
}
float x = 0.0f;
@@ -2308,13 +2330,15 @@ void OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count,
}
#endif
}
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
+status_t OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
float x, float y, SkPaint* paint, float length) {
if (text == NULL || count == 0 || mSnapshot->isIgnored() ||
(paint->getAlpha() == 0 && paint->getXfermode() == NULL)) {
- return;
+ return DrawGlInfo::kStatusDone;
}
if (length < 0.0f) length = paint->measureText(text, bytesCount);
@@ -2332,7 +2356,7 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
SkPaint::FontMetrics metrics;
paint->getFontMetrics(&metrics, 0.0f);
if (quickReject(x, y + metrics.fTop, x + length, y + metrics.fBottom)) {
- return;
+ return DrawGlInfo::kStatusDone;
}
const float oldX = x;
@@ -2432,13 +2456,15 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
}
drawTextDecorations(text, bytesCount, length, oldX, oldY, paint);
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawTextOnPath(const char* text, int bytesCount, int count, SkPath* path,
+status_t OpenGLRenderer::drawTextOnPath(const char* text, int bytesCount, int count, SkPath* path,
float hOffset, float vOffset, SkPaint* paint) {
if (text == NULL || count == 0 || mSnapshot->isIgnored() ||
(paint->getAlpha() == 0 && paint->getXfermode() == NULL)) {
- return;
+ return DrawGlInfo::kStatusDone;
}
FontRenderer& fontRenderer = mCaches.fontRenderer.getFontRenderer(paint);
@@ -2482,27 +2508,31 @@ void OpenGLRenderer::drawTextOnPath(const char* text, int bytesCount, int count,
}
#endif
}
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawPath(SkPath* path, SkPaint* paint) {
- if (mSnapshot->isIgnored()) return;
+status_t OpenGLRenderer::drawPath(SkPath* path, SkPaint* paint) {
+ if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
mCaches.activeTexture(0);
// TODO: Perform early clip test before we rasterize the path
const PathTexture* texture = mCaches.pathCache.get(path, paint);
- if (!texture) return;
+ if (!texture) return DrawGlInfo::kStatusDone;
const AutoTexture autoCleanup(texture);
const float x = texture->left - texture->offset;
const float y = texture->top - texture->offset;
drawPathTexture(texture, x, y, paint);
+
+ return DrawGlInfo::kStatusDrew;
}
-void OpenGLRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) {
+status_t OpenGLRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) {
if (!layer || quickReject(x, y, x + layer->layer.getWidth(), y + layer->layer.getHeight())) {
- return;
+ return DrawGlInfo::kStatusDone;
}
if (layer->deferredUpdateScheduled && layer->renderer && layer->displayList) {
@@ -2575,6 +2605,8 @@ void OpenGLRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) {
const Rect r(x, y, x + layer->layer.getWidth(), y + layer->layer.getHeight());
composeLayerRect(layer, r);
#endif
+
+ return DrawGlInfo::kStatusDrew;
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index ad83b312bf3f..7703e805d04c 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -111,34 +111,34 @@ public:
virtual status_t drawDisplayList(DisplayList* displayList, Rect& dirty, int32_t flags,
uint32_t level = 0);
virtual void outputDisplayList(DisplayList* displayList, uint32_t level = 0);
- virtual void drawLayer(Layer* layer, float x, float y, SkPaint* paint);
- virtual void drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint);
- virtual void drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint);
- virtual void drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
+ virtual status_t drawLayer(Layer* layer, float x, float y, SkPaint* paint);
+ virtual status_t drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint);
+ virtual status_t drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint);
+ virtual status_t drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
float srcRight, float srcBottom, float dstLeft, float dstTop,
float dstRight, float dstBottom, SkPaint* paint);
- virtual void drawBitmapData(SkBitmap* bitmap, float left, float top, SkPaint* paint);
- virtual void drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
+ virtual status_t drawBitmapData(SkBitmap* bitmap, float left, float top, SkPaint* paint);
+ virtual status_t drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
float* vertices, int* colors, SkPaint* paint);
- virtual void drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs,
+ virtual status_t drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs,
const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors,
float left, float top, float right, float bottom, SkPaint* paint);
- virtual void drawColor(int color, SkXfermode::Mode mode);
- virtual void drawRect(float left, float top, float right, float bottom, SkPaint* paint);
- virtual void drawRoundRect(float left, float top, float right, float bottom,
+ virtual status_t drawColor(int color, SkXfermode::Mode mode);
+ virtual status_t drawRect(float left, float top, float right, float bottom, SkPaint* paint);
+ virtual status_t drawRoundRect(float left, float top, float right, float bottom,
float rx, float ry, SkPaint* paint);
- virtual void drawCircle(float x, float y, float radius, SkPaint* paint);
- virtual void drawOval(float left, float top, float right, float bottom, SkPaint* paint);
- virtual void drawArc(float left, float top, float right, float bottom,
+ virtual status_t drawCircle(float x, float y, float radius, SkPaint* paint);
+ virtual status_t drawOval(float left, float top, float right, float bottom, SkPaint* paint);
+ virtual status_t drawArc(float left, float top, float right, float bottom,
float startAngle, float sweepAngle, bool useCenter, SkPaint* paint);
- virtual void drawPath(SkPath* path, SkPaint* paint);
- virtual void drawLines(float* points, int count, SkPaint* paint);
- virtual void drawPoints(float* points, int count, SkPaint* paint);
- virtual void drawText(const char* text, int bytesCount, int count, float x, float y,
+ virtual status_t drawPath(SkPath* path, SkPaint* paint);
+ virtual status_t drawLines(float* points, int count, SkPaint* paint);
+ virtual status_t drawPoints(float* points, int count, SkPaint* paint);
+ virtual status_t drawText(const char* text, int bytesCount, int count, float x, float y,
SkPaint* paint, float length = -1.0f);
- virtual void drawTextOnPath(const char* text, int bytesCount, int count, SkPath* path,
+ virtual status_t drawTextOnPath(const char* text, int bytesCount, int count, SkPath* path,
float hOffset, float vOffset, SkPaint* paint);
- virtual void drawPosText(const char* text, int bytesCount, int count,
+ virtual status_t drawPosText(const char* text, int bytesCount, int count,
const float* positions, SkPaint* paint);
virtual void resetShader();
@@ -336,7 +336,7 @@ private:
* @param texture The texture reprsenting the shape
* @param paint The paint to draw the shape with
*/
- void drawShape(float left, float top, const PathTexture* texture, SkPaint* paint);
+ status_t drawShape(float left, float top, const PathTexture* texture, SkPaint* paint);
/**
* Renders the rect defined by the specified bounds as a shape.
@@ -349,7 +349,7 @@ private:
* @param bottom The bottom coordinate of the rect to draw
* @param p The paint to draw the rect with
*/
- void drawRectAsShape(float left, float top, float right, float bottom, SkPaint* p);
+ status_t drawRectAsShape(float left, float top, float right, float bottom, SkPaint* p);
/**
* Draws the specified texture as an alpha bitmap. Alpha bitmaps obey
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 3a5056014e0c..ecdaa39780cf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -484,14 +484,7 @@ public class PhoneStatusBar extends BaseStatusBar {
@Override
public void showSearchPanel() {
- // XXX This is a bit of a hack. Since navbar is no longer slippery, we use the
- // gesture to dismiss the expanded statusbar.
- if (mExpanded) {
- animateCollapse();
- return;
- } else {
- super.showSearchPanel();
- }
+ super.showSearchPanel();
WindowManager.LayoutParams lp =
(android.view.WindowManager.LayoutParams) mNavigationBarView.getLayoutParams();
lp.flags &= ~WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
@@ -1044,6 +1037,7 @@ public class PhoneStatusBar extends BaseStatusBar {
mExpandedVisible = true;
mNotificationPanel.setVisibility(View.VISIBLE);
+ makeSlippery(mNavigationBarView, true);
updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
@@ -1059,6 +1053,16 @@ public class PhoneStatusBar extends BaseStatusBar {
visibilityChanged(true);
}
+ private static void makeSlippery(View view, boolean slippery) {
+ WindowManager.LayoutParams lp = (WindowManager.LayoutParams) view.getLayoutParams();
+ if (slippery) {
+ lp.flags |= WindowManager.LayoutParams.FLAG_SLIPPERY;
+ } else {
+ lp.flags &= ~WindowManager.LayoutParams.FLAG_SLIPPERY;
+ }
+ WindowManagerImpl.getDefault().updateViewLayout(view, lp);
+ }
+
public void animateExpand() {
if (SPEW) Slog.d(TAG, "Animate expand: expanded=" + mExpanded);
if ((mDisabled & StatusBarManager.DISABLE_EXPAND) != 0) {
@@ -1144,6 +1148,7 @@ public class PhoneStatusBar extends BaseStatusBar {
mExpandedVisible = false;
visibilityChanged(false);
mNotificationPanel.setVisibility(View.INVISIBLE);
+ makeSlippery(mNavigationBarView, false);
// Shrink the window to the size of the status bar only
WindowManager.LayoutParams lp = (WindowManager.LayoutParams) mStatusBarWindow.getLayoutParams();
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index 38e08ae059aa..469b4f1dca4e 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -2242,7 +2242,9 @@ public class PowerManagerService extends IPowerManager.Stub
} else {
newValue = endValue;
mHighestLightSensorValue = endSensorValue;
- mInitialAnimation = false;
+ if (endValue > 0) {
+ mInitialAnimation = false;
+ }
}
if (mDebugLightAnimation) {
@@ -2290,7 +2292,7 @@ public class PowerManagerService extends IPowerManager.Stub
currentMask = mask;
duration = (int) (mWindowScaleAnimation * animationDuration);
startTimeMillis = SystemClock.elapsedRealtime();
- mInitialAnimation = currentValue == 0 && target > 0;
+ mInitialAnimation = mInitialAnimation && target > 0;
if (mDebugLightAnimation) {
Slog.v(TAG, "animateTo(target=" + target
@@ -2608,7 +2610,8 @@ public class PowerManagerService extends IPowerManager.Stub
}
};
- private boolean mInitialAnimation; // used to prevent lightsensor changes while turning on
+ /** used to prevent lightsensor changes while turning on. */
+ private boolean mInitialAnimation = true;
private void dockStateChanged(int state) {
synchronized (mLocks) {
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 9d9b5b8375a2..febbd3234d5e 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -176,6 +176,7 @@ public final class ActivityManagerService extends ActivityManagerNative
static final boolean DEBUG_SERVICE_EXECUTING = localLOGV || false;
static final boolean DEBUG_VISBILITY = localLOGV || false;
static final boolean DEBUG_PROCESSES = localLOGV || false;
+ static final boolean DEBUG_PROCESS_OBSERVERS = localLOGV || false;
static final boolean DEBUG_PROVIDER = localLOGV || false;
static final boolean DEBUG_URI_PERMISSION = localLOGV || false;
static final boolean DEBUG_USER_LEAVING = localLOGV || false;
@@ -764,8 +765,24 @@ public final class ActivityManagerService extends ActivityManagerNative
boolean mAutoStopProfiler = false;
String mOpenGlTraceApp = null;
+ static class ProcessChangeItem {
+ static final int CHANGE_ACTIVITIES = 1<<0;
+ static final int CHANGE_IMPORTANCE= 1<<1;
+ int changes;
+ int uid;
+ int pid;
+ int importance;
+ boolean foregroundActivities;
+ }
+
final RemoteCallbackList<IProcessObserver> mProcessObservers
= new RemoteCallbackList<IProcessObserver>();
+ ProcessChangeItem[] mActiveProcessChanges = new ProcessChangeItem[5];
+
+ final ArrayList<ProcessChangeItem> mPendingProcessChanges
+ = new ArrayList<ProcessChangeItem>();
+ final ArrayList<ProcessChangeItem> mAvailProcessChanges
+ = new ArrayList<ProcessChangeItem>();
/**
* Callback of last caller to {@link #requestPss}.
@@ -855,7 +872,7 @@ public final class ActivityManagerService extends ActivityManagerNative
static final int CLEAR_DNS_CACHE = 28;
static final int UPDATE_HTTP_PROXY = 29;
static final int SHOW_COMPAT_MODE_DIALOG_MSG = 30;
- static final int DISPATCH_FOREGROUND_ACTIVITIES_CHANGED = 31;
+ static final int DISPATCH_PROCESSES_CHANGED = 31;
static final int DISPATCH_PROCESS_DIED = 32;
static final int REPORT_MEM_USAGE = 33;
@@ -1195,11 +1212,8 @@ public final class ActivityManagerService extends ActivityManagerNative
}
break;
}
- case DISPATCH_FOREGROUND_ACTIVITIES_CHANGED: {
- final int pid = msg.arg1;
- final int uid = msg.arg2;
- final boolean foregroundActivities = (Boolean) msg.obj;
- dispatchForegroundActivitiesChanged(pid, uid, foregroundActivities);
+ case DISPATCH_PROCESSES_CHANGED: {
+ dispatchProcessesChanged();
break;
}
case DISPATCH_PROCESS_DIED: {
@@ -2260,19 +2274,43 @@ public final class ActivityManagerService extends ActivityManagerNative
void reportResumedActivityLocked(ActivityRecord r) {
//Slog.i(TAG, "**** REPORT RESUME: " + r);
-
- final int identHash = System.identityHashCode(r);
updateUsageStats(r, true);
}
- private void dispatchForegroundActivitiesChanged(int pid, int uid, boolean foregroundActivities) {
+ private void dispatchProcessesChanged() {
+ int N;
+ synchronized (this) {
+ N = mPendingProcessChanges.size();
+ if (mActiveProcessChanges.length < N) {
+ mActiveProcessChanges = new ProcessChangeItem[N];
+ }
+ mPendingProcessChanges.toArray(mActiveProcessChanges);
+ mAvailProcessChanges.addAll(mPendingProcessChanges);
+ mPendingProcessChanges.clear();
+ if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "*** Delivering " + N + " process changes");
+ }
int i = mProcessObservers.beginBroadcast();
while (i > 0) {
i--;
final IProcessObserver observer = mProcessObservers.getBroadcastItem(i);
if (observer != null) {
try {
- observer.onForegroundActivitiesChanged(pid, uid, foregroundActivities);
+ for (int j=0; j<N; j++) {
+ ProcessChangeItem item = mActiveProcessChanges[j];
+ if ((item.changes&ProcessChangeItem.CHANGE_ACTIVITIES) != 0) {
+ if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "ACTIVITIES CHANGED pid="
+ + item.pid + " uid=" + item.uid + ": "
+ + item.foregroundActivities);
+ observer.onForegroundActivitiesChanged(item.pid, item.uid,
+ item.foregroundActivities);
+ }
+ if ((item.changes&ProcessChangeItem.CHANGE_IMPORTANCE) != 0) {
+ if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "IMPORTANCE CHANGED pid="
+ + item.pid + " uid=" + item.uid + ": " + item.importance);
+ observer.onImportanceChanged(item.pid, item.uid,
+ item.importance);
+ }
+ }
} catch (RemoteException e) {
}
}
@@ -3529,7 +3567,8 @@ public final class ActivityManagerService extends ActivityManagerNative
for (int i=mMainStack.mHistory.size()-1; i>=0; i--) {
ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(i);
- if ((r.info.flags&ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS) != 0) {
+ if ((r.info.flags&ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS) != 0
+ && (r.intent.getFlags()&Intent.FLAG_ACTIVITY_CLOSE_SYSTEM_DIALOGS) == 0) {
r.stack.finishActivityLocked(r, i,
Activity.RESULT_CANCELED, null, "close-sys");
}
@@ -10801,6 +10840,13 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
+ for (int i = mPendingProcessChanges.size()-1; i>=0; i--) {
+ ProcessChangeItem item = mPendingProcessChanges.get(i);
+ if (item.pid == app.pid) {
+ mPendingProcessChanges.remove(i);
+ mAvailProcessChanges.add(item);
+ }
+ }
mHandler.obtainMessage(DISPATCH_PROCESS_DIED, app.pid, app.info.uid, null).sendToTarget();
// If the caller is restarting this app, then leave it in its
@@ -13733,9 +13779,6 @@ public final class ActivityManagerService extends ActivityManagerNative
return (app.curAdj=app.maxAdj);
}
- final boolean hadForegroundActivities = app.foregroundActivities;
-
- app.foregroundActivities = false;
app.keeping = false;
app.systemNoUi = false;
@@ -13743,18 +13786,22 @@ public final class ActivityManagerService extends ActivityManagerNative
// important to least, and assign an appropriate OOM adjustment.
int adj;
int schedGroup;
+ boolean foregroundActivities = false;
+ boolean interesting = false;
BroadcastQueue queue;
if (app == TOP_APP) {
// The last app on the list is the foreground app.
adj = ProcessList.FOREGROUND_APP_ADJ;
schedGroup = Process.THREAD_GROUP_DEFAULT;
app.adjType = "top-activity";
- app.foregroundActivities = true;
+ foregroundActivities = true;
+ interesting = true;
} else if (app.instrumentationClass != null) {
// Don't want to kill running instrumentation.
adj = ProcessList.FOREGROUND_APP_ADJ;
schedGroup = Process.THREAD_GROUP_DEFAULT;
app.adjType = "instrumentation";
+ interesting = true;
} else if ((queue = isReceivingBroadcast(app)) != null) {
// An app that is currently receiving a broadcast also
// counts as being in the foreground for OOM killer purposes.
@@ -13790,7 +13837,7 @@ public final class ActivityManagerService extends ActivityManagerNative
boolean hasStoppingActivities = false;
// Examine all activities if not already foreground.
- if (!app.foregroundActivities && activitiesSize > 0) {
+ if (!foregroundActivities && activitiesSize > 0) {
for (int j = 0; j < activitiesSize; j++) {
final ActivityRecord r = app.activities.get(j);
if (r.visible) {
@@ -13801,7 +13848,7 @@ public final class ActivityManagerService extends ActivityManagerNative
}
schedGroup = Process.THREAD_GROUP_DEFAULT;
app.hidden = false;
- app.foregroundActivities = true;
+ foregroundActivities = true;
break;
} else if (r.state == ActivityState.PAUSING || r.state == ActivityState.PAUSED) {
if (adj > ProcessList.PERCEPTIBLE_APP_ADJ) {
@@ -13809,13 +13856,13 @@ public final class ActivityManagerService extends ActivityManagerNative
app.adjType = "pausing";
}
app.hidden = false;
- app.foregroundActivities = true;
+ foregroundActivities = true;
} else if (r.state == ActivityState.STOPPING) {
// We will apply the actual adjustment later, because
// we want to allow this process to immediately go through
// any memory trimming that is in effect.
app.hidden = false;
- app.foregroundActivities = true;
+ foregroundActivities = true;
hasStoppingActivities = true;
}
}
@@ -13838,6 +13885,10 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
+ if (app.foregroundServices) {
+ interesting = true;
+ }
+
if (adj > ProcessList.HEAVY_WEIGHT_APP_ADJ && app == mHeavyWeightProcess) {
// We don't want to kill the current heavy-weight process.
adj = ProcessList.HEAVY_WEIGHT_APP_ADJ;
@@ -14187,12 +14238,84 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
- app.curAdj = adj;
- app.curSchedGroup = schedGroup;
+ int importance = app.memImportance;
+ if (importance == 0 || adj != app.curAdj || schedGroup != app.curSchedGroup) {
+ app.curAdj = adj;
+ app.curSchedGroup = schedGroup;
+ if (!interesting) {
+ // For this reporting, if there is not something explicitly
+ // interesting in this process then we will push it to the
+ // background importance.
+ importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND;
+ } else if (adj >= ProcessList.HIDDEN_APP_MIN_ADJ) {
+ importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND;
+ } else if (adj >= ProcessList.SERVICE_B_ADJ) {
+ importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE;
+ } else if (adj >= ProcessList.HOME_APP_ADJ) {
+ importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND;
+ } else if (adj >= ProcessList.SERVICE_ADJ) {
+ importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE;
+ } else if (adj >= ProcessList.HEAVY_WEIGHT_APP_ADJ) {
+ importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_CANT_SAVE_STATE;
+ } else if (adj >= ProcessList.PERCEPTIBLE_APP_ADJ) {
+ importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_PERCEPTIBLE;
+ } else if (adj >= ProcessList.VISIBLE_APP_ADJ) {
+ importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIBLE;
+ } else if (adj >= ProcessList.FOREGROUND_APP_ADJ) {
+ importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND;
+ } else {
+ importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_PERSISTENT;
+ }
+ }
- if (hadForegroundActivities != app.foregroundActivities) {
- mHandler.obtainMessage(DISPATCH_FOREGROUND_ACTIVITIES_CHANGED, app.pid, app.info.uid,
- app.foregroundActivities).sendToTarget();
+ int changes = importance != app.memImportance ? ProcessChangeItem.CHANGE_IMPORTANCE : 0;
+ if (foregroundActivities != app.foregroundActivities) {
+ changes |= ProcessChangeItem.CHANGE_ACTIVITIES;
+ }
+ if (changes != 0) {
+ if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Changes in " + app + ": " + changes);
+ app.memImportance = importance;
+ app.foregroundActivities = foregroundActivities;
+ int i = mPendingProcessChanges.size()-1;
+ ProcessChangeItem item = null;
+ while (i >= 0) {
+ item = mPendingProcessChanges.get(i);
+ if (item.pid == app.pid) {
+ if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Re-using existing item: " + item);
+ break;
+ }
+ i--;
+ }
+ if (i < 0) {
+ // No existing item in pending changes; need a new one.
+ final int NA = mAvailProcessChanges.size();
+ if (NA > 0) {
+ item = mAvailProcessChanges.remove(NA-1);
+ if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Retreiving available item: " + item);
+ } else {
+ item = new ProcessChangeItem();
+ if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Allocating new item: " + item);
+ }
+ item.changes = 0;
+ item.pid = app.pid;
+ item.uid = app.info.uid;
+ if (mPendingProcessChanges.size() == 0) {
+ if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG,
+ "*** Enqueueing dispatch processes changed!");
+ mHandler.obtainMessage(DISPATCH_PROCESSES_CHANGED).sendToTarget();
+ }
+ mPendingProcessChanges.add(item);
+ }
+ item.changes |= changes;
+ item.importance = importance;
+ item.foregroundActivities = foregroundActivities;
+ if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Item "
+ + Integer.toHexString(System.identityHashCode(item))
+ + " " + app.toShortString() + ": changes=" + item.changes
+ + " importance=" + item.importance
+ + " foreground=" + item.foregroundActivities
+ + " type=" + app.adjType + " source=" + app.adjSource
+ + " target=" + app.adjTarget);
}
return app.curRawAdj;
diff --git a/services/java/com/android/server/am/ProcessRecord.java b/services/java/com/android/server/am/ProcessRecord.java
index 8a3ba7f81418..cba94801c49c 100644
--- a/services/java/com/android/server/am/ProcessRecord.java
+++ b/services/java/com/android/server/am/ProcessRecord.java
@@ -69,6 +69,7 @@ class ProcessRecord {
int curSchedGroup; // Currently desired scheduling class
int setSchedGroup; // Last set to background scheduling class
int trimMemoryLevel; // Last selected memory trimming level
+ int memImportance; // Importance constant computed from curAdj
boolean serviceb; // Process currently is on the service B list
boolean keeping; // Actively running code so don't kill due to that?
boolean setIsForeground; // Running foreground UI when last set?
diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java
index c82f37cbe3ef..c4abac971b64 100644
--- a/services/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -396,6 +396,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
@Override
+ public void onImportanceChanged(int pid, int uid, int importance) {
+ }
+
+ @Override
public void onProcessDied(int pid, int uid) {
mHandler.obtainMessage(MSG_PROCESS_DIED, pid, uid).sendToTarget();
}
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 10919f257869..efbf0d4852a3 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -5437,8 +5437,8 @@ public class WindowManagerService extends IWindowManager.Stub
// window.
including = !ws.mIsImWindow && !ws.isFullscreen(dw, dh);
- if (maxLayer < ws.mWinAnimator.mAnimLayer) {
- maxLayer = ws.mWinAnimator.mAnimLayer;
+ if (maxLayer < ws.mWinAnimator.mSurfaceLayer) {
+ maxLayer = ws.mWinAnimator.mSurfaceLayer;
}
// Don't include wallpaper in bounds calculation
diff --git a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
index 5220d04bb339..1a42f9371087 100644
--- a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
@@ -263,12 +263,19 @@ public class WifiWatchdogStateMachine extends StateMachine {
Context.CONNECTIVITY_SERVICE);
sWifiOnly = (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) == false);
- // Disable for wifi only devices.
- if (Settings.Secure.getString(contentResolver, Settings.Secure.WIFI_WATCHDOG_ON) == null
- && sWifiOnly) {
- log("Disabling watchog for wi-fi only device");
- putSettingsBoolean(contentResolver, Settings.Secure.WIFI_WATCHDOG_ON, false);
+ // Watchdog is always enabled. Poor network detection & walled garden detection
+ // can individually be turned on/off
+ // TODO: Remove this setting & clean up state machine since we always have
+ // watchdog in an enabled state
+ putSettingsBoolean(contentResolver, Settings.Secure.WIFI_WATCHDOG_ON, true);
+
+ // Disable poor network avoidance, but keep watchdog active for walled garden detection
+ if (sWifiOnly) {
+ log("Disabling poor network avoidance for wi-fi only device");
+ putSettingsBoolean(contentResolver,
+ Settings.Secure.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED, false);
}
+
WifiWatchdogStateMachine wwsm = new WifiWatchdogStateMachine(context);
wwsm.start();
return wwsm;