blob: 6100e93293559bf00107b14ccb75c4786ee4900d [file] [log] [blame]
/*
* Copyright (C) 2019 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.car.testapi;
import static android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_BASELINE;
import android.car.drivingstate.CarUxRestrictions;
import android.car.drivingstate.CarUxRestrictionsConfiguration;
import android.car.drivingstate.ICarUxRestrictionsChangeListener;
import android.car.drivingstate.ICarUxRestrictionsManager;
import android.os.IRemoteCallback;
import android.os.RemoteException;
import android.os.SystemClock;
import com.android.internal.annotations.GuardedBy;
import java.util.Collections;
import java.util.List;
/**
* A fake implementation of {@link ICarUxRestrictionsManager.Stub} to facilitate the use of {@link
* android.car.drivingstate.CarUxRestrictionsManager} in external unit tests.
*
* @hide
*/
public class FakeCarUxRestrictionsService extends ICarUxRestrictionsManager.Stub implements
CarUxRestrictionsController {
private final Object mLock = new Object();
@GuardedBy("mLock")
private CarUxRestrictions mCarUxRestrictions;
@GuardedBy("mLock")
private ICarUxRestrictionsChangeListener mListener;
@GuardedBy("mLock")
private String mMode = "baseline";
private static CarUxRestrictions createCarUxRestrictions(int activeRestrictions) {
return new CarUxRestrictions.Builder(
false, /* requires driving distraction optimization */
activeRestrictions,
SystemClock.elapsedRealtimeNanos())
.build();
}
FakeCarUxRestrictionsService() {
synchronized (mLock) {
mCarUxRestrictions = createCarUxRestrictions(UX_RESTRICTIONS_BASELINE);
}
}
@Override
public void registerUxRestrictionsChangeListener(
ICarUxRestrictionsChangeListener listener, int displayId) {
synchronized (mLock) {
this.mListener = listener;
}
}
@Override
public void unregisterUxRestrictionsChangeListener(ICarUxRestrictionsChangeListener listener) {
synchronized (mLock) {
this.mListener = null;
}
}
@Override
public CarUxRestrictions getCurrentUxRestrictions(int displayId) {
synchronized (mLock) {
return mCarUxRestrictions;
}
}
@Override
public List<CarUxRestrictionsConfiguration> getStagedConfigs() {
return Collections.emptyList();
}
@Override
public List<CarUxRestrictionsConfiguration> getConfigs() {
return Collections.emptyList();
}
@Override
public boolean setRestrictionMode(String mode) throws RemoteException {
synchronized (mLock) {
mMode = mode;
}
return true;
}
@Override
public String getRestrictionMode() throws RemoteException {
synchronized (mLock) {
return mMode;
}
}
@Override
public void reportVirtualDisplayToPhysicalDisplay(IRemoteCallback binder, int virtualDisplayId,
int physicalDisplayId) throws RemoteException {
}
@Override
public int getMappedPhysicalDisplayOfVirtualDisplay(int displayId) throws RemoteException {
return 0;
}
@Override
public boolean saveUxRestrictionsConfigurationForNextBoot(
List<CarUxRestrictionsConfiguration> config) {
return true;
}
/**************************** CarUxRestrictionsController impl ********************************/
@Override
public void setUxRestrictions(int restrictions) throws RemoteException {
synchronized (mLock) {
mCarUxRestrictions = createCarUxRestrictions(restrictions);
if (isListenerRegistered()) {
mListener.onUxRestrictionsChanged(mCarUxRestrictions);
}
}
}
@Override
public void clearUxRestrictions() throws RemoteException {
setUxRestrictions(0);
}
@Override
public boolean isListenerRegistered() {
synchronized (mLock) {
return mListener != null;
}
}
}