From 37efa64d63c3d24170a4deca4eb407f4517edfe1 Mon Sep 17 00:00:00 2001 From: Ruchi Kandoi Date: Wed, 1 Aug 2018 13:30:35 -0700 Subject: [PATCH] Fixes Settings app crashing when NfcAdapter is null If a device doesn't support NFC then android.settings.NFCSHARING_SETTINGS and android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT intents shouldn't do anything and gracefully exit. Test: Manual; Emulate a non-NFC device and test with apks sending intents Bug: 80094104 Bug: 80092438 Change-Id: I5b3c3fdd582679e2cb16f474ef3331bc246b0d42 --- src/com/android/settings/nfc/AndroidBeam.java | 3 ++- src/com/android/settings/nfc/PaymentDefaultDialog.java | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/nfc/AndroidBeam.java b/src/com/android/settings/nfc/AndroidBeam.java index 452bf91cad..efa6041855 100644 --- a/src/com/android/settings/nfc/AndroidBeam.java +++ b/src/com/android/settings/nfc/AndroidBeam.java @@ -53,6 +53,8 @@ public class AndroidBeam extends InstrumentedFragment public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mNfcAdapter = NfcAdapter.getDefaultAdapter(getActivity()); + if (mNfcAdapter == null) + getActivity().finish(); setHasOptionsMenu(true); } @@ -90,7 +92,6 @@ public class AndroidBeam extends InstrumentedFragment @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - SettingsActivity activity = (SettingsActivity) getActivity(); mOldActivityTitle = activity.getActionBar().getTitle(); diff --git a/src/com/android/settings/nfc/PaymentDefaultDialog.java b/src/com/android/settings/nfc/PaymentDefaultDialog.java index 949f87d8b7..73b92e7b6b 100644 --- a/src/com/android/settings/nfc/PaymentDefaultDialog.java +++ b/src/com/android/settings/nfc/PaymentDefaultDialog.java @@ -42,7 +42,11 @@ public final class PaymentDefaultDialog extends AlertActivity implements @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mBackend = new PaymentBackend(this); + try { + mBackend = new PaymentBackend(this); + } catch (NullPointerException e) { + finish(); + } Intent intent = getIntent(); ComponentName component = intent.getParcelableExtra( CardEmulation.EXTRA_SERVICE_COMPONENT); -- 2.11.0