blob: f74980630b6e45339441d0180ebcd97af8abcd24 [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.app;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.RectF;
import android.graphics.SurfaceTexture;
import android.net.Uri;
import android.view.View;
import android.widget.FrameLayout;
import com.android.camera.ButtonManager;
import com.android.camera.SoundPlayer;
import com.android.camera.module.ModuleController;
import com.android.camera.one.OneCameraManager;
import com.android.camera.settings.SettingsManager;
import com.android.camera.ui.AbstractTutorialOverlay;
import com.android.camera.ui.PreviewStatusListener;
/**
* The controller at app level.
*/
public interface AppController {
/**
* An interface which defines the shutter events listener.
*/
public interface ShutterEventsListener {
/**
* Called when the shutter state is changed to pressed.
*/
public void onShutterPressed();
/**
* Called when the shutter state is changed to released.
*/
public void onShutterReleased();
/**
* Called when the shutter is clicked.
*/
public void onShutterClicked();
/**
* Called when the shutter is long pressed.
*/
public void onShutterLongPressed();
}
/**
* @return the {@link android.content.Context} being used.
*/
public Context getAndroidContext();
/**
* @return the current camera id.
*/
public int getCurrentCameraId();
/**
* @return a String scope uniquely identifing the current module.
*/
public String getModuleScope();
/**
* @return a String scope uniquely identifing the current camera id.
*/
public String getCameraScope();
/**
* Starts an activity.
*
* @param intent Used to start the activity.
*/
public void launchActivityByIntent(Intent intent);
/**
* See {@link Activity#openContextMenu(View)}
*/
public void openContextMenu(View view);
/**
* See {@link Activity#registerForContextMenu(View)}
*/
public void registerForContextMenu(View view);
/**
* Returns whether the app is currently paused.
*/
public boolean isPaused();
/**
* Returns the current module controller.
*/
public ModuleController getCurrentModuleController();
/**
* Returns the currently active module index.
*/
public int getCurrentModuleIndex();
/**
* Returns the module ID for a specific mode.
*/
public int getModuleId(int modeIndex);
/**
* Gets the mode that can be switched to from the given mode id through
* quick switch.
*
* @param currentModuleIndex index of the current mode
* @return mode id to quick switch to if index is valid, otherwise returns
* the given mode id itself
*/
public int getQuickSwitchToModuleId(int currentModuleIndex);
/**
* Based on a mode switcher index, choose the correct module index.
*
* @param modeIndex mode switcher index.
* @return module index.
*/
public int getPreferredChildModeIndex(int modeIndex);
/**
* This gets called when mode is changed.
*
* @param moduleIndex index of the new module to switch to
*/
public void onModeSelected(int moduleIndex);
/**
* This gets called when settings is selected and settings dialog needs to open.
*/
public void onSettingsSelected();
/********************** UI / Camera preview **********************/
/**
* Freeze what is currently shown on screen until the next preview frame comes
* in. This can be used for camera switch to hide the UI changes underneath
* until preview is ready.
*/
public void freezeScreenUntilPreviewReady();
/**
* Returns the {@link android.graphics.SurfaceTexture} used by the preview
* UI.
*/
public SurfaceTexture getPreviewBuffer();
/**
* Gets called from module when preview is ready to start.
*/
public void onPreviewReadyToStart();
/**
* Gets called from module when preview is started.
*/
public void onPreviewStarted();
/**
* Adds a listener to receive callbacks when preview area changes.
*/
public void addPreviewAreaSizeChangedListener(
PreviewStatusListener.PreviewAreaChangedListener listener);
/**
* Removes a listener that receives callbacks when preview area changes.
*/
public void removePreviewAreaSizeChangedListener(
PreviewStatusListener.PreviewAreaChangedListener listener);
/**
* Sets up one shot preview callback in order to notify UI when the next
* preview frame comes in.
*/
public void setupOneShotPreviewListener();
/**
* Gets called from module when preview aspect ratio has changed.
*
* @param aspectRatio aspect ratio of preview stream
*/
public void updatePreviewAspectRatio(float aspectRatio);
/**
* Gets called from module when the module needs to change the transform
* matrix of the preview TextureView. It does not modify the matrix before
* applying it.
*
* @param matrix transform matrix to be set on preview TextureView
* @param aspectRatio the desired aspect ratio of the preview
*/
public void updatePreviewTransformFullscreen(Matrix matrix, float aspectRatio);
/**
* Call this to find the full rect available for a full screen preview
*
* @return the rect of the full screen minus any decor.
*/
public RectF getFullscreenRect();
/**
* Gets called from module when the module needs to change the transform
* matrix of the preview TextureView. It is encouraged to use
* {@link #updatePreviewAspectRatio(float)} over this function, unless the
* module needs to rotate the surface texture using transform matrix.
*
* @param matrix transform matrix to be set on preview TextureView
*/
public void updatePreviewTransform(Matrix matrix);
/**
* Sets the preview status listener, which will get notified when TextureView
* surface has changed
*
* @param previewStatusListener the listener to get callbacks
*/
public void setPreviewStatusListener(PreviewStatusListener previewStatusListener);
/**
* Returns the {@link android.widget.FrameLayout} as the root of the module
* layout.
*/
public FrameLayout getModuleLayoutRoot();
/**
* Locks the system orientation.
*/
public void lockOrientation();
/**
* Unlocks the system orientation.
*/
public void unlockOrientation();
/********************** Shutter button **********************/
/**
* Sets the shutter events listener.
*
* @param listener The listener.
*/
public void setShutterEventsListener(ShutterEventsListener listener);
/**
* Enables/Disables the shutter.
*/
public void setShutterEnabled(boolean enabled);
/**
* Checks whether the shutter is enabled.
*/
public boolean isShutterEnabled();
/********************** Capture animation **********************/
/**
* Starts flash animation with optional shorter flash.
*
* @param shortFlash true for shorter flash (faster cameras).
*/
public void startFlashAnimation(boolean shortFlash);
/**
* Starts normal pre-capture animation.
*/
public void startPreCaptureAnimation();
/**
* Cancels the pre-capture animation.
*/
public void cancelPreCaptureAnimation();
/**
* Starts the post-capture animation with the current preview image.
*/
public void startPostCaptureAnimation();
/**
* Starts the post-capture animation with the given thumbnail.
*
* @param thumbnail The thumbnail for the animation.
*/
public void startPostCaptureAnimation(Bitmap thumbnail);
/**
* Cancels the post-capture animation.
*/
public void cancelPostCaptureAnimation();
/********************** Media saving **********************/
/**
* Notifies the app of the newly captured media.
*/
public void notifyNewMedia(Uri uri);
/********************** App-level resources **********************/
/**
* Keeps the screen turned on.
*
* @param enabled Whether to keep the screen on.
*/
public void enableKeepScreenOn(boolean enabled);
/**
* Returns the {@link com.android.camera.app.CameraProvider}.
*/
public CameraProvider getCameraProvider();
/**
* Returns the new camera API manager.
*/
public OneCameraManager getCameraManager();
/**
* Returns the {@link OrientationManagerImpl}.
*
* @return {@code null} if not available yet.
*/
public OrientationManager getOrientationManager();
/**
* Returns the {@link com.android.camera.LocationManager}.
*
* @return {@code null} if not available yet.
*/
public LocationManager getLocationManager();
/**
* Returns the {@link com.android.camera.SettingsManager}.
*
* @return {@code null} if not available yet.
*/
public SettingsManager getSettingsManager();
/**
* @return Common services and functionality to be shared.
*/
public CameraServices getServices();
/**
* Returns the {@link com.android.camera.app.CameraAppUI}.
*
* @return {@code null} if not available yet.
*/
public CameraAppUI getCameraAppUI();
/**
* Returns the {@link com.android.camera.app.ModuleManager}.
*
* @return {@code null} if not available yet.
*/
public ModuleManager getModuleManager();
/**
* Returns the {@link com.android.camera.ButtonManager}.
*/
public ButtonManager getButtonManager();
/** Returns a sound player that can be used to play custom sounds. */
public SoundPlayer getSoundPlayer();
/** Whether auto-rotate is enabled.*/
public boolean isAutoRotateScreen();
/**
* Shows the given tutorial overlay.
*/
public void showTutorial(AbstractTutorialOverlay tutorial);
/**
* Shows and error message on the screen and, when dismissed, exits the
* activity.
*
* @param messageId the ID of the message to show on screen before exiting.
*/
public void showErrorAndFinish(int messageId);
}