diff options
| author | 2020-01-16 18:01:30 +0100 | |
|---|---|---|
| committer | 2020-01-17 15:36:50 +0100 | |
| commit | 66cd0568e6441a975ed9bcadd6f99acf601e67a9 (patch) | |
| tree | 3b3ae6bd77cf46540b137abc564f0138bb1b0586 | |
| parent | a8be4506e40e201febd00d1d1d498f424610a2e0 (diff) | |
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
| -rw-r--r-- | core/java/com/android/internal/app/ChooserActivity.java | 25 |
1 files 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 b6b548c13d66..9532faecb4df 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); + } + IntentFilter intentFilter = new IntentFilter(intent.getAction(), intent.getType()); + List<Uri> 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<Uri> 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 new IntentFilter(intent.getAction(), dataString); + return intentFilter; } catch (Exception e) { Log.e(TAG, "failed to get target intent filter " + e); return null; |