Home | History | Annotate | Download | only in app
      1 /*
      2  * Copyright (C) 2013 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.camera.app;
     18 
     19 import android.content.Context;
     20 
     21 import com.android.camera.module.ModuleController;
     22 import com.android.camera.settings.SettingsManager;
     23 
     24 import java.util.List;
     25 
     26 /**
     27  * The module manager which maintains the
     28  * {@link ModuleManagerImpl.ModuleAgent}.
     29  */
     30 public interface ModuleManager {
     31     public static int MODULE_INDEX_NONE = -1;
     32 
     33     /**
     34      * The module agent which is responsible for maintaining the static
     35      * characteristics and the creation of the module.
     36      */
     37     public static interface ModuleAgent {
     38 
     39         /**
     40          * @return The module ID.
     41          */
     42         public int getModuleId();
     43 
     44         /**
     45          * @return Whether the module will request the app for the camera.
     46          */
     47         public boolean requestAppForCamera();
     48 
     49         /**
     50          * Creates the module.
     51          *
     52          * @param app The {@link com.android.camera.app.AppController} which
     53          *            creates this module.
     54          * @return The module.
     55          */
     56         public ModuleController createModule(AppController app);
     57     }
     58 
     59     /**
     60      * Registers a module. A module will be available only if its agent is
     61      * registered. The registration might fail.
     62      *
     63      * @param agent The {@link com.android.camera.app.ModuleManager.ModuleAgent}
     64      *              of the module.
     65      * @throws java.lang.NullPointerException if the {@code agent} is null.
     66      * @throws java.lang.IllegalArgumentException if the module ID is
     67      * {@code MODULE_INDEX} or another module with the sameID is registered
     68      * already.
     69      */
     70     void registerModule(ModuleAgent agent);
     71 
     72     /**
     73      * Unregister a module.
     74      *
     75      * @param moduleId The module ID.
     76      * @return Whether the un-registration succeeds.
     77      */
     78     boolean unregisterModule(int moduleId);
     79 
     80     /**
     81      * @return A {@link java.util.List} of the
     82      * {@link com.android.camera.app.ModuleManager.ModuleAgent} of all the
     83      * registered modules.
     84      */
     85     List<ModuleAgent> getRegisteredModuleAgents();
     86 
     87     /**
     88      * @return A {@link java.util.List} of the
     89      * {@link com.android.camera.app.ModuleManager.ModuleAgent} of all the
     90      * registered modules' indices.
     91      */
     92     List<Integer> getSupportedModeIndexList();
     93 
     94     /**
     95      * Sets the default module index. No-op if the module index does not exist.
     96      *
     97      * @param moduleId The ID of the default module.
     98      * @return Whether the {@code moduleId} exists.
     99      */
    100     boolean setDefaultModuleIndex(int moduleId);
    101 
    102     /**
    103      * @return The default module index. {@code MODULE_INDEX_NONE} if not set.
    104      */
    105     int getDefaultModuleIndex();
    106 
    107     /**
    108      * Returns the {@link com.android.camera.app.ModuleManager.ModuleAgent} by
    109      * the module ID.
    110      *
    111      * @param moduleId The module ID.
    112      * @return The agent.
    113      */
    114     ModuleAgent getModuleAgent(int moduleId);
    115 
    116     /**
    117      * Gets the mode that can be switched to from the given mode id through
    118      * quick switch.
    119      *
    120      * @param moduleId index of the mode to switch from
    121      * @param settingsManager settings manager for querying last used camera module
    122      * @param context the context the activity is running in
    123      * @return mode id to quick switch to if index is valid, otherwise returns
    124      *         the given mode id itself
    125      */
    126     int getQuickSwitchToModuleId(int moduleId, SettingsManager settingsManager, Context context);
    127 }
    128