Add ClipData to clipboard REMOTE_COPY intent
Propagate the clipData from the clipboard URI to the app receiving the REMOTE_COPY intent (including URI permissions). Also limits to a configurable component. Bug: 217724692 Bug: 217739484 Test: manual, using test app implementing REMOTE_COPY Change-Id: Ie9f700c2dc546960334c3a0f5051f75d08b897cb
This commit is contained in:
@@ -446,6 +446,10 @@
|
||||
This name is in the ComponentName flattened format (package/class) -->
|
||||
<string name="config_screenshotEditor" translatable="false"></string>
|
||||
|
||||
<!-- Remote copy default activity. Must handle REMOTE_COPY_ACTION intents.
|
||||
This name is in the ComponentName flattened format (package/class) -->
|
||||
<string name="config_remoteCopyPackage" translatable="false"></string>
|
||||
|
||||
<!-- On debuggable builds, alert the user if SystemUI PSS goes over this number (in kb) -->
|
||||
<integer name="watch_heap_limit">256000</integer>
|
||||
|
||||
|
||||
@@ -215,17 +215,6 @@ public class ClipboardOverlayController {
|
||||
mRemoteCopyChip.setIcon(
|
||||
Icon.createWithResource(mContext, R.drawable.ic_baseline_devices_24), true);
|
||||
|
||||
// Only show remote copy if it's available.
|
||||
PackageManager packageManager = mContext.getPackageManager();
|
||||
if (packageManager.resolveActivity(getRemoteCopyIntent(), 0) != null) {
|
||||
mRemoteCopyChip.setOnClickListener((v) -> {
|
||||
showNearby();
|
||||
});
|
||||
mRemoteCopyChip.setAlpha(1f);
|
||||
} else {
|
||||
mRemoteCopyChip.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
attachWindow();
|
||||
withWindowAttached(() -> {
|
||||
mWindow.setContentView(mContainer);
|
||||
@@ -286,6 +275,20 @@ public class ClipboardOverlayController {
|
||||
showTextPreview(
|
||||
mContext.getResources().getString(R.string.clipboard_overlay_text_copied));
|
||||
}
|
||||
Intent remoteCopyIntent = getRemoteCopyIntent(clipData);
|
||||
// Only show remote copy if it's available.
|
||||
PackageManager packageManager = mContext.getPackageManager();
|
||||
if (remoteCopyIntent != null && packageManager.resolveActivity(
|
||||
remoteCopyIntent, PackageManager.ResolveInfoFlags.of(0)) != null) {
|
||||
mRemoteCopyChip.setOnClickListener((v) -> {
|
||||
mUiEventLogger.log(CLIPBOARD_OVERLAY_REMOTE_COPY_TAPPED);
|
||||
mContext.startActivity(remoteCopyIntent);
|
||||
animateOut();
|
||||
});
|
||||
mRemoteCopyChip.setAlpha(1f);
|
||||
} else {
|
||||
mRemoteCopyChip.setVisibility(View.GONE);
|
||||
}
|
||||
mTimeoutHandler.resetTimeout();
|
||||
}
|
||||
|
||||
@@ -389,12 +392,6 @@ public class ClipboardOverlayController {
|
||||
animateOut();
|
||||
}
|
||||
|
||||
private void showNearby() {
|
||||
mUiEventLogger.log(CLIPBOARD_OVERLAY_REMOTE_COPY_TAPPED);
|
||||
mContext.startActivity(getRemoteCopyIntent());
|
||||
animateOut();
|
||||
}
|
||||
|
||||
private void showTextPreview(CharSequence text) {
|
||||
mTextPreview.setVisibility(View.VISIBLE);
|
||||
mImagePreview.setVisibility(View.GONE);
|
||||
@@ -434,8 +431,15 @@ public class ClipboardOverlayController {
|
||||
mImagePreview.setOnClickListener(listener);
|
||||
}
|
||||
|
||||
private Intent getRemoteCopyIntent() {
|
||||
private Intent getRemoteCopyIntent(ClipData clipData) {
|
||||
String remoteCopyPackage = mContext.getString(R.string.config_remoteCopyPackage);
|
||||
if (TextUtils.isEmpty(remoteCopyPackage)) {
|
||||
return null;
|
||||
}
|
||||
Intent nearbyIntent = new Intent(REMOTE_COPY_ACTION);
|
||||
nearbyIntent.setComponent(ComponentName.unflattenFromString(remoteCopyPackage));
|
||||
nearbyIntent.setClipData(clipData);
|
||||
nearbyIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
return nearbyIntent;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user