Create DreamManager System Server TestApi am: 641e2e6361 am: dd66516fe9

Change-Id: I2cc7d418a48fd906ffacdcc4c8d7547455b9c87f
This commit is contained in:
Automerger Merge Worker
2020-02-25 12:54:02 +00:00
7 changed files with 167 additions and 16 deletions

View File

@@ -0,0 +1,102 @@
/*
* Copyright (C) 2020 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;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemService;
import android.annotation.TestApi;
import android.annotation.UserHandleAware;
import android.content.ComponentName;
import android.content.Context;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.service.dreams.DreamService;
import android.service.dreams.IDreamManager;
/**
* @hide
*/
@SystemService(Context.DREAM_SERVICE)
@TestApi
public class DreamManager {
private final IDreamManager mService;
private final Context mContext;
/**
* @hide
*/
public DreamManager(Context context) throws ServiceManager.ServiceNotFoundException {
mService = IDreamManager.Stub.asInterface(
ServiceManager.getServiceOrThrow(DreamService.DREAM_SERVICE));
mContext = context;
}
/**
* Starts dream service with name "name".
*
* <p>This is only used for testing the dream service APIs.
*
* @hide
*/
@TestApi
@UserHandleAware
@RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE)
public void startDream(@NonNull ComponentName name) {
try {
mService.testDream(mContext.getUserId(), name);
} catch (RemoteException e) {
e.rethrowFromSystemServer();
}
}
/**
* Stops the dream service on the device if one is started.
*
* <p> This is only used for testing the dream service APIs.
*
* @hide
*/
@TestApi
@RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE)
public void stopDream() {
try {
mService.awaken();
} catch (RemoteException e) {
e.rethrowFromSystemServer();
}
}
/**
* Sets the active dream on the device to be "dreamComponent".
*
* <p>This is only used for testing the dream service APIs.
*
* @hide
*/
@TestApi
@UserHandleAware
@RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE)
public void setActiveDream(@NonNull ComponentName dreamComponent) {
ComponentName[] dreams = {dreamComponent};
try {
mService.setDreamComponentsForUser(mContext.getUserId(), dreams);
} catch (RemoteException e) {
e.rethrowFromSystemServer();
}
}
}

View File

@@ -1334,6 +1334,13 @@ public final class SystemServiceRegistry {
IBinder b = ServiceManager.getServiceOrThrow(Context.APP_INTEGRITY_SERVICE);
return new AppIntegrityManager(IAppIntegrityManager.Stub.asInterface(b));
}});
registerService(Context.DREAM_SERVICE, DreamManager.class,
new CachedServiceFetcher<DreamManager>() {
@Override
public DreamManager createService(ContextImpl ctx)
throws ServiceNotFoundException {
return new DreamManager(ctx);
}});
sInitializing = true;
try {

View File

@@ -5156,6 +5156,17 @@ public abstract class Context {
*/
public static final String LIGHTS_SERVICE = "lights";
/**
* Use with {@link #getSystemService(String)} to retrieve a
* {@link android.app.DreamManager} for controlling Dream states.
*
* @see #getSystemService(String)
* @hide
*/
@TestApi
public static final String DREAM_SERVICE = "dream";
/**
* Determine whether the given permission is allowed for a particular
* process and user ID running in the system.

View File

@@ -31,12 +31,14 @@ interface IDreamManager {
void setDreamComponents(in ComponentName[] componentNames);
@UnsupportedAppUsage
ComponentName[] getDreamComponents();
ComponentName getDefaultDreamComponent();
void testDream(in ComponentName componentName);
ComponentName getDefaultDreamComponentForUser(int userId);
void testDream(int userId, in ComponentName componentName);
@UnsupportedAppUsage
boolean isDreaming();
void finishSelf(in IBinder token, boolean immediate);
void startDozing(in IBinder token, int screenState, int screenBrightness);
void stopDozing(in IBinder token);
void forceAmbientDisplayEnabled(boolean enabled);
ComponentName[] getDreamComponentsForUser(int userId);
void setDreamComponentsForUser(int userId, in ComponentName[] componentNames);
}