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.app.Activity;
     20 import android.app.Dialog;
     21 import android.content.Context;
     22 import android.content.Intent;
     23 import android.graphics.Bitmap;
     24 import android.graphics.Matrix;
     25 import android.graphics.RectF;
     26 import android.graphics.SurfaceTexture;
     27 import android.net.Uri;
     28 import android.view.View;
     29 import android.widget.FrameLayout;
     30 
     31 import com.android.camera.ButtonManager;
     32 import com.android.camera.FatalErrorHandler;
     33 import com.android.camera.SoundPlayer;
     34 import com.android.camera.module.ModuleController;
     35 import com.android.camera.one.OneCameraOpener;
     36 import com.android.camera.one.config.OneCameraFeatureConfig;
     37 import com.android.camera.settings.ResolutionSetting;
     38 import com.android.camera.settings.SettingsManager;
     39 import com.android.camera.ui.AbstractTutorialOverlay;
     40 import com.android.camera.ui.PreviewStatusListener;
     41 
     42 /**
     43  * The controller at app level.
     44  */
     45 public interface AppController {
     46 
     47     /**
     48      * An interface which defines the shutter events listener.
     49      */
     50     public interface ShutterEventsListener {
     51         /**
     52          * Called when the shutter state is changed to pressed.
     53          */
     54         public void onShutterPressed();
     55 
     56         /**
     57          * Called when the shutter state is changed to released.
     58          */
     59         public void onShutterReleased();
     60 
     61         /**
     62          * Called when the shutter is clicked.
     63          */
     64         public void onShutterClicked();
     65 
     66         /**
     67          * Called when the shutter is long pressed.
     68          */
     69         public void onShutterLongPressed();
     70     }
     71 
     72     /**
     73      * @return the {@link android.content.Context} being used.
     74      */
     75     public Context getAndroidContext();
     76 
     77     /** @return the camera feature configuration for the device. */
     78     public OneCameraFeatureConfig getCameraFeatureConfig();
     79 
     80     /**
     81      * Creates a new dialog which can be shown in the app.
     82      *
     83      * @return  {@link android.app.Dialog} of the app.
     84      */
     85     public Dialog createDialog();
     86 
     87     /**
     88      * @return a String scope uniquely identifing the current module.
     89      */
     90     public String getModuleScope();
     91 
     92     /**
     93      * @return a String scope uniquely identifing the current camera id.
     94      */
     95     public String getCameraScope();
     96 
     97     /**
     98      * Starts an activity.
     99      *
    100      * @param intent Used to start the activity.
    101      */
    102     public void launchActivityByIntent(Intent intent);
    103 
    104     /**
    105      * See {@link Activity#openContextMenu(View)}
    106      */
    107     public void openContextMenu(View view);
    108 
    109     /**
    110      * See {@link Activity#registerForContextMenu(View)}
    111      */
    112     public void registerForContextMenu(View view);
    113 
    114     /**
    115      * Returns whether the app is currently paused.
    116      */
    117     public boolean isPaused();
    118 
    119     /**
    120      * Returns the current module controller.
    121      */
    122     public ModuleController getCurrentModuleController();
    123 
    124     /**
    125      * Returns the currently active module index.
    126      */
    127     public int getCurrentModuleIndex();
    128 
    129     /**
    130      * Returns the module ID for a specific mode.
    131      */
    132     public int getModuleId(int modeIndex);
    133 
    134     /**
    135      * Gets the mode that can be switched to from the given mode id through
    136      * quick switch.
    137      *
    138      * @param currentModuleIndex index of the current mode
    139      * @return mode id to quick switch to if index is valid, otherwise returns
    140      *         the given mode id itself
    141      */
    142     public int getQuickSwitchToModuleId(int currentModuleIndex);
    143 
    144     /**
    145      * Based on a mode switcher index, choose the correct module index.
    146      *
    147      * @param modeIndex mode switcher index.
    148      * @return module index.
    149      */
    150     public int getPreferredChildModeIndex(int modeIndex);
    151 
    152     /**
    153      * This gets called when mode is changed.
    154      *
    155      * @param moduleIndex index of the new module to switch to
    156      */
    157     public void onModeSelected(int moduleIndex);
    158 
    159     /**
    160      * This gets called when settings is selected and settings dialog needs to open.
    161      */
    162     public void onSettingsSelected();
    163 
    164     /********************** UI / Camera preview **********************/
    165 
    166 
    167     /**
    168      * Freeze what is currently shown on screen until the next preview frame comes
    169      * in. This can be used for camera switch to hide the UI changes underneath
    170      * until preview is ready.
    171      */
    172     public void freezeScreenUntilPreviewReady();
    173 
    174     /**
    175      * Returns the {@link android.graphics.SurfaceTexture} used by the preview
    176      * UI.
    177      */
    178     public SurfaceTexture getPreviewBuffer();
    179 
    180     /**
    181      * Gets called from module when preview is ready to start.
    182      */
    183     public void onPreviewReadyToStart();
    184 
    185     /**
    186      * Gets called from module when preview is started.
    187      */
    188     public void onPreviewStarted();
    189 
    190     /**
    191      * Adds a listener to receive callbacks when preview area changes.
    192      */
    193     public void addPreviewAreaSizeChangedListener(
    194             PreviewStatusListener.PreviewAreaChangedListener listener);
    195 
    196     /**
    197      * Removes a listener that receives callbacks when preview area changes.
    198      */
    199     public void removePreviewAreaSizeChangedListener(
    200             PreviewStatusListener.PreviewAreaChangedListener listener);
    201 
    202     /**
    203      * Sets up one shot preview callback in order to notify UI when the next
    204      * preview frame comes in.
    205      */
    206     public void setupOneShotPreviewListener();
    207 
    208     /**
    209      * Gets called from module when preview aspect ratio has changed.
    210      *
    211      * @param aspectRatio aspect ratio of preview stream
    212      */
    213     public void updatePreviewAspectRatio(float aspectRatio);
    214 
    215     /**
    216      * Gets called from module when the module needs to change the transform
    217      * matrix of the preview TextureView. It does not modify the matrix before
    218      * applying it.
    219      *
    220      * @param matrix transform matrix to be set on preview TextureView
    221      * @param aspectRatio the desired aspect ratio of the preview
    222      */
    223     public void updatePreviewTransformFullscreen(Matrix matrix, float aspectRatio);
    224 
    225     /**
    226      * Call this to find the full rect available for a full screen preview
    227      *
    228      * @return the rect of the full screen minus any decor.
    229      */
    230     public RectF getFullscreenRect();
    231 
    232     /**
    233      * Gets called from module when the module needs to change the transform
    234      * matrix of the preview TextureView. It is encouraged to use
    235      * {@link #updatePreviewAspectRatio(float)} over this function, unless the
    236      * module needs to rotate the surface texture using transform matrix.
    237      *
    238      * @param matrix transform matrix to be set on preview TextureView
    239      */
    240     public void updatePreviewTransform(Matrix matrix);
    241 
    242     /**
    243      * Sets the preview status listener, which will get notified when TextureView
    244      * surface has changed
    245      *
    246      * @param previewStatusListener the listener to get callbacks
    247      */
    248     public void setPreviewStatusListener(PreviewStatusListener previewStatusListener);
    249 
    250     /**
    251      * Returns the {@link android.widget.FrameLayout} as the root of the module
    252      * layout.
    253      */
    254     public FrameLayout getModuleLayoutRoot();
    255 
    256     /**
    257      * Locks the system orientation.
    258      */
    259     public void lockOrientation();
    260 
    261     /**
    262      * Unlocks the system orientation.
    263      */
    264     public void unlockOrientation();
    265 
    266     /********************** Shutter button  **********************/
    267 
    268     /**
    269      * Sets the shutter events listener.
    270      *
    271      * @param listener The listener.
    272      */
    273     public void setShutterEventsListener(ShutterEventsListener listener);
    274 
    275     /**
    276      * Enables/Disables the shutter.
    277      */
    278     public void setShutterEnabled(boolean enabled);
    279 
    280     /**
    281      * Checks whether the shutter is enabled.
    282      */
    283     public boolean isShutterEnabled();
    284 
    285     /********************** Capture animation **********************/
    286 
    287     /**
    288      * Starts flash animation with optional shorter flash.
    289      *
    290      * @param shortFlash true for shorter flash (faster cameras).
    291      */
    292     public void startFlashAnimation(boolean shortFlash);
    293 
    294     /**
    295      * Starts normal pre-capture animation.
    296      */
    297     public void startPreCaptureAnimation();
    298 
    299     /**
    300      * Cancels the pre-capture animation.
    301      */
    302     public void cancelPreCaptureAnimation();
    303 
    304     /**
    305      * Starts the post-capture animation with the current preview image.
    306      */
    307     public void startPostCaptureAnimation();
    308 
    309     /**
    310      * Starts the post-capture animation with the given thumbnail.
    311      *
    312      * @param thumbnail The thumbnail for the animation.
    313      */
    314     public void startPostCaptureAnimation(Bitmap thumbnail);
    315 
    316     /**
    317      * Cancels the post-capture animation.
    318      */
    319     public void cancelPostCaptureAnimation();
    320 
    321     /********************** Media saving **********************/
    322 
    323     /**
    324      * Notifies the app of the newly captured media.
    325      */
    326     public void notifyNewMedia(Uri uri);
    327 
    328     /********************** App-level resources **********************/
    329 
    330     /**
    331      * Keeps the screen turned on.
    332      *
    333      * @param enabled Whether to keep the screen on.
    334      */
    335     public void enableKeepScreenOn(boolean enabled);
    336 
    337     /**
    338      * Returns the {@link com.android.camera.app.CameraProvider}.
    339      */
    340     public CameraProvider getCameraProvider();
    341 
    342     /**
    343      * Returns the new camera API manager.
    344      */
    345     public OneCameraOpener getCameraOpener();
    346 
    347     /**
    348      * Returns the {@link OrientationManagerImpl}.
    349      *
    350      * @return {@code null} if not available yet.
    351      */
    352     public OrientationManager getOrientationManager();
    353 
    354     /**
    355      * Returns the {@link LocationManager}.
    356      *
    357      * @return {@code null} if not available yet.
    358      */
    359     public LocationManager getLocationManager();
    360 
    361     /**
    362      * Returns the {@link SettingsManager}.
    363      */
    364     public SettingsManager getSettingsManager();
    365 
    366     /**
    367      * Returns the {@link com.android.camera.settings.ResolutionSetting}.
    368      *
    369      * @return the current resolution setting.
    370      */
    371     public ResolutionSetting getResolutionSetting();
    372 
    373     /**
    374      * @return Common services and functionality to be shared.
    375      */
    376     public CameraServices getServices();
    377 
    378     /**
    379      * @return The error handler to invoke for errors.
    380      */
    381     public FatalErrorHandler getFatalErrorHandler();
    382 
    383     /**
    384      * Returns the {@link com.android.camera.app.CameraAppUI}.
    385      *
    386      * @return {@code null} if not available yet.
    387      */
    388     public CameraAppUI getCameraAppUI();
    389 
    390     /**
    391      * Returns the {@link com.android.camera.app.ModuleManager}.
    392      *
    393      * @return {@code null} if not available yet.
    394      */
    395     public ModuleManager getModuleManager();
    396 
    397     /**
    398      * Returns the {@link com.android.camera.ButtonManager}.
    399      */
    400     public ButtonManager getButtonManager();
    401 
    402     /** Returns a sound player that can be used to play custom sounds. */
    403     public SoundPlayer getSoundPlayer();
    404 
    405     /** Whether auto-rotate is enabled.*/
    406     public boolean isAutoRotateScreen();
    407 
    408     /**
    409      * Shows the given tutorial overlay.
    410      */
    411     public void showTutorial(AbstractTutorialOverlay tutorial);
    412 
    413     /**
    414      * Finishes the activity since the intent is completed successfully.
    415      *
    416      * @param resultIntent The intent that carries the result.
    417      */
    418     public void finishActivityWithIntentCompleted(Intent resultIntent);
    419 
    420     /**
    421      * Finishes the activity since the intent got canceled.
    422      */
    423     public void finishActivityWithIntentCanceled();
    424 }
    425