OSDN Git Service

FUJIのフィルムシミュレーションの変更をできるようにした。
authorMRSa <mrsa@myad.jp>
Sun, 3 May 2020 06:58:13 +0000 (15:58 +0900)
committerMRSa <mrsa@myad.jp>
Sun, 3 May 2020 06:58:13 +0000 (15:58 +0900)
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXStatusChecker.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXStatusHolder.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/FujiXReplyMessageReceiver.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/values/IFujiXFilmSimulation.java
app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFragment.java
app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFujiXKeyPanelClickListener.java [new file with mode: 0644]
app/src/main/res/values-ja/arrays.xml
app/src/main/res/values/arrays.xml

index 3a2c715..45365cc 100644 (file)
@@ -33,7 +33,7 @@ public class FujiXStatusChecker implements ICameraStatusWatcher, ICameraStatus,
     FujiXStatusChecker(@NonNull Activity activity, @NonNull IFujiXCommandPublisher issuer)
     {
         this.issuer = issuer;
-        this.statusHolder = new FujiXStatusHolder();
+        this.statusHolder = new FujiXStatusHolder(issuer);
         try
         {
             SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
@@ -131,16 +131,20 @@ public class FujiXStatusChecker implements ICameraStatusWatcher, ICameraStatus,
     }
 
     @Override
-    public void setStatus(@NonNull String key, @NonNull String value)
+    public void setStatus(@NonNull final String key, @NonNull final String value)
     {
         try
         {
-            if (logcat)
-            {
-                Log.v(TAG, "setStatus(" + key + ", " + value + ")");
-            }
-
-            // ここで設定を行う。
+            Thread thread = new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    if (statusHolder != null)
+                    {
+                        statusHolder.setItemStatus(key, value);
+                    }
+                }
+            });
+            thread.start();
         }
         catch (Exception e)
         {
index 1e24c01..b5b5f35 100644 (file)
@@ -7,6 +7,10 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.collection.SparseArrayCompat;
 
+import net.osdn.gokigen.gr2control.camera.ICameraStatus;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.FujiXReplyMessageReceiver;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandPublisher;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.SetPropertyValue;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXBatteryMode;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXCameraProperties;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXFSSControl;
@@ -27,15 +31,17 @@ import java.util.Locale;
 class FujiXStatusHolder
 {
     private final String TAG = toString();
+    private final IFujiXCommandPublisher publisher;
     private static final boolean logcat = true;
     private SparseIntArray statusHolder;
     private SparseArrayCompat<String> statusNameArray;
 
-    FujiXStatusHolder()
+    FujiXStatusHolder(@NonNull IFujiXCommandPublisher publisher)
     {
         statusHolder = new SparseIntArray();
         statusHolder.clear();
 
+        this.publisher = publisher;
         statusNameArray = new SparseArrayCompat<>();
         prepareStatusNameArray();
     }
@@ -167,6 +173,7 @@ class FujiXStatusHolder
                 case IFujiXCameraProperties.UNKNOWN_DF41:
                 case IFujiXCameraProperties.UNKNOWN_DF26:
                 case IFujiXCameraProperties.UNKNOWN_DF27:
+                default:
                     updateUnknownValue(id, previous, current);
                     break;
             }
@@ -709,6 +716,11 @@ class FujiXStatusHolder
             return (getAvailableStatusNameList());
         }
 
+        if (listKey.matches(ICameraStatus.EFFECT))
+        {
+            return (getAvailableEffectItemList());
+        }
+
         /////  選択可能なステータスの一覧を取得する : でも以下はアイテム名の一覧... /////
         ArrayList<String> selection = new ArrayList<>();
         try
@@ -726,8 +738,79 @@ class FujiXStatusHolder
         return (selection);
     }
 
+    private List<String> getAvailableEffectItemList()
+    {
+        // EFFECTの選択肢をリストにして返す  : Film Simulation にした。
+        ArrayList<String> selection = new ArrayList<>();
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_PROVIA_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_VELVIA_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ASTIA_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_SEPIA_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_PRO_NEG_HI_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_PRO_NEG_STD_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_Y_FILTER_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_R_FILTER_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_G_FILTER_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_CHROME_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_Y_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_R_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_G_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ETERNA_STR);
+        selection.add(IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_NEGATIVE_STR);
+        return(selection);
+    }
+
+    private String getCurrentEffectStatus()
+    {
+        // EFFECTの現在状態を応答する : FILM Simulationにした
+        try
+        {
+            int value = statusHolder.get(IFujiXCameraProperties.FILM_SIMULATION);
+            List<String> itemList = getAvailableEffectItemList();
+            if ((value >= IFujiXFilmSimulation.FILM_SIMULATION_MIN)&&(value < itemList.size()))
+            {
+                return (itemList.get(value - 1));
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return ("");
+    }
+
+    private void setEffectItem(String value)
+    {
+        try
+        {
+            int index = 1;
+            List<String> itemList = getAvailableEffectItemList();
+            for (String item : itemList)
+            {
+                if (item.matches(value))
+                {
+                    //  見つかった! この値に設定する
+                    publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyMessageReceiver(" Set Film Simulation", true), IFujiXCameraProperties.FILM_SIMULATION, 4, index));
+                    return;
+                }
+                index++;
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+
     String getItemStatus(String key)
     {
+        if (key.matches(ICameraStatus.EFFECT))
+        {
+            return (getCurrentEffectStatus());
+        }
         try
         {
             int strIndex = key.indexOf("x");
@@ -767,6 +850,30 @@ class FujiXStatusHolder
         return ("? [" + key + "]");
     }
 
+    void setItemStatus(@NonNull String key, @NonNull String value)
+    {
+        try
+        {
+            if (logcat)
+            {
+                Log.v(TAG, "setStatus(" + key + ", " + value + ")");
+            }
+
+            if (key.matches(ICameraStatus.EFFECT))
+            {
+                setEffectItem(value);
+                return;
+            }
+
+            // ここで設定を行う。
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+
     private void dumpStatus()
     {
         try
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/FujiXReplyMessageReceiver.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/FujiXReplyMessageReceiver.java
new file mode 100644 (file)
index 0000000..bc47ed2
--- /dev/null
@@ -0,0 +1,45 @@
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command;
+
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import net.osdn.gokigen.gr2control.camera.utils.SimpleLogDumper;
+
+public class FujiXReplyMessageReceiver implements IFujiXCommandCallback
+{
+    private final String TAG = toString();
+    private final String messageHeader;
+    private final boolean isLogging;
+
+
+    public FujiXReplyMessageReceiver(@NonNull String messageHeader, boolean isLogging)
+    {
+        this.messageHeader = messageHeader;
+        this.isLogging = isLogging;
+    }
+
+    @Override
+    public void receivedMessage(int id, byte[] rx_body)
+    {
+        if (isLogging)
+        {
+            SimpleLogDumper.dump_bytes(messageHeader, rx_body);
+        }
+    }
+
+    @Override
+    public void onReceiveProgress(int currentBytes, int totalBytes, byte[] rx_body)
+    {
+        if (isLogging)
+        {
+            Log.v(TAG, " " + messageHeader + " onReceiveProgress : " + currentBytes + "/" + totalBytes + " Bytes.");
+        }
+    }
+
+    @Override
+    public boolean isReceiveMulti()
+    {
+        return (false);
+    }
+}
index fdb7597..650cc55 100644 (file)
@@ -21,4 +21,23 @@ public interface IFujiXFilmSimulation
     int FILM_SIMULATION_ETERNA  =16;
     int FILM_SIMULATION_CLASSIC_NEGATIVE = 17;
     int FILM_SIMULATION_MAX = 18;
+
+    String FILM_SIMULATION_PROVIA_STR  = "PROVIA";
+    String FILM_SIMULATION_VELVIA_STR  = "Velvia";
+    String FILM_SIMULATION_ASTIA_STR  = "ASTIA";
+    String FILM_SIMULATION_MONOCHROME_STR  = "MONOCHROME";
+    String FILM_SIMULATION_SEPIA_STR  = "SEPIA";
+    String FILM_SIMULATION_PRO_NEG_HI_STR  = "PRO Neg. Hi";
+    String FILM_SIMULATION_PRO_NEG_STD_STR  = "PRO Neg. Std";
+    String FILM_SIMULATION_MONOCHROME_Y_FILTER_STR  = "MONOCHROME+Ye";
+    String FILM_SIMULATION_MONOCHROME_R_FILTER_STR  = "MONOCHROME+R";
+    String FILM_SIMULATION_MONOCHROME_G_FILTER_STR  = "MONOCHROME+G";
+    String FILM_SIMULATION_CLASSIC_CHROME_STR  = "CLASSIC CHROME";
+    String FILM_SIMULATION_ACROS_STR  = "ACROS";
+    String FILM_SIMULATION_ACROS_Y_STR  = "ACROS+Ye";
+    String FILM_SIMULATION_ACROS_R_STR  = "ACROS+R";
+    String FILM_SIMULATION_ACROS_G_STR  = "ACROS+G";
+    String FILM_SIMULATION_ETERNA_STR  = "ETERNA";
+    String FILM_SIMULATION_CLASSIC_NEGATIVE_STR = "CLASSIC Neg.";
+
 }
index 61b87ef..8df0837 100644 (file)
@@ -66,6 +66,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
     private LiveViewClickTouchListener onClickTouchListener = null;
     private LiveViewControlPanelClickListener onPanelClickListener = null;
     private LiveViewKeyPanelClickListener onKeyPanelClickListener = null;
+    private LiveViewFujiXKeyPanelClickListener fujiXOnKeyPanelClickListener = null;
 
     private TextView statusArea = null;
     private TextView focalLengthArea = null;
@@ -223,6 +224,13 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
             setKeyPanelClickListener(view, R.id.button_lcd_onoff);
             setKeyPanelClickListener(view, R.id.button_highlight);
 
+            if (fujiXOnKeyPanelClickListener == null)
+            {
+                fujiXOnKeyPanelClickListener = new LiveViewFujiXKeyPanelClickListener(interfaceProvider, vibrator);
+            }
+            //setFujiXKeyPanelClickListener(view, xxx);
+
+
             connectStatus = view.findViewById(R.id.connect_disconnect_button);
             if (connectStatus != null)
             {
@@ -294,6 +302,23 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
         }
     }
 
+    private void setFujiXKeyPanelClickListener(View view, int id)
+    {
+        try
+        {
+            View button = view.findViewById(id);
+            if (button != null)
+            {
+                button.setOnClickListener(fujiXOnKeyPanelClickListener);
+                button.setOnLongClickListener(fujiXOnKeyPanelClickListener);
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
     /**
      *
      */
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFujiXKeyPanelClickListener.java b/app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFujiXKeyPanelClickListener.java
new file mode 100644 (file)
index 0000000..0d9d3e3
--- /dev/null
@@ -0,0 +1,35 @@
+package net.osdn.gokigen.gr2control.liveview;
+
+import android.os.Vibrator;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import net.osdn.gokigen.gr2control.camera.IInterfaceProvider;
+
+public class LiveViewFujiXKeyPanelClickListener implements View.OnClickListener, View.OnLongClickListener
+{
+    private final String TAG = toString();
+    private final IInterfaceProvider interfaceProvider;
+    private final Vibrator vibrator;
+
+    LiveViewFujiXKeyPanelClickListener(@NonNull IInterfaceProvider interfaceProvider, @Nullable Vibrator vibrator)
+    {
+        this.interfaceProvider = interfaceProvider;
+        this.vibrator = vibrator;
+    }
+
+
+    @Override
+    public void onClick(View v)
+    {
+
+    }
+
+    @Override
+    public boolean onLongClick(View v)
+    {
+        return (false);
+    }
+}
index 7dfa36b..16d7bb8 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string-array name="connection_method">
-        <item>Ricoh GR II / PENTAX DSLR</item>
+        <item>Ricoh GR Series / PENTAX DSLR</item>
         <item>OPC(Olympus Air)</item>
         <item>Fujifilm X</item>
     </string-array>
index 7dfa36b..16d7bb8 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string-array name="connection_method">
-        <item>Ricoh GR II / PENTAX DSLR</item>
+        <item>Ricoh GR Series / PENTAX DSLR</item>
         <item>OPC(Olympus Air)</item>
         <item>Fujifilm X</item>
     </string-array>