/* * 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.util.SparseArray; import com.android.camera.debug.Log; import com.android.camera.settings.Keys; import com.android.camera.settings.SettingsManager; import com.android.camera2.R; import java.util.ArrayList; import java.util.List; /** * A class which implements {@link com.android.camera.app.ModuleManager}. */ public class ModuleManagerImpl implements ModuleManager { private static final Log.Tag TAG = new Log.Tag("ModuleManagerImpl"); private final SparseArray mRegisteredModuleAgents = new SparseArray(2); private int mDefaultModuleId = MODULE_INDEX_NONE; public ModuleManagerImpl() { } @Override public void registerModule(ModuleAgent agent) { if (agent == null) { throw new NullPointerException("Registering a null ModuleAgent."); } final int moduleId = agent.getModuleId(); if (moduleId == MODULE_INDEX_NONE) { throw new IllegalArgumentException( "ModuleManager: The module ID can not be " + "MODULE_INDEX_NONE"); } if (mRegisteredModuleAgents.get(moduleId) != null) { throw new IllegalArgumentException("Module ID is registered already:" + moduleId); } mRegisteredModuleAgents.put(moduleId, agent); } @Override public boolean unregisterModule(int moduleId) { if (mRegisteredModuleAgents.get(moduleId) == null) { return false; } mRegisteredModuleAgents.delete(moduleId); if (moduleId == mDefaultModuleId) { mDefaultModuleId = -1; } return true; } @Override public List getRegisteredModuleAgents() { List agents = new ArrayList(); for (int i = 0; i < mRegisteredModuleAgents.size(); i++) { agents.add(mRegisteredModuleAgents.valueAt(i)); } return agents; } @Override public List getSupportedModeIndexList() { List modeIndexList = new ArrayList(); for (int i = 0; i < mRegisteredModuleAgents.size(); i++) { modeIndexList.add(mRegisteredModuleAgents.keyAt(i)); } return modeIndexList; } @Override public boolean setDefaultModuleIndex(int moduleId) { if (mRegisteredModuleAgents.get(moduleId) != null) { mDefaultModuleId = moduleId; return true; } return false; } @Override public int getDefaultModuleIndex() { return mDefaultModuleId; } @Override public ModuleAgent getModuleAgent(int moduleId) { ModuleAgent agent = mRegisteredModuleAgents.get(moduleId); if (agent == null) { return mRegisteredModuleAgents.get(mDefaultModuleId); } return agent; } @Override public int getQuickSwitchToModuleId(int moduleId, SettingsManager settingsManager, Context context) { final int photoModuleId = context.getResources().getInteger(R.integer.camera_mode_photo); final int videoModuleId = context.getResources().getInteger(R.integer.camera_mode_video); int quickSwitchTo = moduleId; if (moduleId == photoModuleId || moduleId == context.getResources().getInteger(R.integer.camera_mode_gcam)) { // Quick switch from camera to video. quickSwitchTo = videoModuleId; } else if (moduleId == videoModuleId) { // Quick switch from video to last used camera (i.e. simple camera or hdr+) quickSwitchTo = settingsManager.getInteger( SettingsManager.SCOPE_GLOBAL, Keys.KEY_CAMERA_MODULE_LAST_USED); } if (mRegisteredModuleAgents.get(quickSwitchTo) != null) { return quickSwitchTo; } else { return moduleId; } } }