/* * Copyright (C) 2015 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.support.car; /** * CarAppContextManager allows applications to set and listen for the current application context * like active navigation or active voice command. Usually only one instance of such application * should run in the system, and other app setting the flag for the matching app should * lead into other app to stop. * @hide */ public abstract class CarAppContextManager implements CarManagerBase { /** * Listener to get notification for app getting information on app context change. */ public interface AppContextChangeListener { /** * Application context has changed. Note that {@link CarAppContextManager} instance * causing the change will not get this notification. * @param activeContexts */ void onAppContextChange(int activeContexts); } /** * Listener to get notification for app getting information on app context ownership loss. */ public interface AppContextOwnershipChangeListener { /** * Lost ownership for the context, which happens when other app has set the context. * The app losing context should stop the action associated with the context. * For example, navigaiton app currently running active navigation should stop navigation * upon getting this for {@link CarAppContextManager#APP_CONTEXT_NAVIGATION}. * @param context */ void onAppContextOwnershipLoss(int context); } /** @hide */ public static final int APP_CONTEXT_START_FLAG = 0x1; /** * Flag for active navigation. */ public static final int APP_CONTEXT_NAVIGATION = 0x1; /** * Flag for active voice command. */ public static final int APP_CONTEXT_VOICE_COMMAND = 0x2; /** * Update this after adding a new flag. * @hide */ public static final int APP_CONTEXT_END_FLAG = 0x2; /** * Register listener to monitor app context change. Only one listener can be registered and * registering multiple times will lead into only the last listener to be active. * @param listener * @param contextFilter Flags of contexts to get notification. * @throws CarNotConnectedException */ public abstract void registerContextListener(AppContextChangeListener listener, int contextFilter) throws CarNotConnectedException; /** * Unregister listener and stop listening context change events. If app has owned a context * by {@link #setActiveContext(int)}, it will be reset to inactive state. * @throws CarNotConnectedException */ public abstract void unregisterContextListener() throws CarNotConnectedException; /** * Retrieve currently active contexts. * @return * @throws CarNotConnectedException */ public abstract int getActiveAppContexts() throws CarNotConnectedException; /** * Check if the current process is owning the given context. * @param context * @return * @throws CarNotConnectedException */ public abstract boolean isOwningContext(int context) throws CarNotConnectedException; /** * Set the given contexts as active. By setting this, the application is becoming owner * of the context, and will get {@link AppContextChangeListener#onAppContextOwnershipLoss(int)} * if ownership is given to other app by calling this. Fore-ground app will have higher priority * and other app cannot set the same context while owner is in fore-ground. * Before calling this, {@link #registerContextListener(AppContextChangeListener, int)} should * be called first. Otherwise, it will throw IllegalStateException * @param contexts * @throws IllegalStateException If listener was not registered. * @throws SecurityException If owner cannot be changed. * @throws CarNotConnectedException */ public abstract void setActiveContexts(AppContextOwnershipChangeListener ownershipListener, int contexts) throws IllegalStateException, SecurityException, CarNotConnectedException; /** * Reset the given contexts, i.e. mark them as inactive. This also involves releasing ownership * for the context. * @param contexts * @throws CarNotConnectedException */ public abstract void resetActiveContexts(int contexts) throws CarNotConnectedException; }