OSDN Git Service

OPCのカメラプロパティを設定可能にした。
authorMRSa <mrsa@myad.jp>
Tue, 14 Aug 2018 15:33:27 +0000 (00:33 +0900)
committerMRSa <mrsa@myad.jp>
Tue, 14 Aug 2018 15:33:27 +0000 (00:33 +0900)
app/src/main/java/net/osdn/gokigen/gr2control/camera/ICameraStatus.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/olympus/wrapper/OlyCameraStatusWrapper.java
app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewControlPanelClickListener.java
app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFragment.java
app/src/main/res/drawable/ic_center_focus_strong_black_24dp.xml [new file with mode: 0644]
app/src/main/res/drawable/ic_center_focus_weak_black_24dp.xml [new file with mode: 0644]
app/src/main/res/drawable/ic_filter_center_focus_black_24dp.xml [new file with mode: 0644]
app/src/main/res/layout-land/fragment_live_view.xml
app/src/main/res/values/strings.xml

index 997a668..1f62541 100644 (file)
@@ -21,8 +21,16 @@ public interface ICameraStatus
     String RESOLUTION = "reso";
     String DRIVE_MODE = "shootMode";
     String WHITE_BALANCE = "WBMode";
+
     String AE = "meteringMode";
 
+    String AE_STATUS_MULTI = "multi";
+    String AE_STATUS_ESP = "ESP";
+    String AE_STATUS_SPOT = "spot";
+    String AE_STATUS_PINPOINT = "Spot";
+    String AE_STATUS_CENTER = "center";
+    String AE_STATUS_CENTER2 = "Ctr-Weighted";
+
     String EFFECT = "effect";
     String TAKE_MODE = "exposureMode";
     String IMAGESIZE = "stillSize";
@@ -33,4 +41,7 @@ public interface ICameraStatus
     String ISO_SENSITIVITY = "sv";
     String EXPREV = "xv";
     String FLASH_XV = "flashxv";
+
+
+
 }
index a2ac990..9b93e7b 100644 (file)
@@ -14,6 +14,10 @@ import jp.co.olympus.camerakit.OLYCamera;
 import jp.co.olympus.camerakit.OLYCameraPropertyListener;
 import jp.co.olympus.camerakit.OLYCameraStatusListener;
 
+/**
+ *
+ *
+ */
 public class OlyCameraStatusWrapper implements ICameraStatus, ICameraStatusWatcher, OLYCameraStatusListener, OLYCameraPropertyListener
 {
     private final String TAG = toString();
@@ -31,11 +35,9 @@ public class OlyCameraStatusWrapper implements ICameraStatus, ICameraStatusWatch
     private static final String CAMERA_STATUS_EXPOSURE_WARNING = "ExposureWarning";
     private static final String CAMERA_STATUS_EXPOSURE_METERING_WARNING = "ExposureMeteringWarning";
     private static final String CAMERA_STATUS_HIGH_TEMPERATURE_WARNING = "HighTemperatureWarning";
-/*
     private static final String CAMERA_STATUS_DETECT_FACES = "DetectedHumanFaces";
     private static final String CAMERA_STATUS_FOCAL_LENGTH = "ActualFocalLength";
     private static final String CAMERA_STATUS_LEVEL_GAUGE = "LevelGauge";
-*/
 
     private String currentTakeMode = "";
     private String currentMeteringMode = "";
@@ -51,47 +53,124 @@ public class OlyCameraStatusWrapper implements ICameraStatus, ICameraStatusWatch
     }
 
 
+    private String convertToOpcKey(@NonNull String key)
+    {
+        String opcKey = "";
+        switch (key)
+        {
+            case EFFECT:
+                opcKey = "COLORTONE";
+                break;
+            case TAKE_MODE:
+                opcKey = "TAKEMODE";
+                break;
+            case APERATURE:
+                opcKey = "APERTURE";
+                break;
+            case SHUTTER_SPEED:
+                opcKey = "SHUTTER";
+                break;
+            case ISO_SENSITIVITY:
+                opcKey = "ISO";
+                break;
+            case EXPREV:
+                opcKey = "EXPREV";
+                break;
+            case WHITE_BALANCE:
+                opcKey = "WB";
+                break;
+            case AE:
+                opcKey = "AE";
+                break;
+            case IMAGESIZE:
+                opcKey = "IMAGESIZE";
+                break;
+            case MOVIESIZE:
+                opcKey = "QUALITY_MOVIE";
+                break;
+            case DRIVE_MODE:
+                opcKey = "TAKE_DRIVE";
+                break;
+            case FOCUS_MODE:
+                opcKey = "TAKE_DRIVE";
+                break;
+            case AF_MODE:
+                opcKey = "FOCUS_STILL";
+                break;
+            case FLASH_XV:
+                break;
+        }
+        return (opcKey);
+    }
+
     @Override
     public @NonNull List<String> getStatusList(@NonNull String key)
     {
         List<String> array = new ArrayList<>();
-
-        // OPC用に変更...
-/*
-        String BATTERY = "battery";
-        String STATE = "state";
-        String FOCUS_MODE = "focusMode";
-        String AF_MODE = "AFMode";
-
-        String RESOLUTION = "reso";
-        String DRIVE_MODE = "shootMode";
-        String WHITE_BALANCE = "WBMode";
-        String AE = "meteringMode";
-
-        String EFFECT = "effect";
-        String TAKE_MODE = "exposureMode";
-        String IMAGESIZE = "stillSize";
-        String MOVIESIZE = "movieSize";
-
-        String APERATURE = "av";
-        String SHUTTER_SPEED = "tv";
-        String ISO_SENSITIVITY = "sv";
-        String EXPREV = "xv";
-        String FLASH_XV = "flashxv";
-*/
+        String opcKey = convertToOpcKey(key);
+        if (opcKey.length() < 1)
+        {
+            return (array);
+        }
+        try
+        {
+            List<String> values = camera.getCameraPropertyValueList(opcKey);
+            for (String value : values)
+            {
+                array.add(camera.getCameraPropertyValueTitle(value));
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
         return (array);
     }
 
     @Override
     public String getStatus(@NonNull String key)
     {
+        String opcKey = convertToOpcKey(key);
+        if (opcKey.length() < 1)
+        {
+            return ("");
+        }
+        try
+        {
+            return (camera.getCameraPropertyValueTitle(camera.getCameraPropertyValue(opcKey)));
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
         return ("");
     }
 
     @Override
     public void setStatus(@NonNull String key, @NonNull String value)
     {
-
+        Log.v(TAG, "setStatus : " + key + " " + value);
+        try
+        {
+            String opcKey = convertToOpcKey(key);
+            if (opcKey.length() < 1)
+            {
+                return;
+            }
+            List<String> values = camera.getCameraPropertyValueList(opcKey);
+            for (String item : values)
+            {
+                String valueTitle = camera.getCameraPropertyValueTitle(item);
+                if (value.equals(valueTitle))
+                {
+                    camera.setCameraPropertyValue(opcKey, item);
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
     }
 
     @Override
@@ -101,6 +180,7 @@ public class OlyCameraStatusWrapper implements ICameraStatus, ICameraStatusWatch
         try
         {
             camera.setCameraStatusListener(this);
+            camera.setCameraPropertyListener(this);
         }
         catch (Exception e)
         {
@@ -112,7 +192,6 @@ public class OlyCameraStatusWrapper implements ICameraStatus, ICameraStatusWatch
     public void stoptStatusWatch()
     {
         this.updateReceiver = null;
-
     }
 
     @Override
@@ -154,8 +233,10 @@ public class OlyCameraStatusWrapper implements ICameraStatus, ICameraStatusWatch
                 case CAMERA_STATUS_MEDIA_ERROR:
                     updateReceiver.updateStorageStatus(name);
                     break;
+                case CAMERA_STATUS_DETECT_FACES:
+                case CAMERA_STATUS_FOCAL_LENGTH:
+                case CAMERA_STATUS_LEVEL_GAUGE:
                 default:
-                    checkUpdateStatus(olyCamera);
                     break;
             }
         }
@@ -192,18 +273,7 @@ public class OlyCameraStatusWrapper implements ICameraStatus, ICameraStatusWatch
             int percentage = 0;
 
             Log.v(TAG, "currentRemainBattery : " + currentRemainBattery);
-/*
-            UNKNOWN    未検出
-            CHARGE     充電中
-            EMPTY      電池残量0
-            WARNING    電池残量小
-            LOW        電池残量中間
-            FULL       電池残量フル
-            EMPTY_AC   電池残量0/給電
-            SUPPLY_WARNING     電池残量小/給電
-            SUPPLY_LOW 電池残量中間/給電
-            SUPPLY_FULL        電池残量フル/給電
- */
+
             updateReceiver.updateRemainBattery(percentage);
         }
         String shutterSpeed = getPropertyTitle(olyCamera, "SHUTTER");
index 4e70bbd..4685c7d 100644 (file)
@@ -29,7 +29,6 @@ class LiveViewControlPanelClickListener  implements View.OnClickListener
         this.interfaceProvider = interfaceProvider;
     }
 
-
     @Override
     public void onClick(View view)
     {
@@ -47,7 +46,7 @@ class LiveViewControlPanelClickListener  implements View.OnClickListener
             {
                 case R.id.takemodeTextView:
                     //  撮影モードは変えられない...なぜ?
-                    // selectTakeMode(statusList);
+                    selectTakeMode(statusList);
                     break;
 
                 case R.id.shutterSpeedTextView:
@@ -62,11 +61,11 @@ class LiveViewControlPanelClickListener  implements View.OnClickListener
                     selectExposureCompensation(statusList);
                     break;
 
-                case R.id.aeModeTextView:
+                case R.id.aeModeImageView:
                     selectAeMode(statusList);
                     break;
 
-                case R.id.whiteBalanceImageView:
+                case R.id.whiteBalanceTextView:
                     selectWhiteBalance(statusList);
                     break;
 
@@ -153,7 +152,6 @@ class LiveViewControlPanelClickListener  implements View.OnClickListener
         }
     }
 
-
     private void selectWhiteBalance(@NonNull ICameraStatus statusList)
     {
         Log.v(TAG,"selectWhiteBalance()");
index 739c797..f5ff133 100644 (file)
@@ -24,6 +24,7 @@ import net.osdn.gokigen.gr2control.R;
 import net.osdn.gokigen.gr2control.camera.ICameraConnection;
 import net.osdn.gokigen.gr2control.camera.ICameraInformation;
 import net.osdn.gokigen.gr2control.camera.ICameraRunMode;
+import net.osdn.gokigen.gr2control.camera.ICameraStatus;
 import net.osdn.gokigen.gr2control.camera.ICameraStatusWatcher;
 import net.osdn.gokigen.gr2control.camera.IDisplayInjector;
 import net.osdn.gokigen.gr2control.camera.IFocusingModeNotify;
@@ -171,8 +172,8 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
             setPanelClickListener(view, R.id.shutterSpeedTextView);
             setPanelClickListener(view, R.id.apertureValueTextView);
             setPanelClickListener(view, R.id.exposureCompensationTextView);
-            setPanelClickListener(view, R.id.aeModeTextView);
-            setPanelClickListener(view, R.id.whiteBalanceImageView);
+            setPanelClickListener(view, R.id.aeModeImageView);
+            setPanelClickListener(view, R.id.whiteBalanceTextView);
             setPanelClickListener(view, R.id.setEffectImageView);
 
             if (onKeyPanelClickListener == null)
@@ -842,20 +843,39 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
     {
         try
         {
+            Log.v(TAG, "updatedMeteringMode() : " + meteringMode);
             final Activity activity = getActivity();
-            if (activity == null)
+            if ((activity == null)||(meteringMode == null))
             {
                 return;
             }
+
+            int iconId = R.drawable.ic_crop_free_black_24dp;
+            switch (meteringMode)
+            {
+                case ICameraStatus.AE_STATUS_MULTI:
+                case ICameraStatus.AE_STATUS_ESP:
+                    iconId = R.drawable.ic_crop_free_black_24dp;
+                    break;
+                case ICameraStatus.AE_STATUS_CENTER:
+                case ICameraStatus.AE_STATUS_CENTER2:
+                    iconId = R.drawable.ic_center_focus_weak_black_24dp;
+                    break;
+                case ICameraStatus.AE_STATUS_SPOT:
+                case ICameraStatus.AE_STATUS_PINPOINT:
+                    iconId = R.drawable.ic_filter_center_focus_black_24dp;
+                    break;
+            }
+            final int id = iconId;
             activity.runOnUiThread(new Runnable()
             {
                 @Override
                 public void run()
                 {
-                    TextView view = activity.findViewById(R.id.aeModeTextView);
+                    ImageView view = activity.findViewById(R.id.aeModeImageView);
                     if (view != null)
                     {
-                        view.setText(meteringMode);
+                        view.setImageDrawable(ResourcesCompat.getDrawable(getResources(), id, null));
                         view.invalidate();
                     }
                 }
@@ -870,7 +890,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
     @Override
     public void updatedWBMode(final String wbMode)
     {
-        // とりあえず何もしない... 選択肢は以下
+        // とりあえず何もしない... 選択肢は以下 (Ricohの場合...)
         // auto, multiAuto, daylight, shade, cloud, tungsten, warmWhiteFluorescent, daylightFluorescent, dayWhiteFluorescent, coolWhiteFluorescent, incandescent,manual1, cte, custom
     }
 
diff --git a/app/src/main/res/drawable/ic_center_focus_strong_black_24dp.xml b/app/src/main/res/drawable/ic_center_focus_strong_black_24dp.xml
new file mode 100644 (file)
index 0000000..ab723e8
--- /dev/null
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M12,8c-2.21,0 -4,1.79 -4,4s1.79,4 4,4 4,-1.79 4,-4 -1.79,-4 -4,-4zM5,15L3,15v4c0,1.1 0.9,2 2,2h4v-2L5,19v-4zM5,5h4L9,3L5,3c-1.1,0 -2,0.9 -2,2v4h2L5,5zM19,3h-4v2h4v4h2L21,5c0,-1.1 -0.9,-2 -2,-2zM19,19h-4v2h4c1.1,0 2,-0.9 2,-2v-4h-2v4z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_center_focus_weak_black_24dp.xml b/app/src/main/res/drawable/ic_center_focus_weak_black_24dp.xml
new file mode 100644 (file)
index 0000000..3fcca95
--- /dev/null
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M5,15L3,15v4c0,1.1 0.9,2 2,2h4v-2L5,19v-4zM5,5h4L9,3L5,3c-1.1,0 -2,0.9 -2,2v4h2L5,5zM19,3h-4v2h4v4h2L21,5c0,-1.1 -0.9,-2 -2,-2zM19,19h-4v2h4c1.1,0 2,-0.9 2,-2v-4h-2v4zM12,8c-2.21,0 -4,1.79 -4,4s1.79,4 4,4 4,-1.79 4,-4 -1.79,-4 -4,-4zM12,14c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_filter_center_focus_black_24dp.xml b/app/src/main/res/drawable/ic_filter_center_focus_black_24dp.xml
new file mode 100644 (file)
index 0000000..d037f81
--- /dev/null
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M5,15L3,15v4c0,1.1 0.9,2 2,2h4v-2L5,19v-4zM5,5h4L9,3L5,3c-1.1,0 -2,0.9 -2,2v4h2L5,5zM19,3h-4v2h4v4h2L21,5c0,-1.1 -0.9,-2 -2,-2zM19,19h-4v2h4c1.1,0 2,-0.9 2,-2v-4h-2v4zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z"/>
+</vector>
index e984311..4a50ebe 100644 (file)
             android:textSize="12pt" />
 -->
 
-        <TextView
-            android:id="@+id/aeModeTextView"
+        <ImageView
+            android:id="@+id/aeModeImageView"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:layout_weight="1"
             android:gravity="center"
             android:clickable="true"
             android:focusable="true"
-            android:text="AE"
-            android:textColor="@color/setting_text_color"
-            android:textStyle="bold"
-            android:textSize="12pt" />
+            android:src="@drawable/ic_crop_free_black_24dp" />
 
-        <ImageView
-            android:id="@+id/whiteBalanceImageView"
+        <TextView
+            android:id="@+id/whiteBalanceTextView"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:layout_weight="1"
             android:gravity="center"
             android:clickable="true"
             android:focusable="true"
-            android:src="@drawable/ic_wb_auto_black_24dp" />
+            android:text="@string/white_balance"
+            android:textColor="@color/setting_text_color"
+            android:textStyle="bold"
+            android:textSize="12pt" />
 
         <ImageView
             android:id="@+id/setEffectImageView"
index 43a8765..42d532b 100644 (file)
     <string name="label_aelock">AEL/AFL</string>
     <string name="label_c_af">C-AF</string>
 
+    <string name="white_balance">WB</string>
+
     <string name="exif_datetime_title">Date : </string>
     <string name="exif_exposure_time_title">Exposure Time : </string>
     <string name="exif_aperture_title">Aperture : </string>