/* * Copyright (C) 2013 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.camera.app; import android.content.Context; import android.content.Intent; import com.android.camera.module.ModuleController; import com.android.camera.settings.SettingsManager; import java.util.List; /** * The module manager which maintains the * {@link ModuleManagerImpl.ModuleAgent}. */ public interface ModuleManager { public static int MODULE_INDEX_NONE = -1; /** * The module agent which is responsible for maintaining the static * characteristics and the creation of the module. */ public static interface ModuleAgent { /** * @return The module ID. */ public int getModuleId(); /** * @return Whether the module will request the app for the camera. */ public boolean requestAppForCamera(); /** * @return A string which is used to get the namespace for settings in * the module scope. */ public String getScopeNamespace(); /** * Creates the module. * * @param app The {@link com.android.camera.app.AppController} which * creates this module. * @param intent The {@link android.content.Intent} which starts the activity. * @return The module. */ public ModuleController createModule(AppController app, Intent intent); } /** * Registers a module. A module will be available only if its agent is * registered. The registration might fail. * * @param agent The {@link com.android.camera.app.ModuleManager.ModuleAgent} * of the module. * @throws java.lang.NullPointerException if the {@code agent} is null. * @throws java.lang.IllegalArgumentException if the module ID is * {@code MODULE_INDEX} or another module with the sameID is registered * already. */ void registerModule(ModuleAgent agent); /** * Unregister a module. * * @param moduleId The module ID. * @return Whether the un-registration succeeds. */ boolean unregisterModule(int moduleId); /** * @return A {@link java.util.List} of the * {@link com.android.camera.app.ModuleManager.ModuleAgent} of all the * registered modules. */ List getRegisteredModuleAgents(); /** * @return A {@link java.util.List} of the * {@link com.android.camera.app.ModuleManager.ModuleAgent} of all the * registered modules' indices. */ List getSupportedModeIndexList(); /** * Sets the default module index. No-op if the module index does not exist. * * @param moduleId The ID of the default module. * @return Whether the {@code moduleId} exists. */ boolean setDefaultModuleIndex(int moduleId); /** * @return The default module index. {@code MODULE_INDEX_NONE} if not set. */ int getDefaultModuleIndex(); /** * Returns the {@link com.android.camera.app.ModuleManager.ModuleAgent} by * the module ID. * * @param moduleId The module ID. * @return The agent. */ ModuleAgent getModuleAgent(int moduleId); /** * Gets the mode that can be switched to from the given mode id through * quick switch. * * @param moduleId index of the mode to switch from * @param settingsManager settings manager for querying last used camera module * @param context the context the activity is running in * @return mode id to quick switch to if index is valid, otherwise returns * the given mode id itself */ int getQuickSwitchToModuleId(int moduleId, SettingsManager settingsManager, Context context); }