diff options
3 files changed, 35 insertions, 21 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java index a6433ae94b2b..89efda98a5b6 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java @@ -46,6 +46,7 @@ public class LongScreenshotActivity extends Activity { private final UiEventLogger mUiEventLogger; private final ScrollCaptureController mScrollCaptureController; + private final ScrollCaptureClient.Connection mConnection; private ImageView mPreview; private View mSave; @@ -69,8 +70,10 @@ public class LongScreenshotActivity extends Activity { Context context) { mUiEventLogger = uiEventLogger; - mScrollCaptureController = new ScrollCaptureController(context, - ScreenshotController.sScrollConnection, mainExecutor, bgExecutor, imageExporter); + mScrollCaptureController = new ScrollCaptureController(context, mainExecutor, bgExecutor, + imageExporter); + + mConnection = ScreenshotController.takeScrollCaptureConnection(); } @Override @@ -98,15 +101,20 @@ public class LongScreenshotActivity extends Activity { public void onStart() { super.onStart(); if (mPreview.getDrawable() == null) { + if (mConnection == null) { + Log.e(TAG, "Failed to get scroll capture connection, bailing out"); + finishAndRemoveTask(); + return; + } doCapture(); } } - private void disableButtons() { - mSave.setEnabled(false); - mCancel.setEnabled(false); - mEdit.setEnabled(false); - mShare.setEnabled(false); + private void setButtonsEnabled(boolean enabled) { + mSave.setEnabled(enabled); + mCancel.setEnabled(enabled); + mEdit.setEnabled(enabled); + mShare.setEnabled(enabled); } private void doEdit(Uri uri) { @@ -115,8 +123,7 @@ public class LongScreenshotActivity extends Activity { if (!TextUtils.isEmpty(editorPackage)) { intent.setComponent(ComponentName.unflattenFromString(editorPackage)); } - intent.setType("image/png"); - intent.setData(uri); + intent.setDataAndType(uri, "image/png"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); @@ -127,12 +134,11 @@ public class LongScreenshotActivity extends Activity { private void doShare(Uri uri) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("image/png"); - intent.setData(uri); + intent.putExtra(Intent.EXTRA_STREAM, uri); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION); Intent sharingChooserIntent = Intent.createChooser(intent, null) - .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_GRANT_READ_URI_PERMISSION); + .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivityAsUser(sharingChooserIntent, UserHandle.CURRENT); } @@ -140,7 +146,7 @@ public class LongScreenshotActivity extends Activity { private void onClicked(View v) { int id = v.getId(); v.setPressed(true); - disableButtons(); + setButtonsEnabled(false); if (id == R.id.save) { startExport(PendingAction.SAVE); } else if (id == R.id.cancel) { @@ -160,10 +166,12 @@ public class LongScreenshotActivity extends Activity { @Override public void onError() { Log.e(TAG, "Error exporting image data."); + setButtonsEnabled(true); } @Override public void onExportComplete(Uri outputUri) { + setButtonsEnabled(true); switch (action) { case EDIT: doEdit(outputUri); @@ -181,7 +189,8 @@ public class LongScreenshotActivity extends Activity { } private void doCapture() { - mScrollCaptureController.start(new ScrollCaptureController.ScrollCaptureCallback() { + mScrollCaptureController.start(mConnection, + new ScrollCaptureController.ScrollCaptureCallback() { @Override public void onError() { Log.e(TAG, "Error!"); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java index 31c693bdde1f..131fde6b4b56 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java @@ -101,7 +101,7 @@ import javax.inject.Inject; public class ScreenshotController { private static final String TAG = logTag(ScreenshotController.class); - public static ScrollCaptureClient.Connection sScrollConnection; + private static ScrollCaptureClient.Connection sScrollConnection; /** * POD used in the AsyncTask which saves an image in the background. @@ -222,6 +222,12 @@ public class ScreenshotController { | ActivityInfo.CONFIG_SCREEN_LAYOUT | ActivityInfo.CONFIG_ASSETS_PATHS); + public static @Nullable ScrollCaptureClient.Connection takeScrollCaptureConnection() { + ScrollCaptureClient.Connection connection = sScrollConnection; + sScrollConnection = null; + return connection; + } + @Inject ScreenshotController( Context context, diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java index 863116a22ee4..4a3ffa45ab81 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java @@ -53,7 +53,6 @@ public class ScrollCaptureController { public static final int MAX_HEIGHT = 12000; - private final Connection mConnection; private final Context mContext; private final Executor mUiExecutor; @@ -65,10 +64,9 @@ public class ScrollCaptureController { private UUID mRequestId; private ScrollCaptureCallback mCaptureCallback; - public ScrollCaptureController(Context context, Connection connection, Executor uiExecutor, - Executor bgExecutor, ImageExporter exporter) { + public ScrollCaptureController(Context context, Executor uiExecutor, Executor bgExecutor, + ImageExporter exporter) { mContext = context; - mConnection = connection; mUiExecutor = uiExecutor; mBgExecutor = bgExecutor; mImageExporter = exporter; @@ -78,16 +76,17 @@ public class ScrollCaptureController { /** * Run scroll capture! * + * @param connection connection to the remote window to be used * @param callback request callback to report back to the service */ - public void start(ScrollCaptureCallback callback) { + public void start(Connection connection, ScrollCaptureCallback callback) { mCaptureTime = ZonedDateTime.now(); mRequestId = UUID.randomUUID(); mCaptureCallback = callback; float maxPages = Settings.Secure.getFloat(mContext.getContentResolver(), SETTING_KEY_MAX_PAGES, MAX_PAGES_DEFAULT); - mConnection.start(this::startCapture, maxPages); + connection.start(this::startCapture, maxPages); } /** |