summaryrefslogtreecommitdiffstats
path: root/services/java
diff options
context:
space:
mode:
Diffstat (limited to 'services/java')
-rw-r--r--services/java/com/android/server/SystemServer.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 48deb68..2e4884e 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -1204,6 +1204,15 @@ public final class SystemServer {
Slog.i(TAG, "WebViewFactory preparation");
WebViewFactory.prepareWebViewInSystemServer();
+ // Start Nfc before SystemUi to ensure NfcTile and other apps gets a
+ // valid NfcAdapter from NfcManager
+ try {
+ startNfcService(context);
+ } catch (Throwable e) {
+ // Don't crash. Nfc is an optional service. Just annotate that isn't ready
+ Slog.e(TAG, "Nfc service didn't start. Nfc will not be available.", e);
+ }
+
try {
startSystemUi(context);
} catch (Throwable e) {
@@ -1333,4 +1342,23 @@ public final class SystemServer {
//Slog.d(TAG, "Starting service: " + intent);
context.startServiceAsUser(intent, UserHandle.OWNER);
}
+
+ static final void startNfcService(Context context) {
+ IPackageManager pm = ActivityThread.getPackageManager();
+ if (pm == null) {
+ Slog.w(TAG, "Cannot get package manager, assuming no NFC feature");
+ return;
+ }
+ try {
+ if (pm.hasSystemFeature(PackageManager.FEATURE_NFC)) {
+ Intent intent = new Intent();
+ intent.setComponent(new ComponentName("com.android.nfc",
+ "com.android.nfc.NfcBootstrapService"));
+ context.startServiceAsUser(intent, UserHandle.OWNER);
+ }
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Package manager query failed, assuming no NFC feature", e);
+ return;
+ }
+ }
}