resolve merge conflicts of 5e1d95b0cc to stage-aosp-master

BUG: None
Test: I solemnly swear I tested this conflict resolution.
Change-Id: Ic5527b29cbe8c84d2053be849cf09df5341e4790
This commit is contained in:
Neil Fuller
2018-06-12 14:14:13 +01:00
8 changed files with 238 additions and 0 deletions

View File

@@ -100,6 +100,7 @@ java_library {
"core/java/android/app/backup/ISelectBackupTransportCallback.aidl",
"core/java/android/app/slice/ISliceManager.aidl",
"core/java/android/app/slice/ISliceListener.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",

View File

@@ -24,6 +24,7 @@ import android.app.admin.IDevicePolicyManager;
import android.app.job.IJobScheduler;
import android.app.job.JobScheduler;
import android.app.slice.SliceManager;
import android.app.timedetector.TimeDetector;
import android.app.timezone.RulesManager;
import android.app.trust.TrustManager;
import android.app.usage.IStorageStatsManager;
@@ -996,6 +997,13 @@ final class SystemServiceRegistry {
ServiceManager.getServiceOrThrow(
Context.DEVICE_IDLE_CONTROLLER));
return new DeviceIdleManager(ctx.getOuterContext(), service);
registerService(Context.TIME_DETECTOR_SERVICE, TimeDetector.class,
new CachedServiceFetcher<TimeDetector>() {
@Override
public TimeDetector createService(ContextImpl ctx)
throws ServiceNotFoundException {
return new TimeDetector();
}});
}

View File

@@ -0,0 +1,34 @@
/*
* 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();
}

View File

@@ -0,0 +1,57 @@
/*
* 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();
}
}
}

View File

@@ -3058,6 +3058,7 @@ public abstract class Context {
COMPANION_DEVICE_SERVICE,
CROSS_PROFILE_APPS_SERVICE,
//@hide: SYSTEM_UPDATE_SERVICE,
//@hide: TIME_DETECTOR_SERVICE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ServiceName {}
@@ -4209,6 +4210,15 @@ public abstract class Context {
@SystemApi
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.

View File

@@ -0,0 +1,72 @@
/*
* 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.
}
}

View File

@@ -229,6 +229,8 @@ public final class SystemServer {
"com.android.server.slice.SliceManagerService$Lifecycle";
private static final String CAR_SERVICE_HELPER_SERVICE_CLASS =
"com.android.internal.car.CarServiceHelperService";
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";
@@ -1236,6 +1238,14 @@ public final class SystemServer {
}
traceEnd();
traceBeginAndSlog("StartTimeDetectorService");
try {
mSystemServiceManager.startService(TIME_DETECTOR_SERVICE_CLASS);
} catch (Throwable e) {
reportWtf("starting StartTimeDetectorService service", e);
}
traceEnd();
if (!isWatch) {
traceBeginAndSlog("StartSearchManagerService");
try {

View File

@@ -0,0 +1,46 @@
/*
* 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();
}
}