Merge "Fix logging for successive screenshots" into rvc-dev am: 3d5988e778
Change-Id: Ie850056dd01470055462df16f00e5d30e0c9cce7
This commit is contained in:
@@ -431,7 +431,13 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
|
||||
data.createDeleteAction = false;
|
||||
|
||||
if (mSaveInBgTask != null) {
|
||||
mSaveInBgTask.ignoreResult();
|
||||
// just log success/failure for the pre-existing screenshot
|
||||
mSaveInBgTask.setActionsReadyListener(new ActionsReadyListener() {
|
||||
@Override
|
||||
void onActionsReady(SavedImageData imageData) {
|
||||
logSuccessOnActionsReady(imageData);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
mSaveInBgTask = new SaveImageInBackgroundTask(mContext, data);
|
||||
@@ -636,6 +642,52 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
|
||||
mScreenshotPreview.setTranslationY(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets up the action shade and its entrance animation, once we get the screenshot URI.
|
||||
*/
|
||||
private void showUiOnActionsReady(SavedImageData imageData) {
|
||||
logSuccessOnActionsReady(imageData);
|
||||
if (imageData.uri != null) {
|
||||
mScreenshotHandler.post(() -> {
|
||||
if (mScreenshotAnimation != null && mScreenshotAnimation.isRunning()) {
|
||||
mScreenshotAnimation.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
super.onAnimationEnd(animation);
|
||||
createScreenshotActionsShadeAnimation(imageData).start();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
createScreenshotActionsShadeAnimation(imageData).start();
|
||||
}
|
||||
|
||||
AccessibilityManager accessibilityManager = (AccessibilityManager)
|
||||
mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
|
||||
long timeoutMs = accessibilityManager.getRecommendedTimeoutMillis(
|
||||
SCREENSHOT_CORNER_DEFAULT_TIMEOUT_MILLIS,
|
||||
AccessibilityManager.FLAG_CONTENT_CONTROLS);
|
||||
|
||||
mScreenshotHandler.removeMessages(MESSAGE_CORNER_TIMEOUT);
|
||||
mScreenshotHandler.sendMessageDelayed(
|
||||
mScreenshotHandler.obtainMessage(MESSAGE_CORNER_TIMEOUT),
|
||||
timeoutMs);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs success/failure of the screenshot saving task, and shows an error if it failed.
|
||||
*/
|
||||
private void logSuccessOnActionsReady(SavedImageData imageData) {
|
||||
if (imageData.uri == null) {
|
||||
mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_NOT_SAVED);
|
||||
mNotificationsController.notifyScreenshotError(
|
||||
R.string.screenshot_failed_to_capture_text);
|
||||
} else {
|
||||
mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_SAVED);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the animation after taking the screenshot
|
||||
*/
|
||||
@@ -651,43 +703,11 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
|
||||
mScreenshotAnimation = createScreenshotDropInAnimation(w, h, screenRect);
|
||||
|
||||
saveScreenshotInWorkerThread(finisher, new ActionsReadyListener() {
|
||||
@Override
|
||||
void onActionsReady(SavedImageData imageData) {
|
||||
finisher.accept(imageData.uri);
|
||||
if (imageData.uri == null) {
|
||||
mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_NOT_SAVED);
|
||||
mNotificationsController.notifyScreenshotError(
|
||||
R.string.screenshot_failed_to_capture_text);
|
||||
} else {
|
||||
mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_SAVED);
|
||||
mScreenshotHandler.post(() -> {
|
||||
if (mScreenshotAnimation != null && mScreenshotAnimation.isRunning()) {
|
||||
mScreenshotAnimation.addListener(
|
||||
new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
super.onAnimationEnd(animation);
|
||||
createScreenshotActionsShadeAnimation(imageData)
|
||||
.start();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
createScreenshotActionsShadeAnimation(imageData).start();
|
||||
}
|
||||
AccessibilityManager accessibilityManager = (AccessibilityManager)
|
||||
mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
|
||||
long timeoutMs = accessibilityManager.getRecommendedTimeoutMillis(
|
||||
SCREENSHOT_CORNER_DEFAULT_TIMEOUT_MILLIS,
|
||||
AccessibilityManager.FLAG_CONTENT_CONTROLS);
|
||||
|
||||
mScreenshotHandler.removeMessages(MESSAGE_CORNER_TIMEOUT);
|
||||
mScreenshotHandler.sendMessageDelayed(
|
||||
mScreenshotHandler.obtainMessage(MESSAGE_CORNER_TIMEOUT),
|
||||
timeoutMs);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
@Override
|
||||
void onActionsReady(SavedImageData imageData) {
|
||||
showUiOnActionsReady(imageData);
|
||||
}
|
||||
});
|
||||
mScreenshotHandler.post(() -> {
|
||||
if (!mScreenshotLayout.isAttachedToWindow()) {
|
||||
mWindowManager.addView(mScreenshotLayout, mWindowLayoutParams);
|
||||
|
||||
@@ -214,6 +214,7 @@ class SaveImageInBackgroundTask extends AsyncTask<Void, Void, Void> {
|
||||
mImageData.deleteAction = createDeleteAction(mContext, mContext.getResources(), uri);
|
||||
|
||||
mParams.mActionsReadyListener.onActionsReady(mImageData);
|
||||
mParams.finisher.accept(mImageData.uri);
|
||||
mParams.image = null;
|
||||
mParams.errorMsgResId = 0;
|
||||
} catch (Exception e) {
|
||||
@@ -224,22 +225,18 @@ class SaveImageInBackgroundTask extends AsyncTask<Void, Void, Void> {
|
||||
mParams.errorMsgResId = R.string.screenshot_failed_to_save_text;
|
||||
mImageData.reset();
|
||||
mParams.mActionsReadyListener.onActionsReady(mImageData);
|
||||
mParams.finisher.accept(null);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* If we get a new screenshot request while this one is saving, we want to continue saving in
|
||||
* the background but not return anything.
|
||||
* Update the listener run when the saving task completes. Used to avoid showing UI for the
|
||||
* first screenshot when a second one is taken.
|
||||
*/
|
||||
void ignoreResult() {
|
||||
mParams.mActionsReadyListener = new GlobalScreenshot.ActionsReadyListener() {
|
||||
@Override
|
||||
void onActionsReady(GlobalScreenshot.SavedImageData imageData) {
|
||||
// do nothing
|
||||
}
|
||||
};
|
||||
void setActionsReadyListener(GlobalScreenshot.ActionsReadyListener listener) {
|
||||
mParams.mActionsReadyListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user