diff options
| author | Abodunrinwa Toki <toki@google.com> | 2018-04-24 19:19:48 +0100 |
|---|---|---|
| committer | Abodunrinwa Toki <toki@google.com> | 2018-04-27 00:16:13 +0100 |
| commit | 253827f207be31399a21c390f90ce3ffe4b020c0 (patch) | |
| tree | 2ea19b0537a2cd9d1bd461ed6da831d768f13ac4 /core/java/android | |
| parent | abab4cbd2573aa9300e56dea1b9529ca7782573e (diff) | |
TC: Fix null PendingIntent being passed to RemoteAction
Problem was RemoteAction(...) takes a non-null PendingIntent but
TextClassification.createPendingIntent(...) returns a nullable PendingIntent.
Bug: 78515224
Test: manual
- Disable Contacts apps in settings
- Select a phone number in a TextView
- Verify that a Phone smart action is displayed
Test: bit FrameworksCoreTests:android.view.textclassifier.TextClassificationManagerTest
Test: bit CtsViewTestCases:android.view.textclassifier.cts.TextClassificationManagerTest
Change-Id: Icab581d4eef38b4801d1b9ee3af04ffefd1eec6f
Diffstat (limited to 'core/java/android')
3 files changed, 23 insertions, 7 deletions
diff --git a/core/java/android/view/textclassifier/SystemTextClassifier.java b/core/java/android/view/textclassifier/SystemTextClassifier.java index 490c389037e5..da86b559c5db 100644 --- a/core/java/android/view/textclassifier/SystemTextClassifier.java +++ b/core/java/android/view/textclassifier/SystemTextClassifier.java @@ -55,7 +55,8 @@ public final class SystemTextClassifier implements TextClassifier { mManagerService = ITextClassifierService.Stub.asInterface( ServiceManager.getServiceOrThrow(Context.TEXT_CLASSIFICATION_SERVICE)); mSettings = Preconditions.checkNotNull(settings); - mFallback = new TextClassifierImpl(context, settings); + mFallback = context.getSystemService(TextClassificationManager.class) + .getTextClassifier(TextClassifier.LOCAL); mPackageName = Preconditions.checkNotNull(context.getPackageName()); } diff --git a/core/java/android/view/textclassifier/TextClassificationManager.java b/core/java/android/view/textclassifier/TextClassificationManager.java index 262d9b852b82..1737861ee716 100644 --- a/core/java/android/view/textclassifier/TextClassificationManager.java +++ b/core/java/android/view/textclassifier/TextClassificationManager.java @@ -191,10 +191,11 @@ public final class TextClassificationManager { synchronized (mLock) { if (mLocalTextClassifier == null) { if (mSettings.isLocalTextClassifierEnabled()) { - mLocalTextClassifier = new TextClassifierImpl(mContext, mSettings); + mLocalTextClassifier = + new TextClassifierImpl(mContext, mSettings, TextClassifier.NO_OP); } else { Log.d(LOG_TAG, "Local TextClassifier disabled"); - mLocalTextClassifier = TextClassifierImpl.NO_OP; + mLocalTextClassifier = TextClassifier.NO_OP; } } return mLocalTextClassifier; diff --git a/core/java/android/view/textclassifier/TextClassifierImpl.java b/core/java/android/view/textclassifier/TextClassifierImpl.java index 910fcaace159..2cf265d58b74 100644 --- a/core/java/android/view/textclassifier/TextClassifierImpl.java +++ b/core/java/android/view/textclassifier/TextClassifierImpl.java @@ -21,6 +21,7 @@ import static java.time.temporal.ChronoUnit.MILLIS; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.WorkerThread; +import android.app.PendingIntent; import android.app.RemoteAction; import android.app.SearchManager; import android.content.ComponentName; @@ -98,13 +99,18 @@ public final class TextClassifierImpl implements TextClassifier { private final TextClassificationConstants mSettings; - public TextClassifierImpl(Context context, TextClassificationConstants settings) { + public TextClassifierImpl( + Context context, TextClassificationConstants settings, TextClassifier fallback) { mContext = Preconditions.checkNotNull(context); - mFallback = TextClassifier.NO_OP; + mFallback = Preconditions.checkNotNull(fallback); mSettings = Preconditions.checkNotNull(settings); mGenerateLinksLogger = new GenerateLinksLogger(mSettings.getGenerateLinksLogSampleRate()); } + public TextClassifierImpl(Context context, TextClassificationConstants settings) { + this(context, settings, TextClassifier.NO_OP); + } + /** @inheritDoc */ @Override @WorkerThread @@ -413,6 +419,9 @@ public final class TextClassifierImpl implements TextClassifier { for (LabeledIntent labeledIntent : IntentFactory.create( mContext, referenceTime, highestScoringResult, classifiedText)) { final RemoteAction action = labeledIntent.asRemoteAction(mContext); + if (action == null) { + continue; + } if (isPrimaryAction) { // For O backwards compatibility, the first RemoteAction is also written to the // legacy API fields. @@ -601,6 +610,7 @@ public final class TextClassifierImpl implements TextClassifier { return mRequestCode; } + @Nullable RemoteAction asRemoteAction(Context context) { final PackageManager pm = context.getPackageManager(); final ResolveInfo resolveInfo = pm.resolveActivity(mIntent, 0); @@ -622,8 +632,12 @@ public final class TextClassifierImpl implements TextClassifier { icon = Icon.createWithResource("android", com.android.internal.R.drawable.ic_more_items); } - final RemoteAction action = new RemoteAction(icon, mTitle, mDescription, - TextClassification.createPendingIntent(context, mIntent, mRequestCode)); + final PendingIntent pendingIntent = + TextClassification.createPendingIntent(context, mIntent, mRequestCode); + if (pendingIntent == null) { + return null; + } + final RemoteAction action = new RemoteAction(icon, mTitle, mDescription, pendingIntent); action.setShouldShowIcon(shouldShowIcon); return action; } |
