blob: 24c52958d9a6ad4ebe1e2a61f5fb74bf9735f70f [file] [log] [blame]
/*
* 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.car.notification;
import android.car.CarNotConnectedException;
import android.car.drivingstate.CarUxRestrictions;
import android.car.drivingstate.CarUxRestrictionsManager;
import android.car.drivingstate.CarUxRestrictionsManager.OnUxRestrictionsChangedListener;
import android.util.Log;
/**
* Used as a proxy and delegator of Ux Restriction state changes to the
* {@link CarUxRestrictionsManager} due to the fact that {@link CarUxRestrictionsManager} can only
* have one registered listener.
* <p>
* This was written not to be a general solution as that responsibility should be in an future api
* change of the {@link CarUxRestrictionsManager}.
* This class uses setter inject due to the current nature of the asynchronous depenancy creation
* when using the Car api
*/
public class CarUxRestrictionManagerWrapper implements OnUxRestrictionsChangedListener {
private static final String TAG = "CarUxRestrictionManager";
private CarNotificationView mCarNotificationView;
private CarHeadsUpNotificationManager mCarHeadsUpNotificationManager;
private CarUxRestrictionsManager mCarUxRestrictionsManager;
/**
* Forwards state change to {@link CarHeadsUpNotificationManager} and
* {@link CarNotificationView} if they've been set.
*
* @param restrictionInfo The latest restiction state
*/
@Override
public void onUxRestrictionsChanged(CarUxRestrictions restrictionInfo) {
// This is done in this manner (and not a list) to give the next person pause
// and check if the implementation of CarUxRestrictionsManager has been updated to handle
// multiple listeners and delete this class if so.
if (mCarHeadsUpNotificationManager != null) {
mCarHeadsUpNotificationManager.onUxRestrictionsChanged(restrictionInfo);
}
if (mCarNotificationView != null) {
mCarNotificationView.onUxRestrictionsChanged(restrictionInfo);
}
}
/**
* Set the {@link CarNotificationView} that should be notified on ux restriction state changes
*
* @param carNotificationView {@code null} to turn off notifications
*/
public void setCarNotificationView(CarNotificationView carNotificationView) {
mCarNotificationView = carNotificationView;
}
/**
* set the {@link CarHeadsUpNotificationManager} that should be notified on ux restriction
* state changes
*
* @param carHeadsUpNotificationManager {@code null} to turn off notifications
*/
public void setCarHeadsUpNotificationManager(
CarHeadsUpNotificationManager carHeadsUpNotificationManager) {
mCarHeadsUpNotificationManager = carHeadsUpNotificationManager;
}
/**
* Set the {@link CarUxRestrictionsManager} that will be used as the source of data. The
* setter self registers as a listener as it's expected to be called from a connection listener
* when a connection to the car api is established.
*
* @param carUxRestrictionsManager The CarUxRestrictionsManager to proxy to
*/
public void setCarUxRestrictionsManager(
CarUxRestrictionsManager carUxRestrictionsManager) {
mCarUxRestrictionsManager = carUxRestrictionsManager;
try {
mCarUxRestrictionsManager.registerListener(this);
} catch (CarNotConnectedException e) {
Log.w(TAG, "Failed to register for ux restiction changes ",e);
}
}
/**
* Proxy to the same call on CarUxRestrictionsManager
*
* @return CarUxRestrictions The current restictions
* @throws CarNotConnectedException Thrown if the Car service is unavailable
*/
public CarUxRestrictions getCurrentCarUxRestrictions() throws CarNotConnectedException {
if (mCarUxRestrictionsManager == null) {
throw new CarNotConnectedException();
}
return mCarUxRestrictionsManager.getCurrentCarUxRestrictions();
}
}