Fix ActivityNotFoundException

Set intent to preference if intent.resolveActivity is non-null
Set preference selectable to false if no intent set to preference

Fix: 283107867
Test: manual, atest BlockingPrefWithSliceControllerTest
Change-Id: Ib5e8705debb5eb5224d8566215cb65f36613d8f9
This commit is contained in:
Lex Huang
2023-05-19 15:52:12 +00:00
parent ebea350479
commit b9c0368d7a
2 changed files with 23 additions and 9 deletions

View File

@@ -59,7 +59,7 @@ import java.util.Optional;
* until {@link Slice} is fully loaded.
*/
public class BlockingPrefWithSliceController extends BasePreferenceController implements
LifecycleObserver, OnStart, OnStop, Observer<Slice>, BasePreferenceController.UiBlocker{
LifecycleObserver, OnStart, OnStop, Observer<Slice>, BasePreferenceController.UiBlocker {
private static final String TAG = "BlockingPrefWithSliceController";
private static final String PREFIX_KEY = "slice_preference_item_";
@@ -213,7 +213,8 @@ public class BlockingPrefWithSliceController extends BasePreferenceController im
} else {
expectedActivityIntent = intentFromSliceAction;
}
if (expectedActivityIntent != null) {
if (expectedActivityIntent != null && expectedActivityIntent.resolveActivity(
mContext.getPackageManager()) != null) {
Log.d(TAG, "setIntent: ActivityIntent" + expectedActivityIntent);
// Since UI needs to support the Settings' 2 panel feature, the intent can't use the
// FLAG_ACTIVITY_NEW_TASK. The above intent may have the FLAG_ACTIVITY_NEW_TASK
@@ -222,6 +223,7 @@ public class BlockingPrefWithSliceController extends BasePreferenceController im
preference.setIntent(expectedActivityIntent);
} else {
Log.d(TAG, "setIntent: Intent is null");
preference.setSelectable(false);
}
}