Merge "Delete framework-updatable-sources filegroup" into sc-dev
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index bf01612..4ee5383 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -941,7 +941,7 @@
}
private void setImeWindowStatus(int visibilityFlags, int backDisposition) {
- mPrivOps.setImeWindowStatus(visibilityFlags, backDisposition);
+ mPrivOps.setImeWindowStatusAsync(visibilityFlags, backDisposition);
}
/** Set region of the keyboard to be avoided from back gesture */
diff --git a/core/java/android/view/InputEventReceiver.java b/core/java/android/view/InputEventReceiver.java
index 5e0579d..25dda5b 100644
--- a/core/java/android/view/InputEventReceiver.java
+++ b/core/java/android/view/InputEventReceiver.java
@@ -54,6 +54,8 @@
InputChannel inputChannel, MessageQueue messageQueue);
private static native void nativeDispose(long receiverPtr);
private static native void nativeFinishInputEvent(long receiverPtr, int seq, boolean handled);
+ private static native void nativeReportTimeline(long receiverPtr, int inputEventId,
+ long gpuCompletedTime, long presentTime);
private static native boolean nativeConsumeBatchedInputEvents(long receiverPtr,
long frameTimeNanos);
private static native String nativeDump(long receiverPtr, String prefix);
@@ -209,11 +211,11 @@
}
/**
- * Report the latency information for a specific input event.
+ * Report the timing / latency information for a specific input event.
*/
- public final void reportLatencyInfo(int inputEventId, long gpuCompletedTime, long presentTime) {
- Trace.traceBegin(Trace.TRACE_TAG_INPUT, "reportLatencyInfo");
- // TODO(b/169866723) : send this data to InputDispatcher via InputChannel
+ public final void reportTimeline(int inputEventId, long gpuCompletedTime, long presentTime) {
+ Trace.traceBegin(Trace.TRACE_TAG_INPUT, "reportTimeline");
+ nativeReportTimeline(mReceiverPtr, inputEventId, gpuCompletedTime, presentTime);
Trace.traceEnd(Trace.TRACE_TAG_INPUT);
}
diff --git a/core/java/android/view/InputEventSender.java b/core/java/android/view/InputEventSender.java
index 40eb438..d144218 100644
--- a/core/java/android/view/InputEventSender.java
+++ b/core/java/android/view/InputEventSender.java
@@ -112,6 +112,16 @@
}
/**
+ * Called when timeline is sent to the publisher.
+ *
+ * @param inputEventId The id of the input event that caused the frame being reported
+ * @param gpuCompletedTime The time when the frame left the app process
+ * @param presentTime The time when the frame was presented on screen
+ */
+ public void onTimelineReported(int inputEventId, long gpuCompletedTime, long presentTime) {
+ }
+
+ /**
* Sends an input event.
* Must be called on the same Looper thread to which the sender is attached.
*
@@ -143,4 +153,11 @@
private void dispatchInputEventFinished(int seq, boolean handled) {
onInputEventFinished(seq, handled);
}
+
+ // Called from native code.
+ @SuppressWarnings("unused")
+ private void dispatchTimelineReported(
+ int inputEventId, long gpuCompletedTime, long presentTime) {
+ onTimelineReported(inputEventId, gpuCompletedTime, presentTime);
+ }
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index c3770f0..e2cf962 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -8601,7 +8601,7 @@
return;
}
final long gpuCompletedTime = data[FrameMetrics.Index.GPU_COMPLETED];
- mReceiver.reportLatencyInfo(inputEventId, gpuCompletedTime, presentTime);
+ mReceiver.reportTimeline(inputEventId, gpuCompletedTime, presentTime);
}
}
HardwareRendererObserver mHardwareRendererObserver;
diff --git a/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl b/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl
index e4dd7b0..20e520e 100644
--- a/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl
+++ b/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl
@@ -29,7 +29,7 @@
* Actual operations are implemented and handled by InputMethodManagerService.
*/
oneway interface IInputMethodPrivilegedOperations {
- void setImeWindowStatus(int vis, int backDisposition, in IVoidResultCallback resultCallback);
+ void setImeWindowStatusAsync(int vis, int backDisposition);
void reportStartInput(in IBinder startInputToken, in IVoidResultCallback resultCallback);
void createInputContentUriToken(in Uri contentUri, in String packageName,
in IIInputContentUriTokenResultCallback resultCallback);
diff --git a/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java b/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java
index 04cf3f3..98c75b9 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java
@@ -95,8 +95,7 @@
}
/**
- * Calls {@link IInputMethodPrivilegedOperations#setImeWindowStatus(int, int,
- * IVoidResultCallback)}.
+ * Calls {@link IInputMethodPrivilegedOperations#setImeWindowStatusAsync(int, int}.
*
* @param vis visibility flags
* @param backDisposition disposition flags
@@ -107,15 +106,13 @@
* @see android.inputmethodservice.InputMethodService#BACK_DISPOSITION_ADJUST_NOTHING
*/
@AnyThread
- public void setImeWindowStatus(int vis, int backDisposition) {
+ public void setImeWindowStatusAsync(int vis, int backDisposition) {
final IInputMethodPrivilegedOperations ops = mOps.getAndWarnIfNull();
if (ops == null) {
return;
}
try {
- final Completable.Void value = Completable.createVoid();
- ops.setImeWindowStatus(vis, backDisposition, ResultCallbacks.of(value));
- Completable.getResult(value);
+ ops.setImeWindowStatusAsync(vis, backDisposition);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/core/jni/android_view_InputEventReceiver.cpp b/core/jni/android_view_InputEventReceiver.cpp
index bfeb01d..44597cc 100644
--- a/core/jni/android_view_InputEventReceiver.cpp
+++ b/core/jni/android_view_InputEventReceiver.cpp
@@ -27,6 +27,7 @@
#include <input/InputTransport.h>
#include <log/log.h>
#include <utils/Looper.h>
+#include <variant>
#include <vector>
#include "android_os_MessageQueue.h"
#include "android_view_InputChannel.h"
@@ -80,6 +81,7 @@
status_t initialize();
void dispose();
status_t finishInputEvent(uint32_t seq, bool handled);
+ status_t reportTimeline(int32_t inputEventId, nsecs_t gpuCompletedTime, nsecs_t presentTime);
status_t consumeEvents(JNIEnv* env, bool consumeBatches, nsecs_t frameTime,
bool* outConsumedBatch);
std::string dump(const char* prefix);
@@ -93,13 +95,19 @@
bool handled;
};
+ struct Timeline {
+ int32_t inputEventId;
+ std::array<nsecs_t, GraphicsTimeline::SIZE> timeline;
+ };
+ typedef std::variant<Finish, Timeline> OutboundEvent;
+
jobject mReceiverWeakGlobal;
InputConsumer mInputConsumer;
sp<MessageQueue> mMessageQueue;
PreallocatedInputEventFactory mInputEventFactory;
bool mBatchedInputEventPending;
int mFdEvents;
- std::vector<Finish> mFinishQueue;
+ std::vector<OutboundEvent> mOutboundQueue;
void setFdEvents(int events);
@@ -152,7 +160,23 @@
.seq = seq,
.handled = handled,
};
- mFinishQueue.push_back(finish);
+ mOutboundQueue.push_back(finish);
+ return processOutboundEvents();
+}
+
+status_t NativeInputEventReceiver::reportTimeline(int32_t inputEventId, nsecs_t gpuCompletedTime,
+ nsecs_t presentTime) {
+ if (kDebugDispatchCycle) {
+ ALOGD("channel '%s' ~ %s", getInputChannelName().c_str(), __func__);
+ }
+ std::array<nsecs_t, GraphicsTimeline::SIZE> graphicsTimeline;
+ graphicsTimeline[GraphicsTimeline::GPU_COMPLETED_TIME] = gpuCompletedTime;
+ graphicsTimeline[GraphicsTimeline::PRESENT_TIME] = presentTime;
+ Timeline timeline{
+ .inputEventId = inputEventId,
+ .timeline = graphicsTimeline,
+ };
+ mOutboundQueue.push_back(timeline);
return processOutboundEvents();
}
@@ -170,7 +194,7 @@
/**
* Receiver's primary role is to receive input events, but it has an additional duty of sending
- * 'ack' for events (using the call 'finishInputEvent').
+ * 'ack' for events (using the call 'finishInputEvent') and reporting input event timeline.
*
* If we are looking at the communication between InputPublisher and InputConsumer, we can say that
* from the InputConsumer's perspective, InputMessage's that are sent from publisher to consumer are
@@ -178,19 +202,31 @@
* InputPublisher are 'outbound / outgoing' events.
*
* NativeInputEventReceiver owns (and acts like) an InputConsumer. So the finish events are outbound
- * from InputEventReceiver (and will be sent to the InputPublisher).
+ * from InputEventReceiver (and will be sent to the InputPublisher). Likewise, timeline events are
+ * outbound events.
*
- * In this function, send as many events from 'mFinishQueue' as possible across the socket to the
+ * In this function, send as many events from 'mOutboundQueue' as possible across the socket to the
* InputPublisher. If no events are remaining, let the looper know so that it doesn't wake up
* unnecessarily.
*/
status_t NativeInputEventReceiver::processOutboundEvents() {
- while (!mFinishQueue.empty()) {
- const Finish& finish = *mFinishQueue.begin();
- status_t status = mInputConsumer.sendFinishedSignal(finish.seq, finish.handled);
+ while (!mOutboundQueue.empty()) {
+ OutboundEvent& outbound = *mOutboundQueue.begin();
+ status_t status;
+
+ if (std::holds_alternative<Finish>(outbound)) {
+ const Finish& finish = std::get<Finish>(outbound);
+ status = mInputConsumer.sendFinishedSignal(finish.seq, finish.handled);
+ } else if (std::holds_alternative<Timeline>(outbound)) {
+ const Timeline& timeline = std::get<Timeline>(outbound);
+ status = mInputConsumer.sendTimeline(timeline.inputEventId, timeline.timeline);
+ } else {
+ LOG_ALWAYS_FATAL("Unexpected event type in std::variant");
+ status = BAD_VALUE;
+ }
if (status == OK) {
// Successful send. Erase the entry and keep trying to send more
- mFinishQueue.erase(mFinishQueue.begin());
+ mOutboundQueue.erase(mOutboundQueue.begin());
continue;
}
@@ -198,7 +234,7 @@
if (status == WOULD_BLOCK) {
if (kDebugDispatchCycle) {
ALOGD("channel '%s' ~ Remaining outbound events: %zu.",
- getInputChannelName().c_str(), mFinishQueue.size());
+ getInputChannelName().c_str(), mOutboundQueue.size());
}
setFdEvents(ALOOPER_EVENT_INPUT | ALOOPER_EVENT_OUTPUT);
return WOULD_BLOCK; // try again later
@@ -425,12 +461,23 @@
out += android::base::StringPrintf("mBatchedInputEventPending: %s\n",
toString(mBatchedInputEventPending));
- out = out + "mFinishQueue:\n";
- for (const Finish& finish : mFinishQueue) {
- out += android::base::StringPrintf(" seq=%" PRIu32 " handled=%s\n", finish.seq,
- toString(finish.handled));
+ out = out + "mOutboundQueue:\n";
+ for (const OutboundEvent& outbound : mOutboundQueue) {
+ if (std::holds_alternative<Finish>(outbound)) {
+ const Finish& finish = std::get<Finish>(outbound);
+ out += android::base::StringPrintf(" Finish: seq=%" PRIu32 " handled=%s\n", finish.seq,
+ toString(finish.handled));
+ } else if (std::holds_alternative<Timeline>(outbound)) {
+ const Timeline& timeline = std::get<Timeline>(outbound);
+ out += android::base::
+ StringPrintf(" Timeline: inputEventId=%" PRId32 " gpuCompletedTime=%" PRId64
+ ", presentTime=%" PRId64 "\n",
+ timeline.inputEventId,
+ timeline.timeline[GraphicsTimeline::GPU_COMPLETED_TIME],
+ timeline.timeline[GraphicsTimeline::PRESENT_TIME]);
+ }
}
- if (mFinishQueue.empty()) {
+ if (mOutboundQueue.empty()) {
out = out + " <empty>\n";
}
return addPrefix(out, prefix);
@@ -489,6 +536,25 @@
}
}
+static void nativeReportTimeline(JNIEnv* env, jclass clazz, jlong receiverPtr, jint inputEventId,
+ jlong gpuCompletedTime, jlong presentTime) {
+ if (IdGenerator::getSource(inputEventId) != IdGenerator::Source::INPUT_READER) {
+ // skip this event, it did not originate from hardware
+ return;
+ }
+ sp<NativeInputEventReceiver> receiver =
+ reinterpret_cast<NativeInputEventReceiver*>(receiverPtr);
+ status_t status = receiver->reportTimeline(inputEventId, gpuCompletedTime, presentTime);
+ if (status == OK || status == WOULD_BLOCK) {
+ return; // normal operation
+ }
+ if (status != DEAD_OBJECT) {
+ std::string message = android::base::StringPrintf("Failed to send timeline. status=%s(%d)",
+ strerror(-status), status);
+ jniThrowRuntimeException(env, message.c_str());
+ }
+}
+
static jboolean nativeConsumeBatchedInputEvents(JNIEnv* env, jclass clazz, jlong receiverPtr,
jlong frameTimeNanos) {
sp<NativeInputEventReceiver> receiver =
@@ -520,6 +586,7 @@
(void*)nativeInit},
{"nativeDispose", "(J)V", (void*)nativeDispose},
{"nativeFinishInputEvent", "(JIZ)V", (void*)nativeFinishInputEvent},
+ {"nativeReportTimeline", "(JIJJ)V", (void*)nativeReportTimeline},
{"nativeConsumeBatchedInputEvents", "(JJ)Z", (void*)nativeConsumeBatchedInputEvents},
{"nativeDump", "(JLjava/lang/String;)Ljava/lang/String;", (void*)nativeDump},
};
diff --git a/core/jni/android_view_InputEventSender.cpp b/core/jni/android_view_InputEventSender.cpp
index 10927b9..fd1b998 100644
--- a/core/jni/android_view_InputEventSender.cpp
+++ b/core/jni/android_view_InputEventSender.cpp
@@ -45,6 +45,7 @@
jclass clazz;
jmethodID dispatchInputEventFinished;
+ jmethodID dispatchTimelineReported;
} gInputEventSenderClassInfo;
@@ -75,9 +76,10 @@
}
int handleEvent(int receiveFd, int events, void* data) override;
- status_t receiveFinishedSignals(JNIEnv* env);
- bool notifyFinishedSignal(JNIEnv* env, jobject sender, const InputPublisher::Finished& finished,
- bool skipCallbacks);
+ status_t processConsumerResponse(JNIEnv* env);
+ bool notifyConsumerResponse(JNIEnv* env, jobject sender,
+ const InputPublisher::ConsumerResponse& response,
+ bool skipCallbacks);
};
NativeInputEventSender::NativeInputEventSender(JNIEnv* env, jobject senderWeak,
@@ -188,12 +190,12 @@
}
JNIEnv* env = AndroidRuntime::getJNIEnv();
- status_t status = receiveFinishedSignals(env);
+ status_t status = processConsumerResponse(env);
mMessageQueue->raiseAndClearException(env, "handleReceiveCallback");
return status == OK || status == NO_MEMORY ? 1 : 0;
}
-status_t NativeInputEventSender::receiveFinishedSignals(JNIEnv* env) {
+status_t NativeInputEventSender::processConsumerResponse(JNIEnv* env) {
if (kDebugDispatchCycle) {
ALOGD("channel '%s' ~ Receiving finished signals.", getInputChannelName().c_str());
}
@@ -206,18 +208,18 @@
}
bool skipCallbacks = false; // stop calling Java functions after an exception occurs
for (;;) {
- Result<InputPublisher::Finished> result = mInputPublisher.receiveFinishedSignal();
+ Result<InputPublisher::ConsumerResponse> result = mInputPublisher.receiveConsumerResponse();
if (!result.ok()) {
const status_t status = result.error().code();
if (status == WOULD_BLOCK) {
return OK;
}
- ALOGE("channel '%s' ~ Failed to consume finished signals. status=%d",
+ ALOGE("channel '%s' ~ Failed to process consumer response. status=%d",
getInputChannelName().c_str(), status);
return status;
}
- const bool notified = notifyFinishedSignal(env, senderObj.get(), *result, skipCallbacks);
+ const bool notified = notifyConsumerResponse(env, senderObj.get(), *result, skipCallbacks);
if (!notified) {
skipCallbacks = true;
}
@@ -225,16 +227,49 @@
}
/**
- * Invoke the Java function dispatchInputEventFinished for the received "Finished" signal.
- * Set the variable 'skipCallbacks' to 'true' if a Java exception occurred.
+ * Invoke the corresponding Java function for the different variants of response.
+ * If the response is a Finished object, invoke dispatchInputEventFinished.
+ * If the response is a Timeline object, invoke dispatchTimelineReported.
+ * Set 'skipCallbacks' to 'true' if a Java exception occurred.
* Java function will only be called if 'skipCallbacks' is originally 'false'.
*
* Return "false" if an exception occurred while calling the Java function
* "true" otherwise
*/
-bool NativeInputEventSender::notifyFinishedSignal(JNIEnv* env, jobject sender,
- const InputPublisher::Finished& finished,
- bool skipCallbacks) {
+bool NativeInputEventSender::notifyConsumerResponse(
+ JNIEnv* env, jobject sender, const InputPublisher::ConsumerResponse& response,
+ bool skipCallbacks) {
+ if (std::holds_alternative<InputPublisher::Timeline>(response)) {
+ const InputPublisher::Timeline& timeline = std::get<InputPublisher::Timeline>(response);
+
+ if (kDebugDispatchCycle) {
+ ALOGD("channel '%s' ~ Received timeline, inputEventId=%" PRId32
+ ", gpuCompletedTime=%" PRId64 ", presentTime=%" PRId64,
+ getInputChannelName().c_str(), timeline.inputEventId,
+ timeline.graphicsTimeline[GraphicsTimeline::GPU_COMPLETED_TIME],
+ timeline.graphicsTimeline[GraphicsTimeline::PRESENT_TIME]);
+ }
+
+ if (skipCallbacks) {
+ ALOGW("Java exception occurred. Skipping dispatchTimelineReported for "
+ "inputEventId=%" PRId32,
+ timeline.inputEventId);
+ return true;
+ }
+
+ env->CallVoidMethod(sender, gInputEventSenderClassInfo.dispatchTimelineReported,
+ timeline.inputEventId, timeline.graphicsTimeline);
+ if (env->ExceptionCheck()) {
+ ALOGE("Exception dispatching timeline, inputEventId=%" PRId32, timeline.inputEventId);
+ return false;
+ }
+
+ return true;
+ }
+
+ // Must be a Finished event
+ const InputPublisher::Finished& finished = std::get<InputPublisher::Finished>(response);
+
auto it = mPublishedSeqMap.find(finished.seq);
if (it == mPublishedSeqMap.end()) {
ALOGW("Received 'finished' signal for unknown seq number = %" PRIu32, finished.seq);
@@ -340,6 +375,9 @@
gInputEventSenderClassInfo.dispatchInputEventFinished = GetMethodIDOrDie(
env, gInputEventSenderClassInfo.clazz, "dispatchInputEventFinished", "(IZ)V");
+ gInputEventSenderClassInfo.dispatchTimelineReported =
+ GetMethodIDOrDie(env, gInputEventSenderClassInfo.clazz, "dispatchTimelineReported",
+ "(IJJ)V");
return res;
}
diff --git a/libs/WindowManager/Shell/res/values/config.xml b/libs/WindowManager/Shell/res/values/config.xml
index 2c2b404..0e78377 100644
--- a/libs/WindowManager/Shell/res/values/config.xml
+++ b/libs/WindowManager/Shell/res/values/config.xml
@@ -49,12 +49,6 @@
when the PIP menu is shown in center. -->
<string translatable="false" name="pip_menu_bounds">"596 280 1324 690"</string>
- <!-- one handed background panel default color RGB -->
- <item name="config_one_handed_background_rgb" format="float" type="dimen">0.5</item>
-
- <!-- one handed background panel default alpha -->
- <item name="config_one_handed_background_alpha" format="float" type="dimen">0.5</item>
-
<!-- maximum animation duration for the icon when entering the starting window -->
<integer name="max_starting_window_intro_icon_anim_duration">1000</integer>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java
index c7dbe88..703eba9 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java
@@ -17,7 +17,7 @@
package com.android.wm.shell.onehanded;
import android.content.Context;
-import android.content.res.Resources;
+import android.graphics.Color;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.util.Log;
@@ -30,6 +30,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
+import androidx.core.content.ContextCompat;
import com.android.internal.annotations.GuardedBy;
import com.android.wm.shell.R;
@@ -50,8 +51,7 @@
private final Object mLock = new Object();
private final SurfaceSession mSurfaceSession = new SurfaceSession();
- private final float[] mColor;
- private final float mAlpha;
+ private final float[] mDefaultColor;
private final Executor mMainExecutor;
private final OneHandedSurfaceTransactionHelper.SurfaceControlTransactionFactory
mSurfaceControlTransactionFactory;
@@ -88,16 +88,15 @@
public OneHandedBackgroundPanelOrganizer(Context context, DisplayLayout displayLayout,
Executor executor) {
super(executor);
- final Resources res = context.getResources();
- final float defaultRGB = res.getFloat(R.dimen.config_one_handed_background_rgb);
- mColor = new float[]{defaultRGB, defaultRGB, defaultRGB};
- mAlpha = res.getFloat(R.dimen.config_one_handed_background_alpha);
// Ensure the mBkgBounds is portrait, due to OHM only support on portrait
if (displayLayout.height() > displayLayout.width()) {
mBkgBounds = new Rect(0, 0, displayLayout.width(), displayLayout.height());
} else {
mBkgBounds = new Rect(0, 0, displayLayout.height(), displayLayout.width());
}
+ final int defaultColor = ContextCompat.getColor(context, R.color.GM2_grey_800);
+ mDefaultColor = new float[]{Color.red(defaultColor) / 255.0f,
+ Color.green(defaultColor) / 255.0f, Color.blue(defaultColor) / 255.0f};
mMainExecutor = executor;
mSurfaceControlTransactionFactory = SurfaceControl.Transaction::new;
}
@@ -153,8 +152,8 @@
.setParent(mParentLeash)
.setBufferSize(mBkgBounds.width(), mBkgBounds.height())
.setColorLayer()
- .setFormat(PixelFormat.RGBA_8888)
- .setOpaque(false)
+ .setFormat(PixelFormat.RGB_888)
+ .setOpaque(true)
.setName("one-handed-background-panel")
.setCallsite("OneHandedBackgroundPanelOrganizer")
.build();
@@ -178,8 +177,7 @@
SurfaceControl.Transaction transaction =
mSurfaceControlTransactionFactory.getTransaction();
transaction.setLayer(mBackgroundSurface, -1 /* at bottom-most layer */)
- .setColor(mBackgroundSurface, mColor)
- .setAlpha(mBackgroundSurface, mAlpha)
+ .setColor(mBackgroundSurface, mDefaultColor)
.show(mBackgroundSurface)
.apply();
transaction.close();
@@ -210,5 +208,7 @@
pw.println(mIsShowing);
pw.print(innerPrefix + "mBkgBounds=");
pw.println(mBkgBounds);
+ pw.print(innerPrefix + "mDefaultColor=");
+ pw.println(mDefaultColor);
}
}
diff --git a/packages/PrintSpooler/res/values-iw/strings.xml b/packages/PrintSpooler/res/values-iw/strings.xml
index 5dcd7f2..1850233 100644
--- a/packages/PrintSpooler/res/values-iw/strings.xml
+++ b/packages/PrintSpooler/res/values-iw/strings.xml
@@ -27,7 +27,7 @@
<string name="label_duplex" msgid="5370037254347072243">"דו-צדדי"</string>
<string name="label_orientation" msgid="2853142581990496477">"כיוון"</string>
<string name="label_pages" msgid="7768589729282182230">"עמודים"</string>
- <string name="destination_default_text" msgid="5422708056807065710">"בחר מדפסת"</string>
+ <string name="destination_default_text" msgid="5422708056807065710">"בחירת מדפסת"</string>
<string name="template_all_pages" msgid="3322235982020148762">"הכל <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
<string name="template_page_range" msgid="428638530038286328">"טווח של <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
<string name="pages_range_example" msgid="8558694453556945172">"למשל 1–5,8,11–13"</string>
@@ -41,7 +41,7 @@
<string name="current_page_template" msgid="5145005201131935302">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
<string name="page_description_template" msgid="6831239682256197161">"עמוד <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> מתוך <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
<string name="summary_template" msgid="8899734908625669193">"סיכום, עותקים <xliff:g id="COPIES">%1$s</xliff:g>, גודל נייר <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string>
- <string name="expand_handle" msgid="7282974448109280522">"ידית הרחבה"</string>
+ <string name="expand_handle" msgid="7282974448109280522">"נקודת אחיזה להרחבה"</string>
<string name="collapse_handle" msgid="6886637989442507451">"ידית כיווץ"</string>
<string name="print_button" msgid="645164566271246268">"הדפס"</string>
<string name="savetopdf_button" msgid="2976186791686924743">"שמירה כ-PDF"</string>
@@ -72,7 +72,7 @@
<string name="print_no_printers" msgid="4869403323900054866">"לא נמצאו מדפסות"</string>
<string name="cannot_add_printer" msgid="7840348733668023106">"לא ניתן להוסיף מדפסות"</string>
<string name="select_to_add_printers" msgid="3800709038689830974">"בחר כדי להוסיף מדפסת"</string>
- <string name="enable_print_service" msgid="3482815747043533842">"בחר כדי להפעיל"</string>
+ <string name="enable_print_service" msgid="3482815747043533842">"צריך לבחור כדי להפעיל"</string>
<string name="enabled_services_title" msgid="7036986099096582296">"שירותים מופעלים"</string>
<string name="recommended_services_title" msgid="3799434882937956924">"שירותים מומלצים"</string>
<string name="disabled_services_title" msgid="7313253167968363211">"שירותים מושבתים"</string>
@@ -84,7 +84,7 @@
<item quantity="one">התקן כדי לגלות מדפסת <xliff:g id="COUNT_0">%1$s</xliff:g></item>
</plurals>
<string name="printing_notification_title_template" msgid="295903957762447362">"מדפיס את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
- <string name="cancelling_notification_title_template" msgid="1821759594704703197">"מבטל את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"המערכת מבטלת את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"שגיאת מדפסת ב-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="blocked_notification_title_template" msgid="1175435827331588646">"המדפסת חסמה את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancel" msgid="4373674107267141885">"ביטול"</string>
@@ -111,5 +111,5 @@
<string name="print_error_retry" msgid="1426421728784259538">"כדאי לנסות שוב"</string>
<string name="print_error_printer_unavailable" msgid="8985614415253203381">"המדפסת הזו אינה זמינה כעת."</string>
<string name="print_cannot_load_page" msgid="6179560924492912009">"לא ניתן להציג תצוגה מקדימה"</string>
- <string name="print_preparing_preview" msgid="3939930735671364712">"מכין תצוגה מקדימה…"</string>
+ <string name="print_preparing_preview" msgid="3939930735671364712">"בתהליך יצירת תצוגה מקדימה…"</string>
</resources>
diff --git a/packages/PrintSpooler/res/values-ml/strings.xml b/packages/PrintSpooler/res/values-ml/strings.xml
deleted file mode 100644
index 73af95d..0000000
--- a/packages/PrintSpooler/res/values-ml/strings.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
- <string name="more_options_button" msgid="2243228396432556771">"കൂടുതൽ ഓപ്ഷനുകൾ"</string>
- <string name="label_destination" msgid="9132510997381599275">"ലക്ഷ്യസ്ഥാനം"</string>
- <string name="label_copies" msgid="3634531042822968308">"പകർപ്പുകൾ"</string>
- <string name="label_copies_summary" msgid="3861966063536529540">"പകർപ്പുകൾ:"</string>
- <string name="label_paper_size" msgid="908654383827777759">"പേപ്പർ വലുപ്പം"</string>
- <string name="label_paper_size_summary" msgid="5668204981332138168">"പേപ്പർ വലുപ്പം:"</string>
- <string name="label_color" msgid="1108690305218188969">"നിറം"</string>
- <string name="label_duplex" msgid="5370037254347072243">"രണ്ട് വശങ്ങളുള്ളത്"</string>
- <string name="label_orientation" msgid="2853142581990496477">"ഓറിയന്റേഷന്"</string>
- <string name="label_pages" msgid="7768589729282182230">"പേജുകൾ"</string>
- <string name="destination_default_text" msgid="5422708056807065710">"ഒരു പ്രിന്റർ തിരഞ്ഞെടുക്കുക"</string>
- <string name="template_all_pages" msgid="3322235982020148762">"എല്ലാ <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
- <string name="template_page_range" msgid="428638530038286328">"<xliff:g id="PAGE_COUNT">%1$s</xliff:g> എന്നതിന്റെ പരിധി"</string>
- <string name="pages_range_example" msgid="8558694453556945172">"ഉദാ. 1—5,8,11—13"</string>
- <string name="print_preview" msgid="8010217796057763343">"പ്രിന്റ് പ്രിവ്യൂ"</string>
- <string name="install_for_print_preview" msgid="6366303997385509332">"പ്രിവ്യൂ കാണിക്കുന്നതിന് PDF വ്യൂവർ ഇൻസ്റ്റാൾ ചെയ്യുക"</string>
- <string name="printing_app_crashed" msgid="854477616686566398">"പ്രിന്റുചെയ്യൽ അപ്ലിക്കേഷൻ ക്രാഷായി"</string>
- <string name="generating_print_job" msgid="3119608742651698916">"പ്രിന്റ് ജോലി സൃഷ്ടിക്കുന്നു"</string>
- <string name="save_as_pdf" msgid="5718454119847596853">"PDF-ആയി സംരക്ഷിക്കൂ"</string>
- <string name="all_printers" msgid="5018829726861876202">"എല്ലാ പ്രിന്ററുകളും..."</string>
- <string name="print_dialog" msgid="32628687461331979">"പ്രിന്റ് സംഭാഷണം"</string>
- <string name="current_page_template" msgid="5145005201131935302">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
- <string name="page_description_template" msgid="6831239682256197161">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> / <xliff:g id="PAGE_COUNT">%2$d</xliff:g> പേജ്"</string>
- <string name="summary_template" msgid="8899734908625669193">"സംഗ്രഹം, പകർപ്പുകൾ <xliff:g id="COPIES">%1$s</xliff:g>, പേപ്പർ വലുപ്പം <xliff:g id="PAPER_SIZE">%2$s</xliff:g> എന്നിവ"</string>
- <string name="expand_handle" msgid="7282974448109280522">"വിപുലീകരണം കൈകാര്യം ചെയ്യുക"</string>
- <string name="collapse_handle" msgid="6886637989442507451">"ചുരുക്കുന്നത് കൈകാര്യം ചെയ്യുക"</string>
- <string name="print_button" msgid="645164566271246268">"പ്രിന്റുചെയ്യുക"</string>
- <string name="savetopdf_button" msgid="2976186791686924743">"PDF-ൽ സംരക്ഷിക്കുക"</string>
- <string name="print_options_expanded" msgid="6944679157471691859">"പ്രിന്റ് ചെയ്യാനുള്ള ഓപ്ഷനുകൾ വിപുലീകരിച്ചു"</string>
- <string name="print_options_collapsed" msgid="7455930445670414332">"പ്രിന്റ് ചെയ്യാനുള്ള ഓപ്ഷനുകൾ ചുരുക്കി"</string>
- <string name="search" msgid="5421724265322228497">"Search"</string>
- <string name="all_printers_label" msgid="3178848870161526399">"എല്ലാ പ്രിന്ററുകളും"</string>
- <string name="add_print_service_label" msgid="5356702546188981940">"സേവനം ചേർക്കുക"</string>
- <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"തിരയൽ ബോക്സ് ദൃശ്യമാക്കിയിരിക്കുന്നു"</string>
- <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"തിരയൽ ബോക്സ് മറച്ചിരിക്കുന്നു"</string>
- <string name="print_add_printer" msgid="1088656468360653455">"പ്രിന്റർ ചേർക്കുക"</string>
- <string name="print_select_printer" msgid="7388760939873368698">"പ്രിന്റർ തിരഞ്ഞെടുക്കുക"</string>
- <string name="print_forget_printer" msgid="5035287497291910766">"പ്രിന്റർ മറന്നു"</string>
- <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868">
- <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> പ്രിന്ററുകൾ കണ്ടെത്തി</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> പ്രിന്റർ കണ്ടെത്തി</item>
- </plurals>
- <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
- <string name="printer_info_desc" msgid="7181988788991581654">"ഈ പ്രിന്ററിനെ കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾ"</string>
- <string name="notification_channel_progress" msgid="872788690775721436">"നടന്നുകൊണ്ടിരിക്കുന്ന പ്രിന്റ് ജോലികൾ"</string>
- <string name="notification_channel_failure" msgid="9042250774797916414">"പരാജയപ്പെട്ട പ്രിന്റ് ജോലികൾ"</string>
- <string name="could_not_create_file" msgid="3425025039427448443">"ഫയൽ സൃഷ്ടിക്കാൻ കഴിഞ്ഞില്ല"</string>
- <string name="print_services_disabled_toast" msgid="9089060734685174685">"ചില പ്രിന്റ് സേവനങ്ങൾ പ്രവർത്തനരഹിതമാക്കി"</string>
- <string name="print_searching_for_printers" msgid="6550424555079932867">"പ്രിന്ററുകൾക്കായി തിരയുന്നു"</string>
- <string name="print_no_print_services" msgid="8561247706423327966">"പ്രിന്റ് സേവനങ്ങളൊന്നും പ്രവർത്തനക്ഷമാക്കിയിട്ടില്ല"</string>
- <string name="print_no_printers" msgid="4869403323900054866">"പ്രിന്ററുകളൊന്നും കണ്ടെത്തിയില്ല"</string>
- <string name="cannot_add_printer" msgid="7840348733668023106">"പ്രിന്ററുകൾ ചേർക്കാൻ കഴിയില്ല"</string>
- <string name="select_to_add_printers" msgid="3800709038689830974">"പ്രിന്റർ ചേർക്കാൻ തിരഞ്ഞെടുക്കുക"</string>
- <string name="enable_print_service" msgid="3482815747043533842">"പ്രവർത്തനക്ഷമമാക്കാൻ തിരഞ്ഞെടുക്കുക"</string>
- <string name="enabled_services_title" msgid="7036986099096582296">"പ്രവർത്തനക്ഷമമാക്കിയ സേവനങ്ങൾ"</string>
- <string name="recommended_services_title" msgid="3799434882937956924">"ശുപാർശ ചെയ്യപ്പെടുന്ന സേവനങ്ങൾ"</string>
- <string name="disabled_services_title" msgid="7313253167968363211">"പ്രവർത്തനരഹിതമാക്കിയ സേവനങ്ങൾ"</string>
- <string name="all_services_title" msgid="5578662754874906455">"എല്ലാ സേവനങ്ങളും"</string>
- <plurals name="print_services_recommendation_subtitle" formatted="false" msgid="5678487708807185138">
- <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> പ്രിന്ററുകൾ കണ്ടെത്തുന്നതിന് ഇൻസ്റ്റാൾ ചെയ്യുക</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> പ്രിന്റർ കണ്ടെത്തുന്നതിന് ഇൻസ്റ്റാൾ ചെയ്യുക</item>
- </plurals>
- <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> പ്രിന്റുചെയ്യുന്നു"</string>
- <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> റദ്ദാക്കുന്നു"</string>
- <string name="failed_notification_title_template" msgid="2256217208186530973">"പ്രിന്റർ പിശക് <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
- <string name="blocked_notification_title_template" msgid="1175435827331588646">"പ്രിന്റർ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> തടഞ്ഞു"</string>
- <string name="cancel" msgid="4373674107267141885">"റദ്ദാക്കുക"</string>
- <string name="restart" msgid="2472034227037808749">"പുനരാരംഭിക്കുക"</string>
- <string name="no_connection_to_printer" msgid="2159246915977282728">"പ്രിന്ററിൽ കണക്ഷനൊന്നുമില്ല"</string>
- <string name="reason_unknown" msgid="5507940196503246139">"അജ്ഞാതം"</string>
- <string name="print_service_security_warning_title" msgid="2160752291246775320">"<xliff:g id="SERVICE">%1$s</xliff:g> ഉപയോഗിക്കണോ?"</string>
- <string name="print_service_security_warning_summary" msgid="1427434625361692006">"നിങ്ങളുടെ പ്രമാണം പ്രിന്ററിലേക്ക് പോകുന്നതിനിടെ അത് ഒന്നോ അതിലധികമോ സെർവറുകളിലൂടെ കടന്നുപോകാനിടയുണ്ട്."</string>
- <string-array name="color_mode_labels">
- <item msgid="7602948745415174937">"കറുപ്പ് & വെള്ള"</item>
- <item msgid="2762241247228983754">"നിറം"</item>
- </string-array>
- <string-array name="duplex_mode_labels">
- <item msgid="3882302912790928315">"ഒന്നുമില്ല"</item>
- <item msgid="7296563835355641719">"നീളമുള്ള അരിക്"</item>
- <item msgid="79513688117503758">"ഹ്രസ്വ അരിക്"</item>
- </string-array>
- <string-array name="orientation_labels">
- <item msgid="4061931020926489228">"പോർട്രെയ്റ്റ്"</item>
- <item msgid="3199660090246166812">"ലാൻഡ്സ്കേപ്പ്"</item>
- </string-array>
- <string name="print_write_error_message" msgid="5787642615179572543">"ഫയലിൽ റൈറ്റുചെയ്യാനായില്ല"</string>
- <string name="print_error_default_message" msgid="8602678405502922346">"ക്ഷമിക്കണം, അത് പ്രവർത്തിച്ചില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
- <string name="print_error_retry" msgid="1426421728784259538">"വീണ്ടും ശ്രമിക്കുക"</string>
- <string name="print_error_printer_unavailable" msgid="8985614415253203381">"ഈ പ്രിന്ററർ ഇപ്പോൾ ലഭ്യമല്ല."</string>
- <string name="print_cannot_load_page" msgid="6179560924492912009">"പ്രിവ്യൂ കാണിക്കാൻ കഴിയില്ല"</string>
- <string name="print_preparing_preview" msgid="3939930735671364712">"പ്രിവ്യൂ തയ്യാറാക്കുന്നു…"</string>
-</resources>
diff --git a/packages/PrintSpooler/res/values-nl/strings.xml b/packages/PrintSpooler/res/values-nl/strings.xml
index 2cd8d9b..79cb1ae 100644
--- a/packages/PrintSpooler/res/values-nl/strings.xml
+++ b/packages/PrintSpooler/res/values-nl/strings.xml
@@ -64,9 +64,9 @@
<string name="notification_channel_progress" msgid="872788690775721436">"Actieve afdruktaken"</string>
<string name="notification_channel_failure" msgid="9042250774797916414">"Mislukte afdruktaken"</string>
<string name="could_not_create_file" msgid="3425025039427448443">"Kan bestand niet maken"</string>
- <string name="print_services_disabled_toast" msgid="9089060734685174685">"Sommige afdrukservices zijn uitgeschakeld"</string>
+ <string name="print_services_disabled_toast" msgid="9089060734685174685">"Sommige afdrukservices zijn uitgezet"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Printers zoeken"</string>
- <string name="print_no_print_services" msgid="8561247706423327966">"Geen afdrukservices ingeschakeld"</string>
+ <string name="print_no_print_services" msgid="8561247706423327966">"Geen afdrukservices aangezet"</string>
<string name="print_no_printers" msgid="4869403323900054866">"Geen printers gevonden"</string>
<string name="cannot_add_printer" msgid="7840348733668023106">"Kan geen printers toevoegen"</string>
<string name="select_to_add_printers" msgid="3800709038689830974">"Selecteer om printer toe te voegen"</string>
diff --git a/packages/SystemUI/res/raw/image_wallpaper_fragment_shader.glsl b/packages/SystemUI/res/raw/image_wallpaper_fragment_shader.glsl
index e9c8389..7aca9f8 100644
--- a/packages/SystemUI/res/raw/image_wallpaper_fragment_shader.glsl
+++ b/packages/SystemUI/res/raw/image_wallpaper_fragment_shader.glsl
@@ -46,7 +46,7 @@
// Transform it using the S curve created by the smoothstep. This will increase the contrast.
lum = smoothstep(0., 1., lum) + 0.001;
- lum = relativeExposureCompensation(lum, mix(-15., 10., uExposure));
+ lum = relativeExposureCompensation(lum, mix(-5., 10., uExposure));
lum = mix(clamp(lum, 0.0, 1.0), 1.0, normalizedRange(uExposure, 0.55, 1.0));
color.rgb *= lum;
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 52401cf..3ac11da 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -5975,10 +5975,8 @@
@BinderThread
@Override
- public void setImeWindowStatus(int vis, int backDisposition,
- IVoidResultCallback resultCallback) {
- CallbackUtils.onResult(resultCallback,
- () -> mImms.setImeWindowStatus(mToken, vis, backDisposition));
+ public void setImeWindowStatusAsync(int vis, int backDisposition) {
+ mImms.setImeWindowStatus(mToken, vis, backDisposition);
}
@BinderThread
diff --git a/services/core/java/com/android/server/os/NativeTombstoneManager.java b/services/core/java/com/android/server/os/NativeTombstoneManager.java
index cc6a824..ed1f5f5 100644
--- a/services/core/java/com/android/server/os/NativeTombstoneManager.java
+++ b/services/core/java/com/android/server/os/NativeTombstoneManager.java
@@ -392,7 +392,7 @@
int pid = 0;
int uid = 0;
- String processName = "";
+ String processName = null;
String crashReason = "";
String selinuxLabel = "";
@@ -407,8 +407,10 @@
uid = stream.readInt(Tombstone.UID);
break;
- case (int) Tombstone.PROCESS_NAME:
- processName = stream.readString(Tombstone.PROCESS_NAME);
+ case (int) Tombstone.COMMAND_LINE:
+ if (processName == null) {
+ processName = stream.readString(Tombstone.COMMAND_LINE);
+ }
break;
case (int) Tombstone.CAUSES:
@@ -472,7 +474,7 @@
result.mAppId = appId;
result.mPid = pid;
result.mUid = uid;
- result.mProcessName = processName;
+ result.mProcessName = processName == null ? "" : processName;
result.mTimestampMs = timestampMs;
result.mCrashReason = crashReason;
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index a4a0866..b36c25c 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -6060,12 +6060,10 @@
int idx = mChildren.size() - 1;
while (idx >= 0) {
final Task child = (Task) getChildAt(idx--);
- if (!child.isFocusableAndVisible()) {
- break;
+ if (!child.isTopActivityFocusable()) {
+ continue;
}
-
- // Only allow one activity to be resumed among sibling tasks in split-screen.
- if (inSplitScreenWindowingMode() && someActivityResumed) {
+ if (child.getVisibility(null /* starting */) != TASK_VISIBILITY_VISIBLE) {
break;
}
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java
index 88e9ae9..3799067 100644
--- a/services/core/java/com/android/server/wm/TaskDisplayArea.java
+++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java
@@ -346,6 +346,12 @@
position = findPositionForRootTask(position, task, true /* adding */);
super.addChild(task, position);
+ if (mPreferredTopFocusableRootTask != null
+ && task.isFocusable()
+ && mPreferredTopFocusableRootTask.compareTo(task) < 0) {
+ // Clear preferred top because the adding focusable task has a higher z-order.
+ mPreferredTopFocusableRootTask = null;
+ }
mAtmService.updateSleepIfNeededLocked();
onRootTaskOrderChanged(task);
}
@@ -439,6 +445,11 @@
// Update the top resumed activity because the preferred top focusable task may be changed.
mAtmService.mTaskSupervisor.updateTopResumedActivityIfNeeded();
+ final ActivityRecord r = child.getResumedActivity();
+ if (r != null && r == mRootWindowContainer.getTopResumedActivity()) {
+ mAtmService.setResumedActivityUncheckLocked(r, "positionChildAt");
+ }
+
if (mChildren.indexOf(child) != oldPosition) {
onRootTaskOrderChanged(child);
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 1858712..807edca 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -16975,18 +16975,13 @@
final long identity = Binder.clearCallingIdentity();
try {
- // TODO(b/178187130): This check fails silent provisioning, uncomment once silent
- // provisioning is no longer used.
- if (false) {
- int result = checkProvisioningPreConditionSkipPermission(
- ACTION_PROVISION_MANAGED_DEVICE, deviceAdmin.getPackageName());
- if (result != CODE_OK) {
- throw new ServiceSpecificException(
- PROVISIONING_RESULT_PRE_CONDITION_FAILED,
- "Provisioning preconditions failed with result: " + result);
- }
+ int result = checkProvisioningPreConditionSkipPermission(
+ ACTION_PROVISION_MANAGED_DEVICE, deviceAdmin.getPackageName());
+ if (result != CODE_OK) {
+ throw new ServiceSpecificException(
+ PROVISIONING_RESULT_PRE_CONDITION_FAILED,
+ "Provisioning preconditions failed with result: " + result);
}
-
setTimeAndTimezone(provisioningParams.getTimeZone(), provisioningParams.getLocalTime());
setLocale(provisioningParams.getLocale());
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
index 027c2f7..ab9aa26 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -2157,6 +2157,8 @@
attrs.setTitle("AppWindow");
final TestWindowState appWindow = createWindowState(attrs, activity);
activity.addWindow(appWindow);
+ spyOn(appWindow);
+ doNothing().when(appWindow).onStartFreezingScreen();
// Set initial orientation and update.
activity.setOrientation(SCREEN_ORIENTATION_LANDSCAPE);
@@ -2193,6 +2195,8 @@
attrs.setTitle("RotationByPolicy");
final TestWindowState appWindow = createWindowState(attrs, activity);
activity.addWindow(appWindow);
+ spyOn(appWindow);
+ doNothing().when(appWindow).onStartFreezingScreen();
// Set initial orientation and update.
performRotation(displayRotation, Surface.ROTATION_90);
diff --git a/tests/Input/src/com/android/test/input/InputEventSenderAndReceiverTest.kt b/tests/Input/src/com/android/test/input/InputEventSenderAndReceiverTest.kt
index b134fe7..fc1d839 100644
--- a/tests/Input/src/com/android/test/input/InputEventSenderAndReceiverTest.kt
+++ b/tests/Input/src/com/android/test/input/InputEventSenderAndReceiverTest.kt
@@ -75,16 +75,26 @@
class TestInputEventSender(channel: InputChannel, looper: Looper) :
InputEventSender(channel, looper) {
data class FinishedSignal(val seq: Int, val handled: Boolean)
+ data class Timeline(val inputEventId: Int, val gpuCompletedTime: Long, val presentTime: Long)
private val mFinishedSignals = LinkedBlockingQueue<FinishedSignal>()
+ private val mTimelines = LinkedBlockingQueue<Timeline>()
override fun onInputEventFinished(seq: Int, handled: Boolean) {
mFinishedSignals.put(FinishedSignal(seq, handled))
}
+ override fun onTimelineReported(inputEventId: Int, gpuCompletedTime: Long, presentTime: Long) {
+ mTimelines.put(Timeline(inputEventId, gpuCompletedTime, presentTime))
+ }
+
fun getFinishedSignal(): FinishedSignal {
return getEvent(mFinishedSignals)
}
+
+ fun getTimeline(): Timeline {
+ return getEvent(mTimelines)
+ }
}
class InputEventSenderAndReceiverTest {
@@ -125,4 +135,14 @@
// Check sender
assertEquals(TestInputEventSender.FinishedSignal(seq, handled = true), finishedSignal)
}
+
+ // The timeline case is slightly unusual because it goes from InputConsumer to InputPublisher.
+ @Test
+ fun testSendAndReceiveTimeline() {
+ val sent = TestInputEventSender.Timeline(
+ inputEventId = 1, gpuCompletedTime = 2, presentTime = 3)
+ mReceiver.reportTimeline(sent.inputEventId, sent.gpuCompletedTime, sent.presentTime)
+ val received = mSender.getTimeline()
+ assertEquals(sent, received)
+ }
}