summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jack Yu <jackcwyu@google.com> 2020-11-12 12:07:38 +0800
committer Jack Yu <jackcwyu@google.com> 2020-11-12 12:07:38 +0800
commitcb2a677767324fb217d2b51d830259492020e091 (patch)
treedaf1a863de01723ada7131c08577d78739a9a2b1
parentbe52daface8083adcb010b73140dea4e2d39cae0 (diff)
Improve NfcAdapter APIs to report correct nfc state
For enable and disable and state checking APIs, retry once if we found nfc service is dead. Bug: 173077348 Test: manual tests Change-Id: I09ecdff9b0b7071569a854e7ace42a46b62a464f
-rw-r--r--core/java/android/nfc/NfcAdapter.java100
1 files changed, 100 insertions, 0 deletions
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index 90e01ebe6205..41927b18de64 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -774,6 +774,16 @@ public final class NfcAdapter {
return sService.getNfcDtaInterface(mContext.getPackageName());
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
+ // Try one more time
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ return null;
+ }
+ try {
+ return sService.getNfcDtaInterface(mContext.getPackageName());
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ }
return null;
}
}
@@ -836,6 +846,16 @@ public final class NfcAdapter {
return sService.getState() == STATE_ON;
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
+ // Try one more time
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ return false;
+ }
+ try {
+ return sService.getState() == STATE_ON;
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ }
return false;
}
}
@@ -859,6 +879,16 @@ public final class NfcAdapter {
return sService.getState();
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
+ // Try one more time
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ return NfcAdapter.STATE_OFF;
+ }
+ try {
+ return sService.getState();
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ }
return NfcAdapter.STATE_OFF;
}
}
@@ -886,6 +916,16 @@ public final class NfcAdapter {
return sService.enable();
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
+ // Try one more time
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ return false;
+ }
+ try {
+ return sService.enable();
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ }
return false;
}
}
@@ -915,6 +955,16 @@ public final class NfcAdapter {
return sService.disable(true);
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
+ // Try one more time
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ return false;
+ }
+ try {
+ return sService.disable(true);
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ }
return false;
}
}
@@ -930,6 +980,16 @@ public final class NfcAdapter {
return sService.disable(persist);
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
+ // Try one more time
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ return false;
+ }
+ try {
+ return sService.disable(persist);
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ }
return false;
}
}
@@ -1763,6 +1823,16 @@ public final class NfcAdapter {
return sService.setNfcSecure(enable);
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
+ // Try one more time
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ return false;
+ }
+ try {
+ return sService.setNfcSecure(enable);
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ }
return false;
}
}
@@ -1781,6 +1851,16 @@ public final class NfcAdapter {
return sService.deviceSupportsNfcSecure();
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
+ // Try one more time
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ return false;
+ }
+ try {
+ return sService.deviceSupportsNfcSecure();
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ }
return false;
}
}
@@ -1801,6 +1881,16 @@ public final class NfcAdapter {
return sService.isNfcSecureEnabled();
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
+ // Try one more time
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ return false;
+ }
+ try {
+ return sService.isNfcSecureEnabled();
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ }
return false;
}
}
@@ -2088,6 +2178,16 @@ public final class NfcAdapter {
return sService.getNfcAdapterExtrasInterface(mContext.getPackageName());
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
+ // Try one more time
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ return null;
+ }
+ try {
+ return sService.getNfcAdapterExtrasInterface(mContext.getPackageName());
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to recover NFC Service.");
+ }
return null;
}
}