summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Steve Paik <spaik@google.com> 2018-02-03 01:54:11 +0000
committer Steve Paik <spaik@google.com> 2018-02-03 01:54:11 +0000
commitd2fecf34f99b7f44bddc241a10cc9c32a4c44bdf (patch)
treeddc3ca8e4e24da0adb861133af022f6a74d6bd48
parentee47dea99adebb4b10ad95b744bb53b5d5f5b606 (diff)
Revert "Move CarServiceHelperService"
This reverts commit ee47dea99adebb4b10ad95b744bb53b5d5f5b606. Reason for revert: <INSERT REASONING HERE> Change-Id: Ie26a7b08cb2d86c71f3d8c8c509d9803d0ad293b
-rw-r--r--Android.bp1
-rw-r--r--core/java/com/android/internal/car/ICarServiceHelper.aidl24
-rw-r--r--services/core/java/com/android/server/car/CarServiceHelperService.java91
-rw-r--r--services/java/com/android/server/SystemServer.java5
4 files changed, 118 insertions, 3 deletions
diff --git a/Android.bp b/Android.bp
index 3d56254417e1..d5e04f9f4e2d 100644
--- a/Android.bp
+++ b/Android.bp
@@ -373,6 +373,7 @@ java_library {
"core/java/com/android/internal/appwidget/IAppWidgetHost.aidl",
"core/java/com/android/internal/backup/IBackupTransport.aidl",
"core/java/com/android/internal/backup/IObbBackupService.aidl",
+ "core/java/com/android/internal/car/ICarServiceHelper.aidl",
"core/java/com/android/internal/inputmethod/IInputContentUriToken.aidl",
"core/java/com/android/internal/net/INetworkWatchlistManager.aidl",
"core/java/com/android/internal/policy/IKeyguardDrawnCallback.aidl",
diff --git a/core/java/com/android/internal/car/ICarServiceHelper.aidl b/core/java/com/android/internal/car/ICarServiceHelper.aidl
new file mode 100644
index 000000000000..9ee330be060b
--- /dev/null
+++ b/core/java/com/android/internal/car/ICarServiceHelper.aidl
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.car;
+
+/**
+ * Helper API for car service. Only for itneraction between system server and car service.
+ * @hide
+ */
+interface ICarServiceHelper {
+}
diff --git a/services/core/java/com/android/server/car/CarServiceHelperService.java b/services/core/java/com/android/server/car/CarServiceHelperService.java
new file mode 100644
index 000000000000..9392a6a8fcd9
--- /dev/null
+++ b/services/core/java/com/android/server/car/CarServiceHelperService.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.car;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.util.Slog;
+
+import com.android.internal.car.ICarServiceHelper;
+import com.android.server.SystemService;
+
+/**
+ * System service side companion service for CarService.
+ * Starts car service and provide necessary API for CarService. Only for car product.
+ */
+public class CarServiceHelperService extends SystemService {
+ private static final String TAG = "CarServiceHelper";
+ private static final String CAR_SERVICE_INTERFACE = "android.car.ICar";
+ private final ICarServiceHelperImpl mHelper = new ICarServiceHelperImpl();
+ private IBinder mCarService;
+ private final ServiceConnection mCarServiceConnection = new ServiceConnection() {
+
+ @Override
+ public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
+ Slog.i(TAG, "**CarService connected**");
+ mCarService = iBinder;
+ // Cannot depend on ICar which is defined in CarService, so handle binder call directly
+ // instead.
+ // void setCarServiceHelper(in IBinder helper)
+ Parcel data = Parcel.obtain();
+ data.writeInterfaceToken(CAR_SERVICE_INTERFACE);
+ data.writeStrongBinder(mHelper.asBinder());
+ try {
+ mCarService.transact(IBinder.FIRST_CALL_TRANSACTION, // setCarServiceHelper
+ data, null, Binder.FLAG_ONEWAY);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "RemoteException from car service", e);
+ handleCarServiceCrash();
+ }
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName componentName) {
+ handleCarServiceCrash();
+ }
+ };
+
+ public CarServiceHelperService(Context context) {
+ super(context);
+ }
+
+ @Override
+ public void onStart() {
+ Intent intent = new Intent();
+ intent.setPackage("com.android.car");
+ intent.setAction(CAR_SERVICE_INTERFACE);
+ if (!getContext().bindServiceAsUser(intent, mCarServiceConnection, Context.BIND_AUTO_CREATE,
+ UserHandle.SYSTEM)) {
+ Slog.wtf(TAG, "cannot start car service");
+ }
+ }
+
+ private void handleCarServiceCrash() {
+ //TODO define recovery bahavior
+ }
+
+ private class ICarServiceHelperImpl extends ICarServiceHelper.Stub {
+ //TODO
+ }
+}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 0a87564996fe..210fd473ccd4 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -65,6 +65,7 @@ import com.android.server.am.ActivityManagerService;
import com.android.server.audio.AudioService;
import com.android.server.broadcastradio.BroadcastRadioService;
import com.android.server.camera.CameraServiceProxy;
+import com.android.server.car.CarServiceHelperService;
import com.android.server.clipboard.ClipboardService;
import com.android.server.connectivity.IpConnectivityMetrics;
import com.android.server.coverage.CoverageService;
@@ -219,8 +220,6 @@ public final class SystemServer {
"com.google.android.things.services.IoTSystemService";
private static final String SLICE_MANAGER_SERVICE_CLASS =
"com.android.server.slice.SliceManagerService$Lifecycle";
- private static final String CAR_SERVICE_HELPER_SERVICE_CLASS =
- "com.google.android.car.CarServiceHelperService";
private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst";
@@ -1763,7 +1762,7 @@ public final class SystemServer {
if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
traceBeginAndSlog("StartCarServiceHelperService");
- mSystemServiceManager.startService(CAR_SERVICE_HELPER_SERVICE_CLASS);
+ mSystemServiceManager.startService(CarServiceHelperService.class);
traceEnd();
}