blob: 87090ae25f6174bb5f83b9c37e314b4162ff81ef [file] [log] [blame]
/*
* 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.module;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import com.android.camera.CaptureModule;
import com.android.camera.PhotoModule;
import com.android.camera.VideoModule;
import com.android.camera.app.AppController;
import com.android.camera.app.ModuleManager;
import com.android.camera.captureintent.CaptureIntentModule;
import com.android.camera.debug.Log;
import com.android.camera.one.OneCamera;
import com.android.camera.one.OneCameraException;
import com.android.camera.one.config.OneCameraFeatureConfig;
import com.android.camera.one.config.OneCameraFeatureConfig.HdrPlusSupportLevel;
import com.android.camera.settings.SettingsScopeNamespaces;
import com.android.camera.util.GcamHelper;
import com.android.camera.util.PhotoSphereHelper;
import com.android.camera.util.RefocusHelper;
import com.android.camera2.R;
/**
* A class holding the module information and registers them to
* {@link com.android.camera.app.ModuleManager}.
*/
public class ModulesInfo {
private static final Log.Tag TAG = new Log.Tag("ModulesInfo");
public static void setupModules(Context context, ModuleManager moduleManager,
OneCameraFeatureConfig config) {
Resources res = context.getResources();
int photoModuleId = context.getResources().getInteger(R.integer.camera_mode_photo);
registerPhotoModule(moduleManager, photoModuleId, SettingsScopeNamespaces.PHOTO,
config.isUsingCaptureModule());
moduleManager.setDefaultModuleIndex(photoModuleId);
registerVideoModule(moduleManager, res.getInteger(R.integer.camera_mode_video),
SettingsScopeNamespaces.VIDEO);
if (PhotoSphereHelper.hasLightCycleCapture(context)) {
registerWideAngleModule(moduleManager, res.getInteger(R.integer.camera_mode_panorama),
SettingsScopeNamespaces.PANORAMA);
registerPhotoSphereModule(moduleManager,
res.getInteger(R.integer.camera_mode_photosphere),
SettingsScopeNamespaces.PANORAMA);
}
if (RefocusHelper.hasRefocusCapture(context)) {
registerRefocusModule(moduleManager, res.getInteger(R.integer.camera_mode_refocus),
SettingsScopeNamespaces.REFOCUS);
}
if (GcamHelper.hasGcamAsSeparateModule(config)) {
registerGcamModule(moduleManager, res.getInteger(R.integer.camera_mode_gcam),
SettingsScopeNamespaces.PHOTO,
config.getHdrPlusSupportLevel(OneCamera.Facing.BACK));
}
int imageCaptureIntentModuleId = res.getInteger(R.integer.camera_mode_capture_intent);
registerCaptureIntentModule(moduleManager, imageCaptureIntentModuleId,
SettingsScopeNamespaces.PHOTO, config.isUsingCaptureModule());
}
private static void registerPhotoModule(ModuleManager moduleManager, final int moduleId,
final String namespace, final boolean enableCaptureModule) {
moduleManager.registerModule(new ModuleManager.ModuleAgent() {
@Override
public int getModuleId() {
return moduleId;
}
@Override
public boolean requestAppForCamera() {
// The PhotoModule requests the old app camere, while the new
// capture module is using OneCamera. At some point we'll
// refactor all modules to use OneCamera, then the new module
// doesn't have to manage it itself.
return !enableCaptureModule;
}
@Override
public String getScopeNamespace() {
return namespace;
}
@Override
public ModuleController createModule(AppController app, Intent intent) {
Log.v(TAG, "EnableCaptureModule = " + enableCaptureModule);
return enableCaptureModule ? new CaptureModule(app) : new PhotoModule(app);
}
});
}
private static void registerVideoModule(ModuleManager moduleManager, final int moduleId,
final String namespace) {
moduleManager.registerModule(new ModuleManager.ModuleAgent() {
@Override
public int getModuleId() {
return moduleId;
}
@Override
public boolean requestAppForCamera() {
return true;
}
@Override
public String getScopeNamespace() {
return namespace;
}
@Override
public ModuleController createModule(AppController app, Intent intent) {
return new VideoModule(app);
}
});
}
private static void registerWideAngleModule(ModuleManager moduleManager, final int moduleId,
final String namespace) {
moduleManager.registerModule(new ModuleManager.ModuleAgent() {
@Override
public int getModuleId() {
return moduleId;
}
@Override
public boolean requestAppForCamera() {
return true;
}
@Override
public String getScopeNamespace() {
return namespace;
}
@Override
public ModuleController createModule(AppController app, Intent intent) {
return PhotoSphereHelper.createWideAnglePanoramaModule(app);
}
});
}
private static void registerPhotoSphereModule(ModuleManager moduleManager, final int moduleId,
final String namespace) {
moduleManager.registerModule(new ModuleManager.ModuleAgent() {
@Override
public int getModuleId() {
return moduleId;
}
@Override
public boolean requestAppForCamera() {
return true;
}
@Override
public String getScopeNamespace() {
return namespace;
}
@Override
public ModuleController createModule(AppController app, Intent intent) {
return PhotoSphereHelper.createPanoramaModule(app);
}
});
}
private static void registerRefocusModule(ModuleManager moduleManager, final int moduleId,
final String namespace) {
moduleManager.registerModule(new ModuleManager.ModuleAgent() {
@Override
public int getModuleId() {
return moduleId;
}
@Override
public boolean requestAppForCamera() {
return true;
}
@Override
public String getScopeNamespace() {
return namespace;
}
@Override
public ModuleController createModule(AppController app, Intent intent) {
return RefocusHelper.createRefocusModule(app);
}
});
}
private static void registerGcamModule(ModuleManager moduleManager, final int moduleId,
final String namespace, final HdrPlusSupportLevel hdrPlusSupportLevel) {
moduleManager.registerModule(new ModuleManager.ModuleAgent() {
@Override
public int getModuleId() {
return moduleId;
}
@Override
public boolean requestAppForCamera() {
return false;
}
@Override
public String getScopeNamespace() {
return namespace;
}
@Override
public ModuleController createModule(AppController app, Intent intent) {
return GcamHelper.createGcamModule(app, hdrPlusSupportLevel);
}
});
}
private static void registerCaptureIntentModule(ModuleManager moduleManager, final int moduleId,
final String namespace, final boolean enableCaptureModule) {
moduleManager.registerModule(new ModuleManager.ModuleAgent() {
@Override
public int getModuleId() {
return moduleId;
}
@Override
public boolean requestAppForCamera() {
return !enableCaptureModule;
}
@Override
public String getScopeNamespace() {
return namespace;
}
@Override
public ModuleController createModule(AppController app, Intent intent) {
if(enableCaptureModule) {
try {
return new CaptureIntentModule(app, intent, namespace);
} catch (OneCameraException ignored) {
}
}
return new PhotoModule(app);
}
});
}
}