"core/java/android/app/backup/IRestoreObserver.aidl",
"core/java/android/app/backup/IRestoreSession.aidl",
"core/java/android/app/backup/ISelectBackupTransportCallback.aidl",
+ "core/java/android/app/timedetector/ITimeDetectorService.aidl",
"core/java/android/app/timezone/ICallback.aidl",
"core/java/android/app/timezone/IRulesManager.aidl",
"core/java/android/app/usage/ICacheQuotaService.aidl",
import android.app.admin.IDevicePolicyManager;
import android.app.job.IJobScheduler;
import android.app.job.JobScheduler;
+import android.app.timedetector.TimeDetector;
import android.app.timezone.RulesManager;
import android.app.trust.TrustManager;
import android.app.usage.IStorageStatsManager;
public RulesManager createService(ContextImpl ctx) {
return new RulesManager(ctx.getOuterContext());
}});
+
+ registerService(Context.TIME_DETECTOR_SERVICE, TimeDetector.class,
+ new CachedServiceFetcher<TimeDetector>() {
+ @Override
+ public TimeDetector createService(ContextImpl ctx)
+ throws ServiceNotFoundException {
+ return new TimeDetector();
+ }});
}
/**
--- /dev/null
+/*
+ * Copyright (C) 2018 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 android.app.timedetector;
+
+/**
+ * System private API to comunicate with time detector service.
+ *
+ * <p>Used by parts of the Android system with signals associated with the device's time to provide
+ * information to the Time Detector Service.
+ *
+ * <p>Use the {@link android.app.timedetector.TimeDetector} class rather than going through
+ * this Binder interface directly. See {@link android.app.timedetector.TimeDetectorService} for
+ * more complete documentation.
+ *
+ *
+ * {@hide}
+ */
+interface ITimeDetectorService {
+ void stubbedCall();
+}
--- /dev/null
+/*
+ * Copyright (C) 2018 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 android.app.timedetector;
+
+import android.annotation.SystemService;
+import android.content.Context;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
+import android.util.Log;
+
+/**
+ * The interface through which system components can send signals to the TimeDetectorService.
+ * @hide
+ */
+@SystemService(Context.TIME_DETECTOR_SERVICE)
+public final class TimeDetector {
+ private static final String TAG = "timedetector.TimeDetector";
+ private static final boolean DEBUG = false;
+
+ private final ITimeDetectorService mITimeDetectorService;
+
+ public TimeDetector() throws ServiceNotFoundException {
+ mITimeDetectorService = ITimeDetectorService.Stub.asInterface(
+ ServiceManager.getServiceOrThrow(Context.TIME_DETECTOR_SERVICE));
+ }
+
+ /**
+ * Does nothing.
+ * TODO: Remove this when the service implementation is built out.
+ */
+ public void stubbedCall() {
+ if (DEBUG) {
+ Log.d(TAG, "stubbedCall called");
+ }
+ try {
+ mITimeDetectorService.stubbedCall();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+}
//@hide: CONTEXTHUB_SERVICE,
SYSTEM_HEALTH_SERVICE,
//@hide: INCIDENT_SERVICE,
- COMPANION_DEVICE_SERVICE
+ COMPANION_DEVICE_SERVICE,
+ //@hide: TIME_DETECTOR_SERVICE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ServiceName {}
public static final String SECURE_ELEMENT_SERVICE = "secure_element";
/**
+ * Use with {@link #getSystemService(String)} to retrieve an
+ * {@link android.app.timedetector.ITimeDetectorService}.
+ * @hide
+ *
+ * @see #getSystemService(String)
+ */
+ public static final String TIME_DETECTOR_SERVICE = "time_detector";
+
+ /**
* Determine whether the given permission is allowed for a particular
* process and user ID running in the system.
*
--- /dev/null
+/*
+ * Copyright (C) 2018 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.timedetector;
+
+import com.android.internal.util.DumpUtils;
+import com.android.server.SystemService;
+
+import android.app.timedetector.ITimeDetectorService;
+import android.content.Context;
+import android.util.Slog;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
+public final class TimeDetectorService extends ITimeDetectorService.Stub {
+
+ private static final String TAG = "timedetector.TimeDetectorService";
+
+ public static class Lifecycle extends SystemService {
+
+ public Lifecycle(Context context) {
+ super(context);
+ }
+
+ @Override
+ public void onStart() {
+ TimeDetectorService service = TimeDetectorService.create(getContext());
+
+ // Publish the binder service so it can be accessed from other (appropriately
+ // permissioned) processes.
+ publishBinderService(Context.TIME_DETECTOR_SERVICE, service);
+ }
+ }
+
+ private final Context mContext;
+
+ private static TimeDetectorService create(Context context) {
+ return new TimeDetectorService(context);
+ }
+
+ public TimeDetectorService(Context context) {
+ mContext = context;
+ }
+
+ @Override
+ public void stubbedCall() {
+ // Empty call for initial tests.
+ Slog.d(TAG, "stubbedCall() called");
+ // TODO(nfuller): Remove when there are real methods.
+ }
+
+ @Override
+ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
+
+ // TODO(nfuller): Implement when there is state.
+ }
+}
\ No newline at end of file
"com.android.server.autofill.AutofillManagerService";
private static final String TIME_ZONE_RULES_MANAGER_SERVICE_CLASS =
"com.android.server.timezone.RulesManagerService$Lifecycle";
+ private static final String TIME_DETECTOR_SERVICE_CLASS =
+ "com.android.server.timedetector.TimeDetectorService$Lifecycle";
private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst";
traceEnd();
}
+ traceBeginAndSlog("StartTimeDetectorService");
+ try {
+ mSystemServiceManager.startService(TIME_DETECTOR_SERVICE_CLASS);
+ } catch (Throwable e) {
+ reportWtf("starting StartTimeDetectorService service", e);
+ }
+ traceEnd();
+
if (!disableNonCoreServices && !disableSearchManager) {
traceBeginAndSlog("StartSearchManagerService");
try {
--- /dev/null
+/*
+ * Copyright (C) 2018 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.timedetector;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Unit tests for the {@link TimeDetectorService}.
+ */
+@RunWith(AndroidJUnit4.class)
+public class TimeDetectorServiceTest {
+
+ private TimeDetectorService mTimeDetectorService;
+
+ @Before
+ public void setUp() {
+ final Context context = InstrumentationRegistry.getContext();
+ mTimeDetectorService = new TimeDetectorService(context);
+ }
+
+ @Test
+ public void testStubbedCall() {
+ mTimeDetectorService.stubbedCall();
+ }
+
+}