From 66cd0568e6441a975ed9bcadd6f99acf601e67a9 Mon Sep 17 00:00:00 2001 From: Katsiaryna Naliuka Date: Thu, 16 Jan 2020 18:01:30 +0100 Subject: [PATCH] Passing shared media URI along with the shared media type to the App Predictor. The URI can be used to generate app/direct share targets by the app prediction services. Test: flashed locally, verified that Uri gets passed to the locally installed prediction service in the intent filter; atest IntentTest Bug: 147206065 : Change-Id: I948d6a2e9d15dd3d9ab955571412c0f5922c1e23 --- .../android/internal/app/ChooserActivity.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index b6b548c13d661..9532faecb4df6 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -71,6 +71,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.Parcelable; +import android.os.PatternMatcher; import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; @@ -1650,10 +1651,28 @@ public class ChooserActivity extends ResolverActivity implements try { final Intent intent = getTargetIntent(); String dataString = intent.getDataString(); - if (TextUtils.isEmpty(dataString)) { - dataString = intent.getType(); + if (!TextUtils.isEmpty(dataString)) { + return new IntentFilter(intent.getAction(), dataString); } - return new IntentFilter(intent.getAction(), dataString); + IntentFilter intentFilter = new IntentFilter(intent.getAction(), intent.getType()); + List contentUris = new ArrayList<>(); + if (Intent.ACTION_SEND.equals(intent.getAction())) { + Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); + if (uri != null) { + contentUris.add(uri); + } + } else { + List uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); + if (uris != null) { + contentUris.addAll(uris); + } + } + for (Uri uri : contentUris) { + intentFilter.addDataScheme(uri.getScheme()); + intentFilter.addDataAuthority(uri.getAuthority(), null); + intentFilter.addDataPath(uri.getPath(), PatternMatcher.PATTERN_LITERAL); + } + return intentFilter; } catch (Exception e) { Log.e(TAG, "failed to get target intent filter " + e); return null;