OSDN Git Service

機能の実行部分をクラスとして独立。
authorMRSa <mrsa@myad.jp>
Fri, 14 Apr 2017 16:06:49 +0000 (01:06 +0900)
committerMRSa <mrsa@myad.jp>
Fri, 14 Apr 2017 16:06:49 +0000 (01:06 +0900)
データ表示エリアとして上部中央と下部中央を追加。

app/build.gradle
wear/build.gradle
wear/src/main/java/jp/sfjp/gokigen/a01c/IShowInformation.java
wear/src/main/java/jp/sfjp/gokigen/a01c/MainActivity.java
wear/src/main/java/jp/sfjp/gokigen/a01c/liveview/CameraLiveImageView.java
wear/src/main/java/jp/sfjp/gokigen/a01c/liveview/FeatureDispatcher.java [new file with mode: 0644]
wear/src/main/java/jp/sfjp/gokigen/a01c/liveview/ICameraFeatureDispatcher.java
wear/src/main/java/jp/sfjp/gokigen/a01c/liveview/IMessageDrawer.java
wear/src/main/java/jp/sfjp/gokigen/a01c/liveview/OlyCameraLiveViewOnTouchListener.java
wear/src/main/java/jp/sfjp/gokigen/a01c/liveview/ShowMessageHolder.java
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/OlyCameraCoordinator.java

index 349e34b..6a84f11 100644 (file)
@@ -7,8 +7,8 @@ android {
         applicationId "jp.sfjp.gokigen.a01c"
         minSdkVersion 23
         targetSdkVersion 25
-        versionCode 9
-        versionName "1.1.0"
+        versionCode 11
+        versionName "1.1.1"
     }
     buildTypes {
         release {
index 94def17..9d6e4e6 100644 (file)
@@ -7,8 +7,8 @@ android {
         applicationId "jp.sfjp.gokigen.a01c"
         minSdkVersion 23
         targetSdkVersion 25
-        versionCode 8
-        versionName "1.1.0"
+        versionCode 10
+        versionName "1.1.1"
     }
     buildTypes {
         release {
index c49c9c9..6494552 100644 (file)
@@ -15,6 +15,8 @@ public interface IShowInformation
     int AREA_6 = 7;
     int AREA_7 = 8;
     int AREA_8 = 9;
+    int AREA_9 = 10;
+    int AREA_A = 11;
 
     int BUTTON_1 = 1;
     int BUTTON_2 = 2;
index 8454557..8c92ea3 100644 (file)
@@ -15,6 +15,7 @@ import android.support.v4.content.ContextCompat;
 
 import jp.sfjp.gokigen.a01c.liveview.CameraLiveImageView;
 import jp.sfjp.gokigen.a01c.liveview.CameraLiveViewListenerImpl;
+import jp.sfjp.gokigen.a01c.liveview.FeatureDispatcher;
 import jp.sfjp.gokigen.a01c.liveview.ICameraStatusReceiver;
 import jp.sfjp.gokigen.a01c.liveview.IMessageDrawer;
 import jp.sfjp.gokigen.a01c.liveview.OlyCameraLiveViewOnTouchListener;
@@ -85,8 +86,6 @@ public class MainActivity extends WearableActivity implements  IChangeScene, ISh
         // バイブレータをつかまえる
         vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
 
-        listener = new OlyCameraLiveViewOnTouchListener(this);
-
         setupCameraCoordinator();
         setupActionListener();
     }
@@ -222,7 +221,6 @@ public class MainActivity extends WearableActivity implements  IChangeScene, ISh
         liveView.setOnTouchListener(listener);
         messageDrawer = liveView.getMessageDrawer();
         messageDrawer.setLevelGauge(coordinator.getLevelGauge());
-        listener.prepareInterfaces(coordinator, this, liveView);
     }
 
     /**
@@ -238,6 +236,8 @@ public class MainActivity extends WearableActivity implements  IChangeScene, ISh
         coordinator = null;
         coordinator = new OlyCameraCoordinator(this, liveView, this, this);
         coordinator.setLiveViewListener(new CameraLiveViewListenerImpl(liveView));
+        listener = new OlyCameraLiveViewOnTouchListener(this, new FeatureDispatcher(this, coordinator, liveView));
+
         Thread thread = new Thread(new Runnable()
         {
             @Override
@@ -383,6 +383,17 @@ public class MainActivity extends WearableActivity implements  IChangeScene, ISh
                 messageDrawer.setMessageToShow(IMessageDrawer.MessageArea.LOWRIGHT, color, IMessageDrawer.SIZE_STD, message);
                 return;
             }
+            if (area == IShowInformation.AREA_9)
+            {
+                messageDrawer.setMessageToShow(IMessageDrawer.MessageArea.UPCENTER, color, IMessageDrawer.SIZE_STD, message);
+                return;
+            }
+            if (area == IShowInformation.AREA_A)
+            {
+                messageDrawer.setMessageToShow(IMessageDrawer.MessageArea.LOWCENTER, color, IMessageDrawer.SIZE_STD, message);
+                return;
+            }
+
             if (id == 0)
             {
                 // 描画エリアが不定の場合...
@@ -501,5 +512,4 @@ public class MainActivity extends WearableActivity implements  IChangeScene, ISh
         }
     }
 
-
 }
index 8397314..75745c3 100644 (file)
@@ -723,6 +723,33 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
             canvas.drawText(message, (viewRect.right - 3.0f) - width, viewRect.bottom - fontMetrics.bottom, paint);
         }
 
+/**/
+        // 画面上部中央に表示する
+        message = messageHolder.getMessage(ShowMessageHolder.MessageArea.UPCENTER);
+        if ((message != null)&&(message.length() > 0))
+        {
+            Paint paintUp = new Paint();
+            paintUp.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.UPCENTER));
+            paintUp.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.UPCENTER));
+            paintUp.setAntiAlias(true);
+            float width = paintUp.measureText(message) / 2.0f;
+            Paint.FontMetrics fontMetrics = paintUp.getFontMetrics();
+            canvas.drawText(message, (viewRect.centerX()) - width, viewRect.top + (fontMetrics.descent - fontMetrics.ascent), paintUp);
+        }
+
+        // 画面下部中央に表示する
+        message = messageHolder.getMessage(ShowMessageHolder.MessageArea.LOWCENTER);
+        if ((message != null)&&(message.length() > 0))
+        {
+            Paint paint = new Paint();
+            paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.LOWCENTER));
+            paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.LOWCENTER));
+            paint.setAntiAlias(true);
+            float width = paint.measureText(message) / 2.0f;
+            Paint.FontMetrics fontMetrics = paint.getFontMetrics();
+            canvas.drawText(message, (viewRect.centerX()) - width, viewRect.bottom - fontMetrics.bottom, paint);
+        }
+/**/
     }
 
     /**
diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/liveview/FeatureDispatcher.java b/wear/src/main/java/jp/sfjp/gokigen/a01c/liveview/FeatureDispatcher.java
new file mode 100644 (file)
index 0000000..28a6679
--- /dev/null
@@ -0,0 +1,442 @@
+package jp.sfjp.gokigen.a01c.liveview;
+
+import android.util.Log;
+import android.view.MotionEvent;
+
+import jp.sfjp.gokigen.a01c.IShowInformation;
+import jp.sfjp.gokigen.a01c.R;
+import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraCoordinator;
+import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraProperty;
+import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraPropertyProvider;
+
+
+/**
+ *   カメラ機能の実行
+ *
+ */
+public class FeatureDispatcher implements ICameraFeatureDispatcher
+{
+    private final String TAG = toString();
+    private final IShowInformation statusDrawer;
+    private final IOlyCameraCoordinator camera;
+    private final ILiveImageStatusNotify liveImageView;
+
+    public FeatureDispatcher(IShowInformation statusDrawer, IOlyCameraCoordinator camera, ILiveImageStatusNotify liveImageView)
+    {
+        this.statusDrawer = statusDrawer;
+        this.camera = camera;
+        this.liveImageView = liveImageView;
+    }
+
+    /**
+     *   指定した機能を実行する
+     *
+     * @param objectId     操作したオブジェクト
+     * @param featureNumber  操作する機能
+     */
+    @Override
+    public boolean dispatchAction(int objectId, int featureNumber)
+    {
+        if (featureNumber <= ICameraFeatureDispatcher.FEATURE_ACTION_NONE)
+        {
+            // 何もしない
+            return (false);
+        }
+
+        // 機能実行の割り当て...
+        int duration = IShowInformation.VIBRATE_PATTERN_SIMPLE_SHORT;
+        switch (featureNumber)
+        {
+            case ICameraFeatureDispatcher.FEATURE_SETTINGS:
+                // 設定画面を開く
+                showSettingsScreen();
+                duration =IShowInformation.VIBRATE_PATTERN_NONE;
+                break;
+            case ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_GRID:
+                // グリッド標示ON/OFF
+                changeShowGrid(objectId);
+                break;
+            case ICameraFeatureDispatcher.FEATURE_SHUTTER_SINGLESHOT:
+                // シャッター
+                pushShutterButton();
+                //duration =IShowInformation.VIBRATE_PATTERN_NONE;
+                break;
+            case ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE:
+                // 撮影モードの変更
+                changeTakeMode();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_CHAGE_AE_LOCK_MODE:
+                // AE LOCKのON/OFF切り替え
+                changeAeLockMode();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN:
+                // 露出補正を1段階下げる
+                changeExposureBiasValueDown();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP:
+                // 露出補正を1段階上げる
+                changeExposureBiasValueUp();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_APERTURE_DOWN:
+                // 絞り値を1段階下げる
+                changeApertureValueDown();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_APERTURE_UP:
+                // 絞り値を1段階上げる
+                changeApertureValueUp();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_DOWN:
+                // シャッター速度を1段階下げる
+                changeShutterSpeedDown();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_UP:
+                // シャッター速度を1段階上げる
+                changeShutterSpeedUp();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_COLORTONE_DOWN:
+                // 仕上がり・ピクチャーモードを選択
+                changeColorToneDown();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_COLORTONE_UP:
+                // 仕上がり・ピクチャーモードを選択
+                changeColorToneUp();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_ART_FILTER_DOWN:
+                // アートフィルターを選択
+                changeArtFilterDown();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_ART_FILTER_UP:
+                // アートフィルターを選択
+                changeArtFilterUp();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_LEVEL_GAUGE:
+                // デジタル水準器の表示・非表示
+                changeShowLevelGauge();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE_REVERSE:
+                // 撮影モードの変更(逆順)
+                changeTakeModeReverse();
+                break;
+        }
+
+        // コマンド実行完了後、ぶるぶるさせる
+        statusDrawer.vibrate(duration);
+        return (true);
+    }
+
+    @Override
+    public boolean dispatchAreaAction(MotionEvent event, int areaFeatureNumber)
+    {
+        boolean ret = false;
+        switch (areaFeatureNumber)
+        {
+            case ICameraFeatureDispatcher.FEATURE_AREA_ACTION_DRIVE_AUTOFOCUS:
+                ret = camera.driveAutoFocus(event);
+                break;
+
+            case ICameraFeatureDispatcher.FEATURE_AREA_ACTION_NOT_CONNECTED:
+                /*
+                try
+                {
+                    // 実験... WIFIステート
+                    //Intent intent = new Intent(ACTION_ADD_NETWORK_SETTINGS);
+                    Intent intent = new Intent(ACTION_NETWORK_SETTINGS);
+                    context.startActivity(intent);
+                }
+                catch (Exception e)
+                {
+                    e.printStackTrace();
+                }
+                */
+                break;
+
+            case FEATURE_AREA_ACTION_NONE:
+            default:
+                // 何もしない
+                ret = false;
+                break;
+        }
+        return (ret);
+    }
+
+
+    /**
+     *   撮影モードの取得
+     *
+     */
+    @Override
+    public String getTakeMode()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        return (propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE)));
+    }
+
+
+    /**
+     *   撮影モードの変更指示
+     *   (P > A > S > M > ART > iAuto > ...)
+     */
+    private void changeTakeMode()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        String propetyValue = propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE));
+        if (propetyValue == null)
+        {
+            // データ取得失敗
+            return;
+        }
+        String targetMode = "<" + IOlyCameraProperty.TAKE_MODE;  // 変更先モード
+        switch (propetyValue)
+        {
+            case "P":
+                targetMode = targetMode + "/A>";
+                break;
+
+            case "A":
+                targetMode =  targetMode + "/S>";
+                break;
+
+            case "S":
+                targetMode =  targetMode + "/M>";
+                break;
+
+            case "M":
+                targetMode =  targetMode + "/ART>";
+                break;
+
+            case "ART":
+                targetMode =  targetMode + "/iAuto>";
+                break;
+
+            case "iAuto":
+            case "movie":
+            default:
+                targetMode =  targetMode + "/P>";
+                break;
+        }
+        Log.v(TAG, "changeTakeMode() " + targetMode);
+        propertyProxy.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, targetMode);
+        camera.unlockAutoFocus();
+
+        //  撮影モードの更新
+        //camera.updateTakeMode();
+    }
+
+
+    /**
+     *   撮影モードの変更指示
+     *   (iAuto < P < A < S < M < ART < iAuto < ...)
+     */
+    private void changeTakeModeReverse()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        String propetyValue = propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE));
+        if (propetyValue == null)
+        {
+            // データ取得失敗
+            return;
+        }
+        String targetMode = "<" + IOlyCameraProperty.TAKE_MODE;  // 変更先モード
+        switch (propetyValue)
+        {
+            case "P":
+                targetMode = targetMode + "/iAuto>";
+                break;
+
+            case "A":
+                targetMode =  targetMode + "/P>";
+                break;
+
+            case "S":
+                targetMode =  targetMode + "/A>";
+                break;
+
+            case "M":
+                targetMode =  targetMode + "/S>";
+                break;
+
+            case "ART":
+                targetMode =  targetMode + "/M>";
+                break;
+
+            case "iAuto":
+            case "movie":
+            default:
+                targetMode =  targetMode + "/ART>";
+                break;
+        }
+        Log.v(TAG, "changeTakeMode() " + targetMode);
+        propertyProxy.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, targetMode);
+        camera.unlockAutoFocus();
+
+        //  撮影モードの更新
+        //camera.updateTakeMode();
+    }
+
+
+    /**
+     *   シャッターボタンが押された!
+     *   (現在は、連続撮影モードやムービー撮影についてはまだ非対応)
+     */
+    private void pushShutterButton()
+    {
+        // カメラ側のシャッターを押す
+        camera.singleShot();
+    }
+
+    /**
+     *   グリッド表示の ON/OFFを切り替える
+     *
+     */
+    private void changeShowGrid(int objectId)
+    {
+        liveImageView.toggleShowGridFrame();
+        updateGridStatusButton(objectId);
+    }
+
+
+    /**
+     *  デジタル水準器の ON/OFFを切り替える
+     *
+     */
+    private void changeShowLevelGauge()
+    {
+        liveImageView.toggleShowLevelGauge();
+    }
+
+    /**
+     *   AE-Lock/Lock解除を行う
+     *
+     */
+    private void changeAeLockMode()
+    {
+        camera.toggleAutoExposure();
+    }
+
+    /**
+     *  グリッドフレームの表示・非表示ボタンを更新する
+     *
+     */
+    private void updateGridStatusButton(int buttonId)
+    {
+        int btnResId;
+        if (liveImageView.isShowGrid())
+        {
+            // グリッドがON状態、グリッドをOFFにするボタンを出す
+            btnResId = R.drawable.btn_ic_grid_off;
+        }
+        else
+        {
+            //  グリッドがOFF状態、グリッドをONにするボタンを出す
+            btnResId = R.drawable.btn_ic_grid_on;
+        }
+        statusDrawer.setButtonDrawable(buttonId, btnResId);
+    }
+
+    /**
+     *   露出補正を1段階下げる
+     */
+    private void changeExposureBiasValueDown()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.EXPOSURE_COMPENSATION);
+    }
+
+    /**
+     *   露出補正を1段階あげる
+     *
+     */
+    private void changeExposureBiasValueUp()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.EXPOSURE_COMPENSATION);
+    }
+
+    /**
+     *   絞り値を1段階下げる
+     */
+    private void changeApertureValueDown()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.APERTURE);
+    }
+
+    /**
+     *   絞り値を1段階あげる
+     *
+     */
+    private void changeApertureValueUp()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.APERTURE);
+    }
+
+    /**
+     *   シャッター速度を1段階下げる
+     */
+    private void changeShutterSpeedDown()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.SHUTTER_SPEED);
+    }
+
+    /**
+     *   シャッター速度を1段階あげる
+     *
+     */
+    private void changeShutterSpeedUp()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.SHUTTER_SPEED);
+    }
+
+
+    /**
+     *   仕上がり・ピクチャーモードを1段階下げる
+     */
+    private void changeColorToneDown()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.COLOR_TONE);
+    }
+
+    /**
+     *   仕上がり・ピクチャーモードを1段階あげる
+     *
+     */
+    private void changeColorToneUp()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.COLOR_TONE);
+    }
+
+    /**
+     *   アートフィルターを1段階さげる
+     *
+     */
+    private void changeArtFilterDown()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.ART_FILTER);
+    }
+
+    /**
+     *   アートフィルターを1段階あげる
+     *
+     */
+    private void changeArtFilterUp()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.ART_FILTER);
+    }
+
+
+    /**
+     *   設定画面を開く
+     *
+     */
+    private void showSettingsScreen()
+    {
+        // TBD...
+    }
+}
index f2cc543..3a7ffe0 100644 (file)
@@ -1,10 +1,12 @@
 package jp.sfjp.gokigen.a01c.liveview;
 
+import android.view.MotionEvent;
+
 /**
  *   機能とボタンの設定群
  *
  */
-public interface ICameraFeatureDispatcher
+interface ICameraFeatureDispatcher
 {
     // 撮影モード
     String MODE_P = "_P";
@@ -37,19 +39,21 @@ public interface ICameraFeatureDispatcher
     String DRAWABLE_BUTTON6 = "D6";
 
     // 表示エリア
-    String SHOW_TEXT_AREAC = "TXTC";
-    String SHOW_TEXT_AREA1 = "TXT1";
-    String SHOW_TEXT_AREA2 = "TXT2";
-    String SHOW_TEXT_AREA3 = "TXT3";
-    String SHOW_TEXT_AREA4 = "TXT4";
-    String SHOW_TEXT_AREA5 = "TXT5";
-    String SHOW_TEXT_AREA6 = "TXT6";
-    String SHOW_TEXT_AREA7 = "TXT7";
-    String SHOW_TEXT_AREA8 = "TXT8";
+    String SHOW_TEXT_AREA_C = "TXTC";
+    String SHOW_TEXT_AREA_1 = "TXT1";
+    String SHOW_TEXT_AREA_2 = "TXT2";
+    String SHOW_TEXT_AREA_3 = "TXT3";
+    String SHOW_TEXT_AREA_4 = "TXT4";
+    String SHOW_TEXT_AREA_5 = "TXT5";
+    String SHOW_TEXT_AREA_6 = "TXT6";
+    String SHOW_TEXT_AREA_7 = "TXT7";
+    String SHOW_TEXT_AREA_8 = "TXT8";
+    String SHOW_TEXT_AREA_9 = "TXT9";
+    String SHOW_TEXT_AREA_A = "TXTA";
 
     String ACTION_SECOND_CHOICE = "_L_";
 
-    // A01Cが持つ機能 (ボタンに割り当て可能)
+    // A01Cが持つ機能 (ボタンに割り当て可能な featureNumber)
     int FEATURE_ACTION_NONE = 0;
     int FEATURE_SETTINGS = 1;
     int FEATURE_TOGGLE_SHOW_GRID = 2;
@@ -68,4 +72,14 @@ public interface ICameraFeatureDispatcher
     int FEATURE_ART_FILTER_UP = 15;
     int FEATURE_TOGGLE_SHOW_LEVEL_GAUGE = 16;
     int FEATURE_CHANGE_TAKEMODE_REVERSE = 17;
+
+    // エリアタッチ時の機能(featureNumber)
+    int FEATURE_AREA_ACTION_NONE = 100;
+    int FEATURE_AREA_ACTION_NOT_CONNECTED = 101;
+    int FEATURE_AREA_ACTION_DRIVE_AUTOFOCUS = 102;
+
+    // アクションインタフェース
+    String getTakeMode();   // 撮影モードの取得
+    boolean dispatchAction(int objectId, int featureNumber);  // コマンドの実行
+    boolean dispatchAreaAction(MotionEvent event, int areaFeatureNumber);  // タッチエリアアクションの実行
 }
index d2ccad5..68a54e9 100644 (file)
@@ -10,9 +10,11 @@ public interface IMessageDrawer
     {
         UPLEFT,
         UPRIGHT,
+        UPCENTER,
         CENTER,
         LOWLEFT,
-        LOWRIGHT
+        LOWRIGHT,
+        LOWCENTER
     }
 
     int SIZE_STD = 16;
index 3c3cc27..bb7ad02 100644 (file)
@@ -1,62 +1,39 @@
 package jp.sfjp.gokigen.a01c.liveview;
 
-
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.support.v7.preference.PreferenceManager;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
-import android.widget.Toast;
-
-import java.util.List;
 
 import jp.sfjp.gokigen.a01c.IShowInformation;
 import jp.sfjp.gokigen.a01c.R;
-import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraCoordinator;
-import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraProperty;
-import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraPropertyProvider;
-
-import static jp.sfjp.gokigen.a01c.liveview.ICameraFeatureDispatcher.ACTION_SECOND_CHOICE;
-
 
 /**
- *
+ *   画面がタッチ・クリックされた時の処理分岐
  *
  */
 public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener, View.OnTouchListener, View.OnLongClickListener
 {
     private final String TAG = toString();
-    private final Context context;
-    private IOlyCameraCoordinator camera = null;
-    private IShowInformation statusDrawer = null;
-    private ILiveImageStatusNotify liveImageView = null;
-    private final SharedPreferences preferences;
 
+    private final SharedPreferences preferences;
+    private final ICameraFeatureDispatcher dispatcher;
     private boolean prohibitOperation = true;
 
     /**
+     *   コンストラクタの整理
      *
      */
-    public OlyCameraLiveViewOnTouchListener(Context context)
+    public OlyCameraLiveViewOnTouchListener(Context context, ICameraFeatureDispatcher dispatcher)
     {
-        this.context = context;
         preferences = PreferenceManager.getDefaultSharedPreferences(context);
-    }
-
-    /**
-     *
-     */
-    public void prepareInterfaces(IOlyCameraCoordinator cameraCoordinator, IShowInformation statusDrawer, ILiveImageStatusNotify liveImageView)
-    {
-        this.camera = cameraCoordinator;
-        this.statusDrawer = statusDrawer;
-        this.liveImageView = liveImageView;
+        this.dispatcher = dispatcher;
     }
 
     /**
      *   ボタン(オブジェクト)をクリックしたときの処理
-     *
      */
     @Override
     public void onClick(View v)
@@ -121,7 +98,7 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         if (prohibitOperation)
         {
             // 操作禁止の指示がされていた場合は何もしない
-            Log.v(TAG, "onClick() : prohibit operation");
+            Log.v(TAG, "onLongClick() : prohibit operation");
             return (false);
         }
         switch (id)
@@ -177,12 +154,10 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
             // 操作禁止の指示がされていた場合は何もしない
             Log.v(TAG, "onTouch() : prohibit operation");
 
-            // 実験... WIFIステート
-            //Intent intent = new Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS");
-            //context.startActivity(intent);
             return (false);
         }
-        return ((id == R.id.liveview)&&(touchedLiveViewArea(event)));
+        // 現在のところ、タッチエリアの場合はオートフォーカス実行で固定
+        return ((id == R.id.liveview)&&(dispatcher.dispatchAreaAction(event, ICameraFeatureDispatcher.FEATURE_AREA_ACTION_DRIVE_AUTOFOCUS)));
     }
 
     /**
@@ -197,15 +172,10 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
     }
 
 
-    /***************************************************************
-     *   以下、ボタンが押された時の処理... あとで切り離す。
-     *   (撮影モードごとに処理を変えたい)
-     ***************************************************************/
-
-    private boolean touchedLiveViewArea(MotionEvent event)
-    {
-        return (camera.driveAutoFocus(event));
-    }
+    ///***************************************************************
+    // *   以下、ボタンが押された時の処理... あとで切り離す。
+    // *   (撮影モードごとに処理を変えたい)
+    ///***************************************************************/
 
     /**
      *   ボタン1が押された時の機能を引き当て実行する
@@ -217,10 +187,10 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         String preference_action_id = ICameraFeatureDispatcher.ACTION_BUTTON1;
         if (isLongClick)
         {
-            preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
+            preference_action_id = preference_action_id + ICameraFeatureDispatcher.ACTION_SECOND_CHOICE;
             defaultAction = ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_LEVEL_GAUGE;
         }
-        String takeMode = getTakeMode();
+        String takeMode = dispatcher.getTakeMode();
         switch (takeMode)
         {
             case "P":
@@ -254,7 +224,7 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
             default:
                 break;
         }
-        return (dispatchAction(IShowInformation.BUTTON_1, preferences.getInt(preference_action_id, defaultAction)));
+        return (dispatcher.dispatchAction(IShowInformation.BUTTON_1, preferences.getInt(preference_action_id, defaultAction)));
     }
 
 
@@ -268,9 +238,9 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         String preference_action_id = ICameraFeatureDispatcher.ACTION_BUTTON2;
         if (isLongClick)
         {
-            preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
+            preference_action_id = preference_action_id + ICameraFeatureDispatcher.ACTION_SECOND_CHOICE;
         }
-        String takeMode = getTakeMode();
+        String takeMode = dispatcher.getTakeMode();
         switch (takeMode)
         {
             case "P":
@@ -309,7 +279,7 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
             default:
                 break;
         }
-        return (dispatchAction(IShowInformation.BUTTON_2, preferences.getInt(preference_action_id, defaultAction)));
+        return (dispatcher.dispatchAction(IShowInformation.BUTTON_2, preferences.getInt(preference_action_id, defaultAction)));
     }
 
     /**
@@ -322,9 +292,9 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         String preference_action_id = ICameraFeatureDispatcher.ACTION_BUTTON3;
         if (isLongClick)
         {
-            preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
+            preference_action_id = preference_action_id + ICameraFeatureDispatcher.ACTION_SECOND_CHOICE;
         }
-        String takeMode = getTakeMode();
+        String takeMode = dispatcher.getTakeMode();
         switch (takeMode)
         {
             case "P":
@@ -363,7 +333,7 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
             default:
                 break;
         }
-        return (dispatchAction(IShowInformation.BUTTON_3, preferences.getInt(preference_action_id, defaultAction)));
+        return (dispatcher.dispatchAction(IShowInformation.BUTTON_3, preferences.getInt(preference_action_id, defaultAction)));
     }
 
     /**
@@ -376,9 +346,9 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         String preference_action_id = ICameraFeatureDispatcher.ACTION_BUTTON4;
         if (isLongClick)
         {
-            preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
+            preference_action_id = preference_action_id + ICameraFeatureDispatcher.ACTION_SECOND_CHOICE;
         }
-        String takeMode = getTakeMode();
+        String takeMode = dispatcher.getTakeMode();
         switch (takeMode)
         {
             case "P":
@@ -419,7 +389,7 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
             default:
                 break;
         }
-        return (dispatchAction(IShowInformation.BUTTON_4, preferences.getInt(preference_action_id, defaultAction)));
+        return (dispatcher.dispatchAction(IShowInformation.BUTTON_4, preferences.getInt(preference_action_id, defaultAction)));
     }
 
     /**
@@ -432,9 +402,9 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         String preference_action_id = ICameraFeatureDispatcher.ACTION_BUTTON5;
         if (isLongClick)
         {
-            preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
+            preference_action_id = preference_action_id + ICameraFeatureDispatcher.ACTION_SECOND_CHOICE;
         }
-        String takeMode = getTakeMode();
+        String takeMode = dispatcher.getTakeMode();
         switch (takeMode)
         {
             case "P":
@@ -475,7 +445,7 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
             default:
                 break;
         }
-        return (dispatchAction(IShowInformation.BUTTON_5, preferences.getInt(preference_action_id, defaultAction)));
+        return (dispatcher.dispatchAction(IShowInformation.BUTTON_5, preferences.getInt(preference_action_id, defaultAction)));
     }
 
     /**
@@ -488,9 +458,9 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         String preference_action_id = ICameraFeatureDispatcher.ACTION_BUTTON6;
         if (isLongClick)
         {
-            preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
+            preference_action_id = preference_action_id + ICameraFeatureDispatcher.ACTION_SECOND_CHOICE;
         }
-        String takeMode = getTakeMode();
+        String takeMode = dispatcher.getTakeMode();
         switch (takeMode)
         {
             case "P":
@@ -524,7 +494,7 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
             default:
                 break;
         }
-        return (dispatchAction(IShowInformation.BUTTON_6, preferences.getInt(preference_action_id, defaultAction)));
+        return (dispatcher.dispatchAction(IShowInformation.BUTTON_6, preferences.getInt(preference_action_id, defaultAction)));
     }
 
 
@@ -538,10 +508,10 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         String preference_action_id = ICameraFeatureDispatcher.ACTION_AREA1;
         if (isLongClick)
         {
-            preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
+            preference_action_id = preference_action_id + ICameraFeatureDispatcher.ACTION_SECOND_CHOICE;
             defaultAction = ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE_REVERSE;
         }
-        String takeMode = getTakeMode();
+        String takeMode = dispatcher.getTakeMode();
         switch (takeMode)
         {
             case "P":
@@ -575,7 +545,7 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
             default:
                 break;
         }
-        return (dispatchAction(IShowInformation.AREA_1, preferences.getInt(preference_action_id, defaultAction)));
+        return (dispatcher.dispatchAction(IShowInformation.AREA_1, preferences.getInt(preference_action_id, defaultAction)));
     }
 
     /**
@@ -588,9 +558,9 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         String preference_action_id = ICameraFeatureDispatcher.ACTION_AREA2;
         if (isLongClick)
         {
-            preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
+            preference_action_id = preference_action_id + ICameraFeatureDispatcher.ACTION_SECOND_CHOICE;
         }
-        String takeMode = getTakeMode();
+        String takeMode = dispatcher.getTakeMode();
         switch (takeMode)
         {
             case "P":
@@ -624,7 +594,7 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
             default:
                 break;
         }
-        return (dispatchAction(IShowInformation.AREA_2, preferences.getInt(preference_action_id, defaultAction)));
+        return (dispatcher.dispatchAction(IShowInformation.AREA_2, preferences.getInt(preference_action_id, defaultAction)));
     }
 
     /**
@@ -637,9 +607,9 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         String preference_action_id = ICameraFeatureDispatcher.ACTION_AREA3;
         if (isLongClick)
         {
-            preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
+            preference_action_id = preference_action_id + ICameraFeatureDispatcher.ACTION_SECOND_CHOICE;
         }
-        String takeMode = getTakeMode();
+        String takeMode = dispatcher.getTakeMode();
         switch (takeMode)
         {
             case "P":
@@ -673,7 +643,7 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
             default:
                 break;
         }
-        return (dispatchAction(IShowInformation.AREA_3, preferences.getInt(preference_action_id, defaultAction)));
+        return (dispatcher.dispatchAction(IShowInformation.AREA_3, preferences.getInt(preference_action_id, defaultAction)));
     }
 
     /**
@@ -684,389 +654,10 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         if (isLongClick)
         {
             // 設定画面を開く
-            return (dispatchAction(IShowInformation.AREA_4, ICameraFeatureDispatcher.FEATURE_SETTINGS));
+            return (dispatcher.dispatchAction(IShowInformation.AREA_4, ICameraFeatureDispatcher.FEATURE_SETTINGS));
         }
 
         // 設定画面を開く
-        return (dispatchAction(IShowInformation.AREA_4, ICameraFeatureDispatcher.FEATURE_SETTINGS));
-    }
-
-    /***************************************************************
-     *   以下、具体的な機能の実行... ここから下は、あとで切り離す。
-     *
-     ***************************************************************/
-
-    private String getTakeMode()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        return (propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE)));
-    }
-
-
-    /**
-     *   撮影モードの変更指示
-     *   (P > A > S > M > ART > iAuto > ...)
-     */
-    private void changeTakeMode()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        String propetyValue = propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE));
-        if (propetyValue == null)
-        {
-            // データ取得失敗
-            return;
-        }
-        String targetMode = "<" + IOlyCameraProperty.TAKE_MODE;  // 変更先モード
-        switch (propetyValue)
-        {
-            case "P":
-                targetMode = targetMode + "/A>";
-                break;
-
-            case "A":
-                    targetMode =  targetMode + "/S>";
-                break;
-
-            case "S":
-                targetMode =  targetMode + "/M>";
-                break;
-
-            case "M":
-                targetMode =  targetMode + "/ART>";
-                break;
-
-            case "ART":
-                targetMode =  targetMode + "/iAuto>";
-                break;
-
-            case "iAuto":
-            case "movie":
-            default:
-                targetMode =  targetMode + "/P>";
-                break;
-        }
-        Log.v(TAG, "changeTakeMode() " + targetMode);
-        propertyProxy.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, targetMode);
-        camera.unlockAutoFocus();
-
-        //  撮影モードの更新
-        //camera.updateTakeMode();
-    }
-
-
-    /**
-     *   撮影モードの変更指示
-     *   (iAuto < P < A < S < M < ART < iAuto < ...)
-     */
-    private void changeTakeModeReverse()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        String propetyValue = propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE));
-        if (propetyValue == null)
-        {
-            // データ取得失敗
-            return;
-        }
-        String targetMode = "<" + IOlyCameraProperty.TAKE_MODE;  // 変更先モード
-        switch (propetyValue)
-        {
-            case "P":
-                targetMode = targetMode + "/iAuto>";
-                break;
-
-            case "A":
-                targetMode =  targetMode + "/P>";
-                break;
-
-            case "S":
-                targetMode =  targetMode + "/A>";
-                break;
-
-            case "M":
-                targetMode =  targetMode + "/S>";
-                break;
-
-            case "ART":
-                targetMode =  targetMode + "/M>";
-                break;
-
-            case "iAuto":
-            case "movie":
-            default:
-                targetMode =  targetMode + "/ART>";
-                break;
-        }
-        Log.v(TAG, "changeTakeMode() " + targetMode);
-        propertyProxy.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, targetMode);
-        camera.unlockAutoFocus();
-
-        //  撮影モードの更新
-        //camera.updateTakeMode();
-    }
-
-
-    /**
-     *   シャッターボタンが押された!
-     *   (現在は、連続撮影モードやムービー撮影についてはまだ非対応)
-     */
-    private void pushShutterButton()
-    {
-        // カメラ側のシャッターを押す
-        camera.singleShot();
-        {
-            // 撮影の表示をToastで行う (成功とか失敗とか言っていない)
-            Toast.makeText(context, R.string.shoot_camera, Toast.LENGTH_SHORT).show();
-        }
-    }
-
-    /**
-     *   グリッド表示の ON/OFFを切り替える
-     *
-     */
-    private void changeShowGrid(int objectId)
-    {
-        liveImageView.toggleShowGridFrame();
-        updateGridStatusButton(objectId);
-    }
-
-
-    /**
-     *  デジタル水準器の ON/OFFを切り替える
-     *
-     */
-    private void changeShowLevelGauge()
-    {
-        liveImageView.toggleShowLevelGauge();
-    }
-
-    /**
-     *   AE-Lock/Lock解除を行う
-     *
-     */
-    private void changeAeLockMode()
-    {
-        camera.toggleAutoExposure();
-    }
-
-    /**
-     *  グリッドフレームの表示・非表示ボタンを更新する
-     *
-     */
-    private void updateGridStatusButton(int buttonId)
-    {
-        int btnResId;
-        if (liveImageView.isShowGrid())
-        {
-            // グリッドがON状態、グリッドをOFFにするボタンを出す
-            btnResId = R.drawable.btn_ic_grid_off;
-        }
-        else
-        {
-            //  グリッドがOFF状態、グリッドをONにするボタンを出す
-            btnResId = R.drawable.btn_ic_grid_on;
-        }
-        statusDrawer.setButtonDrawable(buttonId, btnResId);
-    }
-
-    /**
-     *   露出補正を1段階下げる
-     */
-    private void changeExposureBiasValueDown()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.EXPOSURE_COMPENSATION);
-    }
-
-    /**
-     *   露出補正を1段階あげる
-     *
-     */
-    private void changeExposureBiasValueUp()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.EXPOSURE_COMPENSATION);
-    }
-
-    /**
-     *   絞り値を1段階下げる
-     */
-    private void changeApertureValueDown()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.APERTURE);
-    }
-
-    /**
-     *   絞り値を1段階あげる
-     *
-     */
-    private void changeApertureValueUp()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.APERTURE);
-    }
-
-    /**
-     *   シャッター速度を1段階下げる
-     */
-    private void changeShutterSpeedDown()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.SHUTTER_SPEED);
-    }
-
-    /**
-     *   シャッター速度を1段階あげる
-     *
-     */
-    private void changeShutterSpeedUp()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.SHUTTER_SPEED);
-    }
-
-
-    /**
-     *   仕上がり・ピクチャーモードを1段階下げる
-     */
-    private void changeColorToneDown()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.COLOR_TONE);
-    }
-
-    /**
-     *   仕上がり・ピクチャーモードを1段階あげる
-     *
-     */
-    private void changeColorToneUp()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.COLOR_TONE);
-    }
-
-    /**
-     *   アートフィルターを1段階さげる
-     *
-     */
-    private void changeArtFilterDown()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.ART_FILTER);
-    }
-
-    /**
-     *   アートフィルターを1段階あげる
-     *
-     */
-    private void changeArtFilterUp()
-    {
-        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
-        propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.ART_FILTER);
-    }
-
-
-    /**
-     *   設定画面を開く
-     *
-     */
-    private void showSettingsScreen()
-    {
-        // TBD...
-    }
-
-    /**
-     *   指定した機能を実行する
-     *
-     * @param objectId     操作したオブジェクト
-     * @param featureNumber  操作する機能
-     */
-    private boolean dispatchAction(int objectId, int featureNumber)
-    {
-        if (featureNumber <= ICameraFeatureDispatcher.FEATURE_ACTION_NONE)
-        {
-            // 何もしない
-            return (false);
-        }
-
-        // 機能実行の割り当て...
-        int duration = IShowInformation.VIBRATE_PATTERN_SIMPLE_SHORT;
-        switch (featureNumber)
-        {
-            case ICameraFeatureDispatcher.FEATURE_SETTINGS:
-                // 設定画面を開く
-                showSettingsScreen();
-                duration =IShowInformation.VIBRATE_PATTERN_NONE;
-                break;
-            case ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_GRID:
-                // グリッド標示ON/OFF
-                changeShowGrid(objectId);
-                break;
-            case ICameraFeatureDispatcher.FEATURE_SHUTTER_SINGLESHOT:
-                // シャッター
-                pushShutterButton();
-                //duration =IShowInformation.VIBRATE_PATTERN_NONE;
-                break;
-            case ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE:
-                // 撮影モードの変更
-                changeTakeMode();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_CHAGE_AE_LOCK_MODE:
-                // AE LOCKのON/OFF切り替え
-                changeAeLockMode();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN:
-                // 露出補正を1段階下げる
-                changeExposureBiasValueDown();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP:
-                // 露出補正を1段階上げる
-                changeExposureBiasValueUp();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_APERTURE_DOWN:
-                // 絞り値を1段階下げる
-                changeApertureValueDown();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_APERTURE_UP:
-                // 絞り値を1段階上げる
-                changeApertureValueUp();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_DOWN:
-                // シャッター速度を1段階下げる
-                changeShutterSpeedDown();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_UP:
-                // シャッター速度を1段階上げる
-                changeShutterSpeedUp();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_COLORTONE_DOWN:
-                // 仕上がり・ピクチャーモードを選択
-                changeColorToneDown();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_COLORTONE_UP:
-                // 仕上がり・ピクチャーモードを選択
-                changeColorToneUp();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_ART_FILTER_DOWN:
-                // アートフィルターを選択
-                changeArtFilterDown();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_ART_FILTER_UP:
-                // アートフィルターを選択
-                changeArtFilterUp();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_LEVEL_GAUGE:
-                // デジタル水準器の表示・非表示
-                changeShowLevelGauge();
-                break;
-            case ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE_REVERSE:
-                // 撮影モードの変更(逆順)
-                changeTakeModeReverse();
-                break;
-        }
-
-        // コマンド実行完了後、ぶるぶるさせる
-        statusDrawer.vibrate(duration);
-        return (true);
+        return (dispatcher.dispatchAction(IShowInformation.AREA_4, ICameraFeatureDispatcher.FEATURE_SETTINGS));
     }
 }
index 68c9e22..075d41c 100644 (file)
@@ -7,7 +7,6 @@ import jp.sfjp.gokigen.a01c.olycamerawrapper.ILevelGauge;
 /**
  *
  *
- * Created by MRSa on 2017/03/01.
  */
 class ShowMessageHolder implements IMessageDrawer
 {
@@ -53,9 +52,11 @@ class ShowMessageHolder implements IMessageDrawer
 
     private messageHolder upperLeft = new messageHolder();
     private messageHolder upperRight = new messageHolder();
+    private messageHolder upperCenter = new messageHolder();
     private messageHolder center = new messageHolder();
     private messageHolder lowerLeft = new messageHolder();
     private messageHolder lowerRight = new messageHolder();
+    private messageHolder lowerCenter = new messageHolder();
 
     private ILevelGauge levelGauge = null;
 
@@ -89,10 +90,18 @@ class ShowMessageHolder implements IMessageDrawer
                 target = upperRight;
                 break;
 
+            case UPCENTER:
+                target = upperCenter;
+                break;
+
             case LOWLEFT:
                 target = lowerLeft;
                 break;
 
+            case LOWCENTER:
+                target = lowerCenter;
+                break;
+
             case LOWRIGHT:
             default:
                 target = lowerRight;
index 39bcdbf..7924863 100644 (file)
@@ -4,12 +4,14 @@ import android.app.Activity;
 import android.graphics.PointF;
 import android.util.Log;
 import android.view.MotionEvent;
+import android.widget.Toast;
 
 import jp.co.olympus.camerakit.OLYCamera;
 import jp.co.olympus.camerakit.OLYCameraLiveViewListener;
 import jp.co.olympus.camerakit.OLYCameraStatusListener;
 
 import jp.sfjp.gokigen.a01c.IShowInformation;
+import jp.sfjp.gokigen.a01c.R;
 import jp.sfjp.gokigen.a01c.liveview.IAutoFocusFrameDisplay;
 import jp.sfjp.gokigen.a01c.liveview.ICameraStatusReceiver;
 import jp.sfjp.gokigen.a01c.preference.ICameraPropertyAccessor;
@@ -31,6 +33,7 @@ public class OlyCameraCoordinator implements IOlyCameraCoordinator, IIndicatorCo
     private final String TAG = toString();
     private final IAutoFocusFrameDisplay focusFrameDisplay;
     private final OLYCamera camera;
+    private final Activity context;
 
     // 本クラスの配下のカメラ制御クラス群
     private final AutoFocusControl autoFocus;
@@ -50,6 +53,7 @@ public class OlyCameraCoordinator implements IOlyCameraCoordinator, IIndicatorCo
      */
     public OlyCameraCoordinator(Activity context, IAutoFocusFrameDisplay focusFrameDisplay, IShowInformation showInformation, ICameraStatusReceiver receiver)
     {
+        this.context = context;
         this.focusFrameDisplay = focusFrameDisplay;
 
         // OLYMPUS CAMERA クラスの初期化、リスナの設定
@@ -177,8 +181,13 @@ public class OlyCameraCoordinator implements IOlyCameraCoordinator, IIndicatorCo
      *   画像を1枚撮影
      */
     @Override
-    public void singleShot() {
+    public void singleShot()
+    {
         singleShot.singleShot();
+        {
+            // 撮影の表示をToastで行う (成功とか失敗とか言っていない)
+            Toast.makeText(context, R.string.shoot_camera, Toast.LENGTH_SHORT).show();
+        }
     }
 
     /**