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
This commit is contained in:
Jack Yu
2020-11-12 12:07:38 +08:00
parent be52daface
commit cb2a677767

View File

@@ -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;
}
}