OSDN Git Service

FUJI用のコマンド送信ダイアログを搭載。
authorMRSa <mrsa@myad.jp>
Sat, 2 May 2020 13:53:42 +0000 (22:53 +0900)
committerMRSa <mrsa@myad.jp>
Sat, 2 May 2020 13:53:42 +0000 (22:53 +0900)
19 files changed:
app/src/main/java/net/osdn/gokigen/gr2control/camera/CameraInterfaceProvider.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/IInterfaceProvider.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/cameraproperty/FujiXCameraCommandResponse.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/cameraproperty/FujiXCameraCommandSendDialog.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/cameraproperty/FujiXCameraStatusDialog.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXInterfaceProvider.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/messages/IFujiXCameraCommands.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/LiveViewClickTouchListener.java
app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFragment.java
app/src/main/res/layout-land/dialog_status_show.xml [new file with mode: 0644]
app/src/main/res/layout-land/fujix_request_command_layout.xml [new file with mode: 0644]
app/src/main/res/layout/dialog_status_show.xml [new file with mode: 0644]
app/src/main/res/layout/fujix_request_command_layout.xml [new file with mode: 0644]
app/src/main/res/values-ja/arrays.xml
app/src/main/res/values-ja/strings.xml
app/src/main/res/values/arrays.xml
app/src/main/res/values/strings.xml

index 6eed96b..df8de68 100644 (file)
@@ -3,6 +3,7 @@ package net.osdn.gokigen.gr2control.camera;
 import android.app.Activity;
 import android.content.SharedPreferences;
 
+import net.osdn.gokigen.gr2control.camera.fuji_x.IFujiXInterfaceProvider;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.FujiXInterfaceProvider;
 import net.osdn.gokigen.gr2control.camera.olympus.IOlympusInterfaceProvider;
 import net.osdn.gokigen.gr2control.camera.olympus.wrapper.OlympusInterfaceProvider;
@@ -52,6 +53,12 @@ public class CameraInterfaceProvider implements IInterfaceProvider
         return (olympus);
     }
 
+    @Override
+    public IFujiXInterfaceProvider getFujiXInterfaceProvider()
+    {
+        return (fujiX);
+    }
+
     /*
     @Override
     public IOlympusLiveViewListener getOlympusLiveViewListener()
index 25156ce..aa9917c 100644 (file)
@@ -1,5 +1,6 @@
 package net.osdn.gokigen.gr2control.camera;
 
+import net.osdn.gokigen.gr2control.camera.fuji_x.IFujiXInterfaceProvider;
 import net.osdn.gokigen.gr2control.camera.olympus.IOlympusInterfaceProvider;
 import net.osdn.gokigen.gr2control.camera.playback.IPlaybackControl;
 import net.osdn.gokigen.gr2control.liveview.liveviewlistener.ILiveViewListener;
@@ -30,6 +31,7 @@ public interface IInterfaceProvider
     ICameraRunMode getCameraRunMode();
 
     IOlympusInterfaceProvider getOlympusInterfaceProvider();
+    IFujiXInterfaceProvider getFujiXInterfaceProvider();
 
     ICameraConnection.CameraConnectionMethod getCammeraConnectionMethod();
     void resetCameraConnectionMethod();
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/cameraproperty/FujiXCameraCommandResponse.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/cameraproperty/FujiXCameraCommandResponse.java
new file mode 100644 (file)
index 0000000..5082780
--- /dev/null
@@ -0,0 +1,96 @@
+package net.osdn.gokigen.gr2control.camera.fuji_x.cameraproperty;
+
+
+import android.app.Activity;
+import android.util.Log;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+
+class FujiXCameraCommandResponse  implements IFujiXCommandCallback
+{
+    private final String TAG = toString();
+    private final Activity activity;
+    private final TextView field;
+
+    FujiXCameraCommandResponse(@NonNull Activity activity, @NonNull TextView field)
+    {
+        this.activity = activity;
+        this.field = field;
+    }
+
+    void clear()
+    {
+        try
+        {
+            activity.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    field.setText("");
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void onReceiveProgress(int currentBytes, int totalBytes, byte[] body)
+    {
+        Log.v(TAG, " " + currentBytes + "/" + totalBytes);
+    }
+
+    @Override
+    public boolean isReceiveMulti()
+    {
+        return (false);
+    }
+
+    @Override
+    public void receivedMessage(int id, byte[] rx_body)
+    {
+        //Log.v(TAG, "RECEIVE : " + rx_body.length + " bytes.");
+        String message = "[Receive "+ rx_body.length + " bytes.]\n";
+        message = message + dump_bytes(rx_body);
+        final String messageToShow = message;
+        try
+        {
+            activity.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    field.setText(messageToShow);
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     *   デバッグ用:ログにバイト列を出力する
+     *
+     */
+    private String dump_bytes(byte[] data)
+    {
+        int index = 0;
+        StringBuilder message = new StringBuilder();
+        for (byte item : data)
+        {
+            index++;
+            message.append(String.format("%02x ", item));
+            if (index >= 8)
+            {
+                message.append("\n");
+                index = 0;
+            }
+        }
+        message.append("\n");
+        return (message.toString());
+    }
+}
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/cameraproperty/FujiXCameraCommandSendDialog.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/cameraproperty/FujiXCameraCommandSendDialog.java
new file mode 100644 (file)
index 0000000..bad15b8
--- /dev/null
@@ -0,0 +1,457 @@
+package net.osdn.gokigen.gr2control.camera.fuji_x.cameraproperty;
+
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.collection.SparseArrayCompat;
+import androidx.fragment.app.DialogFragment;
+
+import net.osdn.gokigen.gr2control.R;
+import net.osdn.gokigen.gr2control.camera.fuji_x.IFujiXInterfaceProvider;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandPublisher;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.CommandGeneric;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.IFujiXCameraCommands;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.SetPropertyValue;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.connection.FujiXCameraModeChangeToLiveView;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.connection.FujiXCameraModeChangeToPlayback;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXCameraProperties;
+
+public class FujiXCameraCommandSendDialog  extends DialogFragment
+{
+    private final String TAG = toString();
+    private Dialog myDialog = null;
+    private IFujiXCommandPublisher commandPublisher = null;
+    private FujiXCameraCommandResponse responseReceiver = null;
+    private SparseArrayCompat<String> commandNameIndexArray;
+
+    private int selectedCommandIdPosition = 0;
+    private int selectedMessageTypePosition = 0;
+    private int selectedBodyLengthPosition = 0;
+
+    public static FujiXCameraCommandSendDialog newInstance(@NonNull IFujiXInterfaceProvider interfaceProvider)
+    {
+        FujiXCameraCommandSendDialog instance = new FujiXCameraCommandSendDialog();
+        instance.prepare(interfaceProvider);
+
+        // パラメータはBundleにまとめておく
+        Bundle arguments = new Bundle();
+        //arguments.putString("method", method);
+        //arguments.putString("message", message);
+        instance.setArguments(arguments);
+
+        return (instance);
+    }
+
+    private void prepare(@NonNull IFujiXInterfaceProvider interfaceProvider)
+    {
+        this.commandPublisher = interfaceProvider.getCommandPublisher();
+        this.commandNameIndexArray = new SparseArrayCompat<>();
+    }
+
+    @Override
+    public @NonNull Dialog onCreateDialog(Bundle savedInstanceState)
+    {
+        final Activity activity = getActivity();
+        final AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
+
+        // Get the layout inflater
+        LayoutInflater inflater = activity.getLayoutInflater();
+        final View alertView = inflater.inflate(R.layout.fujix_request_command_layout, null, false);
+        alertDialog.setView(alertView);
+
+        alertDialog.setIcon(R.drawable.ic_linked_camera_black_24dp);
+        alertDialog.setTitle(getString(R.string.dialog_fujix_command_title_command));
+        try
+        {
+            final TextView commandResponse = alertView.findViewById(R.id.command_response_value);
+            final EditText edit_command_id = alertView.findViewById(R.id.edit_command_id);
+            final EditText edit_message_body1 = alertView.findViewById(R.id.edit_message_body1);
+            final EditText edit_message_body2 = alertView.findViewById(R.id.edit_message_body2);
+            final Spinner selection_command_id = alertView.findViewById(R.id.spinner_selection_command_id);
+            final Spinner selection_message_type = alertView.findViewById(R.id.spinner_selection_message_type);
+            final Spinner selection_message_body_length = alertView.findViewById(R.id.spinner_selection_message_body_length);
+            final Button sendButton = alertView.findViewById(R.id.send_message_button);
+            final Button liveViewButton = alertView.findViewById(R.id.change_to_liveview);
+            final Button playbackButton = alertView.findViewById(R.id.change_to_playback);
+
+            responseReceiver = new FujiXCameraCommandResponse(activity, commandResponse);
+
+            initializeCommandSelection(activity, selection_command_id, edit_command_id);
+            initializeMessageTypeSelection(activity, selection_message_type);
+            initializeBodyLengthSelection(activity, selection_message_body_length);
+
+            sendButton.setOnClickListener(new View.OnClickListener()
+            {
+                @Override
+                public void onClick(View v)
+                {
+                    try
+                    {
+                        //Log.v(TAG, "SEND COMMAND");
+                        if (responseReceiver != null)
+                        {
+                            responseReceiver.clear();
+                            int id = parseInt(edit_command_id);
+                            int value1 = parseInt(edit_message_body1);
+                            int value2 = parseInt(edit_message_body2);
+                            if (selectedMessageTypePosition == 0)
+                            {
+                                // single
+                                if (selectedBodyLengthPosition == 0)
+                                {
+                                    commandPublisher.enqueueCommand(new CommandGeneric(responseReceiver, id));
+                                }
+                                else if (selectedBodyLengthPosition == 3)
+                                {
+                                    commandPublisher.enqueueCommand(new CommandGeneric(responseReceiver, id, 8, value1, value2));
+                                }
+                                else if (selectedBodyLengthPosition == 2)
+                                {
+                                    commandPublisher.enqueueCommand(new CommandGeneric(responseReceiver, id, 4, value1));
+                                }
+                                else
+                                {
+                                    commandPublisher.enqueueCommand(new CommandGeneric(responseReceiver, id, 2, value1));
+                                }
+                            }
+                            else
+                            {
+                                // multi
+                                if (selectedBodyLengthPosition == 0)
+                                {
+                                    commandPublisher.enqueueCommand(new SetPropertyValue(responseReceiver, id));
+                                }
+                                else if (selectedBodyLengthPosition == 3)
+                                {
+                                    commandPublisher.enqueueCommand(new SetPropertyValue(responseReceiver, id, 8, value1, value2));
+                                }
+                                else if (selectedBodyLengthPosition == 2)
+                                {
+                                    commandPublisher.enqueueCommand(new SetPropertyValue(responseReceiver, id, 4, value1));
+                                }
+                                else
+                                {
+                                    commandPublisher.enqueueCommand(new SetPropertyValue(responseReceiver, id, 2, value1));
+                                }
+                            }
+                        }
+                    }
+                    catch (Exception e)
+                    {
+                        e.printStackTrace();
+                    }
+                }
+            });
+            if ((responseReceiver != null)&&(commandPublisher != null))
+            {
+                liveViewButton.setOnClickListener(new FujiXCameraModeChangeToLiveView(commandPublisher, responseReceiver));
+                playbackButton.setOnClickListener(new FujiXCameraModeChangeToPlayback(commandPublisher, responseReceiver));
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        alertDialog.setCancelable(true);
+
+        // ボタンを設定する(実行ボタン)
+        alertDialog.setPositiveButton(activity.getString(R.string.dialog_positive_execute),
+                new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which)
+                    {
+                        //dialog.dismiss();
+                    }
+                });
+
+        // ボタンを設定する (キャンセルボタン)
+        alertDialog.setNegativeButton(activity.getString(R.string.dialog_negative_cancel),
+                new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                        dialog.cancel();
+                    }
+                });
+
+        // 確認ダイアログを応答する
+        myDialog = alertDialog.create();
+        return (myDialog);
+    }
+
+    @Override
+    public void onPause()
+    {
+        super.onPause();
+        Log.v(TAG, "AlertDialog::onPause()");
+        if (myDialog != null)
+        {
+            myDialog.cancel();
+        }
+    }
+
+    private int parseInt(EditText area)
+    {
+        try
+        {
+            String value = (area.getText().toString()).toLowerCase();
+            int index =  value.indexOf("x");
+            if (index > 0)
+            {
+                value = value.substring(index + 1);
+            }
+            if (value.length() < 1)
+            {
+                // 未入力のときには0を返す
+                return (0);
+            }
+            //int convertValue = (int)Long.parseLong(value, 16);
+            //Log.v(TAG, String.format(Locale.US, "PARSED VALUE : 0x%08x (%d)", convertValue, convertValue));
+            //return (convertValue);
+            return ((int)Long.parseLong(value, 16));
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            Log.v(TAG, "[" + area.getText().toString() + "]");
+        }
+        return (-1);
+    }
+
+
+    private ArrayAdapter<String> prepareCommandAdapter(@NonNull final Activity activity)
+    {
+        int position = 0;
+        ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item);
+        commandNameIndexArray.clear();
+
+        // せっせとコマンドを入れていく...
+        adapter.add("(Direct Input)");
+        commandNameIndexArray.append(position++, "");
+
+        adapter.add(IFujiXCameraCommands.SHUTTER_STR + " (" + IFujiXCameraCommands.SHUTTER_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraCommands.SHUTTER_STR_ID);
+
+        adapter.add(IFujiXCameraCommands.FOCUS_POINT_STR + " (" + IFujiXCameraCommands.FOCUS_POINT_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraCommands.FOCUS_POINT_STR_ID);
+
+        adapter.add(IFujiXCameraCommands.FOCUS_UNLOCK_STR + " (" + IFujiXCameraCommands.FOCUS_UNLOCK_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraCommands.FOCUS_UNLOCK_STR_ID);
+
+        adapter.add(IFujiXCameraCommands.SHUTTER_SPEED_STR + " (" + IFujiXCameraCommands.SHUTTER_SPEED_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraCommands.SHUTTER_SPEED_STR_ID);
+
+        adapter.add(IFujiXCameraCommands.APERTURE_STR + " (" + IFujiXCameraCommands.APERTURE_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraCommands.APERTURE_STR_ID);
+
+        adapter.add(IFujiXCameraCommands.EXPREV_STR + " (" + IFujiXCameraCommands.EXPREV_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraCommands.EXPREV_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.WHITE_BALANCE_STR + " (" + IFujiXCameraProperties.WHITE_BALANCE_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.WHITE_BALANCE_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.EXPOSURE_COMPENSATION_STR + " (" + IFujiXCameraProperties.EXPOSURE_COMPENSATION_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.EXPOSURE_COMPENSATION_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.APERTURE_STR + " (" + IFujiXCameraProperties.APERTURE_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.APERTURE_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.SHUTTER_SPEED_STR + " (" + IFujiXCameraProperties.SHUTTER_SPEED_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.SHUTTER_SPEED_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.SELF_TIMER_STR + " (" + IFujiXCameraProperties.SELF_TIMER_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.SELF_TIMER_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.FILM_SIMULATION_STR + " (" + IFujiXCameraProperties.FILM_SIMULATION_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.FILM_SIMULATION_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.ISO_STR + " (" + IFujiXCameraProperties.ISO_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.ISO_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.MOVIE_ISO_STR + " (" + IFujiXCameraProperties.MOVIE_ISO_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.MOVIE_ISO_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.IMAGE_FORMAT_STR + " (" + IFujiXCameraProperties.IMAGE_FORMAT_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.IMAGE_FORMAT_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.IMAGE_ASPECT_STR + " (" + IFujiXCameraProperties.IMAGE_ASPECT_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.IMAGE_ASPECT_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.FLASH_STR + " (" + IFujiXCameraProperties.FLASH_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.FLASH_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.F_SS_CONTROL_STR + " (" + IFujiXCameraProperties.F_SS_CONTROL_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.F_SS_CONTROL_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.RECMODE_ENABLE_STR + " (" + IFujiXCameraProperties.RECMODE_ENABLE_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.RECMODE_ENABLE_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.BATTERY_LEVEL_STR + " (" + IFujiXCameraProperties.BATTERY_LEVEL_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.BATTERY_LEVEL_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.BATTERY_LEVEL_2_STR + " (" + IFujiXCameraProperties.BATTERY_LEVEL_2_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.BATTERY_LEVEL_2_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.FOCUS_MODE_STR + " (" + IFujiXCameraProperties.FOCUS_MODE_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.FOCUS_MODE_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.SHOOTING_MODE_STR + " (" + IFujiXCameraProperties.SHOOTING_MODE_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.SHOOTING_MODE_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.FOCUS_POINT_STR + " (" + IFujiXCameraProperties.FOCUS_POINT_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.FOCUS_POINT_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.FOCUS_LOCK_STR + " (" + IFujiXCameraProperties.FOCUS_LOCK_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.FOCUS_LOCK_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.SDCARD_REMAIN_SIZE_STR + " (" + IFujiXCameraProperties.SDCARD_REMAIN_SIZE_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.SDCARD_REMAIN_SIZE_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.MOVIE_REMAINING_TIME_STR + " (" + IFujiXCameraProperties.MOVIE_REMAINING_TIME_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.MOVIE_REMAINING_TIME_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.DEVICE_ERROR_STR + " (" + IFujiXCameraProperties.DEVICE_ERROR_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.DEVICE_ERROR_STR_ID);
+
+        adapter.add(IFujiXCameraProperties.IMAGE_FILE_COUNT_STR + " (" + IFujiXCameraProperties.IMAGE_FILE_COUNT_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraProperties.IMAGE_FILE_COUNT_STR_ID);
+
+        adapter.add(IFujiXCameraCommands.CAMERA_CAPABILITIES_STR + " (" + IFujiXCameraCommands.CAMERA_CAPABILITIES_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraCommands.CAMERA_CAPABILITIES_STR_ID);
+
+        adapter.add(IFujiXCameraCommands.SINGLE_REQUEST_STR + " (" + IFujiXCameraCommands.SINGLE_REQUEST_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraCommands.SINGLE_REQUEST_STR_ID);
+
+        adapter.add(IFujiXCameraCommands.STOP_STR + " (" + IFujiXCameraCommands.STOP_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraCommands.STOP_STR_ID);
+
+        adapter.add(IFujiXCameraCommands.IMAGE_INFO_STR + " (" + IFujiXCameraCommands.IMAGE_INFO_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraCommands.IMAGE_INFO_STR_ID);
+
+        adapter.add(IFujiXCameraCommands.THUMBNAIL_INDEX_STR + " (" + IFujiXCameraCommands.THUMBNAIL_INDEX_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraCommands.THUMBNAIL_INDEX_STR_ID);
+
+        adapter.add(IFujiXCameraCommands.FULL_IMAGE_STR + " (" + IFujiXCameraCommands.FULL_IMAGE_STR_ID + ")");
+        commandNameIndexArray.append(position++, IFujiXCameraCommands.FULL_IMAGE_STR_ID);
+
+        adapter.add(IFujiXCameraCommands.LAST_IMAGE_CAMERA_STR + " (" + IFujiXCameraCommands.LAST_IMAGE_CAMERA_STR_ID + ")");
+        commandNameIndexArray.append(position, IFujiXCameraCommands.LAST_IMAGE_CAMERA_STR_ID);
+
+        return (adapter);
+    }
+
+    private void initializeCommandSelection(@NonNull final Activity activity, final Spinner spinner, final EditText commandIdArea)
+    {
+        try
+        {
+            commandIdArea.setText("");
+            ArrayAdapter<String> adapter = prepareCommandAdapter(activity);
+            spinner.setAdapter(adapter);
+            spinner.setSelection(selectedCommandIdPosition);
+            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
+            {
+                @Override
+                public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
+                {
+                    Log.v(TAG, "onItemSelected : " + position + " (" + id + ")");
+                    try
+                    {
+                        selectedCommandIdPosition = position;
+                        commandIdArea.setText(commandNameIndexArray.get(position, ""));
+                    }
+                    catch (Exception e)
+                    {
+                        e.printStackTrace();
+                    }
+                }
+
+                @Override
+                public void onNothingSelected(AdapterView<?> parent)
+                {
+                    Log.v(TAG, "onNothingSelected");
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    private void initializeMessageTypeSelection(final Activity activity, final Spinner spinner)
+    {
+        try
+        {
+            ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item);
+            adapter.add("Command(Single)");
+            adapter.add("Property(Multi)");
+
+            spinner.setAdapter(adapter);
+            spinner.setSelection(selectedMessageTypePosition);
+            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
+            {
+                @Override
+                public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
+                {
+                    Log.v(TAG, "onItemSelected : " + position + " (" + id + ")");
+                    selectedMessageTypePosition = position;
+                }
+
+                @Override
+                public void onNothingSelected(AdapterView<?> parent)
+                {
+                    Log.v(TAG, "onNothingSelected");
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    private void initializeBodyLengthSelection(final Activity activity, final Spinner spinner)
+    {
+        try
+        {
+            ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item);
+            adapter.add("0");
+            adapter.add("2");
+            adapter.add("4");
+            adapter.add("8");
+
+            spinner.setAdapter(adapter);
+            spinner.setSelection(selectedBodyLengthPosition);
+            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
+            {
+                @Override
+                public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
+                {
+                    Log.v(TAG, "onItemSelected : " + position + " (" + id + ")");
+                    selectedBodyLengthPosition = position;
+                }
+
+                @Override
+                public void onNothingSelected(AdapterView<?> parent)
+                {
+                    Log.v(TAG, "onNothingSelected");
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/cameraproperty/FujiXCameraStatusDialog.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/cameraproperty/FujiXCameraStatusDialog.java
new file mode 100644 (file)
index 0000000..f77f254
--- /dev/null
@@ -0,0 +1,156 @@
+package net.osdn.gokigen.gr2control.camera.fuji_x.cameraproperty;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+
+import net.osdn.gokigen.gr2control.R;
+import net.osdn.gokigen.gr2control.camera.ICameraStatus;
+import net.osdn.gokigen.gr2control.camera.fuji_x.IFujiXInterfaceProvider;
+
+import java.util.List;
+
+public class FujiXCameraStatusDialog extends DialogFragment
+{
+    private final String TAG = toString();
+    private ICameraStatus cameraStatus = null;
+    private Dialog myDialog = null;
+
+    public static FujiXCameraStatusDialog newInstance(@NonNull IFujiXInterfaceProvider interfaceProvider)
+    {
+        FujiXCameraStatusDialog instance = new FujiXCameraStatusDialog();
+        instance.prepare(interfaceProvider);
+
+        // パラメータはBundleにまとめておく
+        Bundle arguments = new Bundle();
+        //arguments.putString("method", method);
+        //arguments.putString("message", message);
+        instance.setArguments(arguments);
+
+        return (instance);
+    }
+
+    private void prepare(@NonNull IFujiXInterfaceProvider interfaceProvider)
+    {
+        this.cameraStatus = interfaceProvider.getCameraStatusListHolder();
+    }
+
+    /**
+     *
+     *
+     */
+    @Override
+    public @NonNull Dialog onCreateDialog(Bundle savedInstanceState)
+    {
+        final Activity activity = getActivity();
+        final AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
+
+        // Get the layout inflater
+        LayoutInflater inflater = activity.getLayoutInflater();
+        final View alertView = inflater.inflate(R.layout.dialog_status_show, null, false);
+        alertDialog.setView(alertView);
+
+        alertDialog.setIcon(R.drawable.ic_linked_camera_black_24dp);
+        alertDialog.setTitle(getString(R.string.camera_status_title));
+        final Button updateButton = alertView.findViewById(R.id.status_update_button);
+        final TextView statusTextView = alertView.findViewById(R.id.status_text_view);
+        try
+        {
+            if (updateButton != null)
+            {
+                updateButton.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v)
+                    {
+                        try
+                        {
+                            updateStatus(statusTextView);
+                        }
+                        catch (Exception e)
+                        {
+                            e.printStackTrace();
+                        }
+                    }
+                });
+            }
+            updateStatus(statusTextView);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        alertDialog.setCancelable(true);
+
+        // ボタンを設定する(実行ボタン)
+        alertDialog.setPositiveButton(activity.getString(R.string.dialog_positive_execute),
+                new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which)
+                    {
+                        dialog.dismiss();
+                    }
+                });
+
+        // ボタンを設定する (キャンセルボタン)
+        alertDialog.setNegativeButton(activity.getString(R.string.dialog_negative_cancel),
+                new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                        dialog.cancel();
+                    }
+                });
+
+        // 確認ダイアログを応答する
+        myDialog = alertDialog.create();
+        return (myDialog);
+    }
+
+    @Override
+    public void onPause()
+    {
+        super.onPause();
+        Log.v(TAG, "AlertDialog::onPause()");
+        if (myDialog != null)
+        {
+            myDialog.cancel();
+        }
+    }
+
+    private void updateStatus(TextView statusTextView)
+    {
+        try
+        {
+            String message = "";
+            if (cameraStatus == null)
+            {
+                Log.v(TAG, "STATUS HOLDER IS NULL..");
+                return;
+            }
+            List<String> statusList = cameraStatus.getStatusList("");
+            for (String statusName : statusList)
+            {
+                if (statusName != null)
+                {
+                    message = message.concat(statusName);
+                    message = message + " : " + cameraStatus.getStatus(statusName) + "\n";
+                }
+            }
+            if (statusTextView != null)
+            {
+                statusTextView.setText(message);
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+}
index 43bc1b1..d6fa055 100644 (file)
@@ -34,7 +34,6 @@ import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.connection.FujiXConnect
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.playback.FujiXPlaybackControl;
 import net.osdn.gokigen.gr2control.camera.playback.IPlaybackControl;
 import net.osdn.gokigen.gr2control.liveview.IAutoFocusFrameDisplay;
-import net.osdn.gokigen.gr2control.liveview.ICameraStatusUpdateNotify;
 import net.osdn.gokigen.gr2control.liveview.IIndicatorControl;
 import net.osdn.gokigen.gr2control.liveview.liveviewlistener.ILiveViewListener;
 
index 1869091..1e24c01 100644 (file)
@@ -317,6 +317,9 @@ class FujiXStatusHolder
             case IFujiXFilmSimulation.FILM_SIMULATION_ETERNA:
                 value = "ETERNA";
                 break;
+            case IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_NEGATIVE:
+                value = "CLASSIC NEGATIVE";
+                break;
             default:
                 value = "??? " + current;
                 break;
@@ -700,7 +703,7 @@ class FujiXStatusHolder
 
     List<String> getAvailableItemList(String listKey)
     {
-        if (listKey == null)
+        if ((listKey == null)||(listKey.isEmpty()))
         {
             // アイテム名の一覧を応答する
             return (getAvailableStatusNameList());
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/IFujiXCameraCommands.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/IFujiXCameraCommands.java
new file mode 100644 (file)
index 0000000..bc8df0d
--- /dev/null
@@ -0,0 +1,48 @@
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages;
+
+public interface IFujiXCameraCommands
+{
+/*
+    int STOP = 0x1003;
+    int IMAGE_INFO = 0x1008;
+    int THUMBNAIL_INDEX = 0x100a;
+    int SHUTTER = 0x100e;
+    int SINGLE_REQUEST = 0x1015;
+    int FULL_IMAGE = 0x101b;
+    int LAST_IMAGE_CAMERA = 0x9022;
+    int FOCUS_POINT = 0x9026;
+    int FOCUS_UNLOCK = 0x9027;
+    int CAMERA_CAPABILITIES = 0x902b;
+    int SHUTTER_SPEED = 0x902c;
+    int APERTURE = 0x902d;
+    int EXPREV = 0x902e;
+*/
+
+    String STOP_STR = "STOP";
+    String IMAGE_INFO_STR = "IMAGE_INFO";
+    String THUMBNAIL_INDEX_STR = "THUMBNAIL";
+    String SHUTTER_STR = "SHUTTER";
+    String SINGLE_REQUEST_STR = "SINGLE_REQUEST";
+    String FULL_IMAGE_STR = "FULL_IMAGE";
+    String LAST_IMAGE_CAMERA_STR = "LAST_IMAGE";
+    String FOCUS_POINT_STR = "FOCUS_POINT";
+    String FOCUS_UNLOCK_STR = "FOCUS_UNLOCK";
+    String CAMERA_CAPABILITIES_STR = "CAMERA_CAPABILITIES";
+    String SHUTTER_SPEED_STR = "SHUTTER_SPEED";
+    String APERTURE_STR = "APERTURE";
+    String EXPREV_STR = "EXPREV";
+
+    String STOP_STR_ID = "0x1003";
+    String IMAGE_INFO_STR_ID = "0x1008";
+    String THUMBNAIL_INDEX_STR_ID = "0x100a";
+    String SHUTTER_STR_ID = "0x100e";
+    String SINGLE_REQUEST_STR_ID = "0x1015";
+    String FULL_IMAGE_STR_ID = "0x101b";
+    String LAST_IMAGE_CAMERA_STR_ID = "0x9022";
+    String FOCUS_POINT_STR_ID = "0x9026";
+    String FOCUS_UNLOCK_STR_ID = "0x9027";
+    String CAMERA_CAPABILITIES_STR_ID = "0x902b";
+    String SHUTTER_SPEED_STR_ID = "0x902c";
+    String APERTURE_STR_ID = "0x902d";
+    String EXPREV_STR_ID = "0x902e";
+}
index aa7cdc0..fdb7597 100644 (file)
@@ -19,5 +19,6 @@ public interface IFujiXFilmSimulation
     int FILM_SIMULATION_ACROS_R  =14;
     int FILM_SIMULATION_ACROS_G  =15;
     int FILM_SIMULATION_ETERNA  =16;
-    int FILM_SIMULATION_MAX = 17;
+    int FILM_SIMULATION_CLASSIC_NEGATIVE = 17;
+    int FILM_SIMULATION_MAX = 18;
 }
index cd8297e..13c398d 100644 (file)
@@ -1,6 +1,5 @@
 package net.osdn.gokigen.gr2control.liveview;
 
-import android.app.Activity;
 import android.content.SharedPreferences;
 import android.os.Vibrator;
 import android.util.Log;
@@ -15,11 +14,13 @@ import net.osdn.gokigen.gr2control.camera.ICaptureControl;
 import net.osdn.gokigen.gr2control.camera.IFocusingControl;
 import net.osdn.gokigen.gr2control.camera.IInterfaceProvider;
 import net.osdn.gokigen.gr2control.camera.IZoomLensControl;
+import net.osdn.gokigen.gr2control.camera.fuji_x.cameraproperty.FujiXCameraCommandSendDialog;
 import net.osdn.gokigen.gr2control.preference.IPreferencePropertyAccessor;
 import net.osdn.gokigen.gr2control.scene.ConfirmationDialog;
 import net.osdn.gokigen.gr2control.scene.IChangeScene;
 
 import androidx.annotation.NonNull;
+import androidx.fragment.app.FragmentActivity;
 import androidx.preference.PreferenceManager;
 
 import static android.content.Context.VIBRATOR_SERVICE;
@@ -31,7 +32,7 @@ import static android.content.Context.VIBRATOR_SERVICE;
 class LiveViewClickTouchListener implements View.OnClickListener, View.OnTouchListener, View.OnKeyListener
 {
     private final String TAG = toString();
-    private final Activity context;
+    private final FragmentActivity context;
     private final ILiveImageStatusNotify statusNotify;
     private final IStatusViewDrawer statusViewDrawer;
     private final IChangeScene changeScene;
@@ -44,7 +45,7 @@ class LiveViewClickTouchListener implements View.OnClickListener, View.OnTouchLi
     private final IFavoriteSettingDialogKicker dialogKicker;
     private final IZoomLensControl zoomLensControl;
 
-    LiveViewClickTouchListener(@NonNull Activity context, @NonNull ILiveImageStatusNotify imageStatusNotify, @NonNull IStatusViewDrawer statusView, @NonNull IChangeScene changeScene, @NonNull IInterfaceProvider interfaceProvider, @NonNull IFavoriteSettingDialogKicker dialogKicker)
+    LiveViewClickTouchListener(@NonNull FragmentActivity context, @NonNull ILiveImageStatusNotify imageStatusNotify, @NonNull IStatusViewDrawer statusView, @NonNull IChangeScene changeScene, @NonNull IInterfaceProvider interfaceProvider, @NonNull IFavoriteSettingDialogKicker dialogKicker)
     {
         this.context = context;
         this.statusNotify = imageStatusNotify;
@@ -68,7 +69,7 @@ class LiveViewClickTouchListener implements View.OnClickListener, View.OnTouchLi
     public void onClick(View view)
     {
         int id = view.getId();
-        boolean isVibrate = true;
+        boolean isVibrate;
         //Log.v(TAG, "onClick() : " + id);
         try
         {
@@ -102,7 +103,7 @@ class LiveViewClickTouchListener implements View.OnClickListener, View.OnTouchLi
                 case R.id.connect_disconnect_button:
                     // カメラと接続・切断のボタンが押された
                     changeScene.changeCameraConnection();
-                    //isVibrate = true;
+                    isVibrate = true;
                     break;
 
                 case R.id.shutter_button:
@@ -120,19 +121,19 @@ class LiveViewClickTouchListener implements View.OnClickListener, View.OnTouchLi
                 case R.id.show_images_button:
                     // 画像一覧表示ボタンが押された...画像一覧画面を開く
                     changeScene.changeScenceToImageList();
-                    //isVibrate = true;
+                    isVibrate = true;
                     break;
 
                 case R.id.camera_power_off_button:
                     // 電源ボタンが押された...終了してよいか確認して、終了する
                     confirmExitApplication();
-                    //isVibrate = true;
+                    isVibrate = true;
                     break;
 
                 case R.id.show_preference_button:
                     // カメラの設定
                     changeScene.changeSceneToConfiguration();
-                    //isVibrate = true;
+                    isVibrate = true;
                     break;
 
                 case R.id.show_hide_grid_button:
@@ -410,7 +411,19 @@ class LiveViewClickTouchListener implements View.OnClickListener, View.OnTouchLi
                 dialogKicker.showFavoriteSettingDialog();
                 return;
             }
-
+            else if (interfaceProvider.getCammeraConnectionMethod() == ICameraConnection.CameraConnectionMethod.FUJI_X)
+            {
+                try
+                {
+                    // FUJI X Seriesの場合は、コマンド送信ダイアログを表示する
+                    FujiXCameraCommandSendDialog.newInstance(interfaceProvider.getFujiXInterfaceProvider()).show(context.getSupportFragmentManager(), "sendCommandDialog");
+                }
+                catch (Exception e)
+                {
+                    e.printStackTrace();
+                }
+                return;
+            }
 
             ICameraButtonControl btnCtl = interfaceProvider.getButtonControl();
             if (btnCtl != null)
index 570d65e..61b87ef 100644 (file)
@@ -1,6 +1,5 @@
 package net.osdn.gokigen.gr2control.liveview;
 
-import android.app.Activity;
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.graphics.Color;
@@ -15,6 +14,7 @@ import androidx.core.content.ContextCompat;
 import androidx.core.content.res.ResourcesCompat;
 import androidx.core.graphics.drawable.DrawableCompat;
 import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
 import androidx.preference.PreferenceManager;
 
 import android.util.Log;
@@ -156,7 +156,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
             {
                 Log.v(TAG, "interfaceInjector is NULL...");
             }
-            Activity activity = this.getActivity();
+            FragmentActivity activity = this.getActivity();
             Vibrator vibrator = (activity != null) ? (Vibrator) activity.getSystemService(VIBRATOR_SERVICE) : null;
             if ((onClickTouchListener == null)&&(activity != null))
             {
@@ -362,7 +362,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
     {
         try
         {
-            Activity activity = getActivity();
+            FragmentActivity activity = getActivity();
             if (activity != null)
             {
                 if (showGrid == null) {
@@ -684,7 +684,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
             @Override
             public void run() {
                 // isVisibleがtrueなら、ズームレンズボタンを有効にする
-                Activity activity = getActivity();
+                FragmentActivity activity = getActivity();
                 if (activity != null)
                 {
                     try
@@ -742,7 +742,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
      */
     private void runOnUiThread(Runnable action)
     {
-        Activity activity = getActivity();
+        FragmentActivity activity = getActivity();
         if (activity == null)
         {
             return;
@@ -755,7 +755,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
     {
         try
         {
-            final Activity activity = getActivity();
+            final FragmentActivity activity = getActivity();
             if (activity == null)
             {
                 return;
@@ -786,7 +786,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
         try
         {
             final String shutterSpeed = tv.replace(".", "/");
-            final Activity activity = getActivity();
+            final FragmentActivity activity = getActivity();
             if (activity == null)
             {
                 return;
@@ -817,7 +817,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
         try
         {
             final String apertureValue = (av.length() > 1) ? ("F" + av) : "";
-            final Activity activity = getActivity();
+            final FragmentActivity activity = getActivity();
             if (activity == null)
             {
                 return;
@@ -847,7 +847,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
     {
         try
         {
-            final Activity activity = getActivity();
+            final FragmentActivity activity = getActivity();
             if (activity == null)
             {
                 return;
@@ -878,7 +878,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
         try
         {
             Log.v(TAG, "updatedMeteringMode() : " + meteringMode);
-            final Activity activity = getActivity();
+            final FragmentActivity activity = getActivity();
             if ((activity == null)||(meteringMode == null))
             {
                 return;
@@ -937,7 +937,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
     {
         try
         {
-            final Activity activity = getActivity();
+            final FragmentActivity activity = getActivity();
             if (activity == null)
             {
                 return;
@@ -994,7 +994,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
     @Override
     public void updateFocusedStatus(final boolean focused, final boolean focusLocked)
     {
-        final Activity activity = getActivity();
+        final FragmentActivity activity = getActivity();
         try
         {
             if (activity != null)
@@ -1061,7 +1061,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
     {
         try
         {
-            Activity activity = getActivity();
+            FragmentActivity activity = getActivity();
             if (activity != null)
             {
                 ImageView imageView = activity.findViewById(R.id.button_toggle_aeaf);
@@ -1093,7 +1093,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
     {
         try
         {
-            Activity activity = getActivity();
+            FragmentActivity activity = getActivity();
             if (activity != null)
             {
                 TextView textView = activity.findViewById(R.id.lever_ael_caf);
diff --git a/app/src/main/res/layout-land/dialog_status_show.xml b/app/src/main/res/layout-land/dialog_status_show.xml
new file mode 100644 (file)
index 0000000..5973d6d
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <ScrollView
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content">
+        <LinearLayout
+            android:id="@+id/info_edit_data"
+            android:orientation="vertical"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:padding="6dp"
+            >
+            <TextView
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:id="@+id/status_text_view"
+                android:tag="status_text"
+                android:textSize="8pt"
+                android:layout_gravity="start">
+            </TextView>
+
+            <Button
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:tag="button"
+                android:id="@+id/status_update_button"
+                android:text="@string/update_status"
+                android:layout_gravity="center"
+                android:textSize="6pt" />
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>
diff --git a/app/src/main/res/layout-land/fujix_request_command_layout.xml b/app/src/main/res/layout-land/fujix_request_command_layout.xml
new file mode 100644 (file)
index 0000000..0fc1765
--- /dev/null
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <LinearLayout
+            android:id="@+id/info_edit_data"
+            android:orientation="vertical"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:padding="6dp"
+            >
+            <LinearLayout
+                android:id="@+id/mode_change_button_area"
+                android:orientation="horizontal"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:padding="6dp"
+                >
+                <Button
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:tag="button"
+                    android:id="@+id/change_to_liveview"
+                    android:text="@string/dialog_button_liveview"
+                    android:layout_gravity="center"
+                    android:textSize="6pt" />
+
+                <Button
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:tag="button"
+                    android:id="@+id/change_to_playback"
+                    android:text="@string/dialog_button_playback"
+                    android:layout_gravity="center"
+                    android:textSize="6pt" />
+            </LinearLayout>
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="2dp"
+                android:background="@android:color/darker_gray"/>
+            <LinearLayout
+                android:id="@+id/command_select_area"
+                android:orientation="horizontal"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:padding="6dp"
+                >
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:id="@+id/command_name"
+                    android:text="@string/dialog_title_command"
+                    android:layout_gravity="start">
+                </TextView>
+
+                <Spinner
+                    android:id="@+id/spinner_selection_command_id"
+                    android:layout_width="fill_parent"
+                    android:layout_height="wrap_content"
+                    android:text="@string/blank"
+                    android:visibility="visible" />
+            </LinearLayout>
+
+            <EditText android:id="@+id/edit_command_id"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:autoLink="all"
+                android:linksClickable="true"
+                android:inputType="text"
+                android:hint="@string/dialog_command_id_hint"
+                />
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="8dp" />
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="1dp"
+                android:background="@android:color/darker_gray"/>
+
+            <LinearLayout
+                android:id="@+id/message_type_area"
+                android:orientation="horizontal"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:padding="6dp"
+                >
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:id="@+id/message_type_name"
+                    android:text="@string/dialog_message_type_name"
+                    android:layout_gravity="start">
+                </TextView>
+
+                <Spinner
+                    android:id="@+id/spinner_selection_message_type"
+                    android:layout_width="fill_parent"
+                    android:layout_height="wrap_content"
+                    android:text="@string/blank"
+                    android:visibility="visible" />
+            </LinearLayout>
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="1dp"
+                android:background="@android:color/darker_gray"/>
+
+            <LinearLayout
+                android:id="@+id/body_length_area"
+                android:orientation="horizontal"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:padding="6dp"
+                >
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:id="@+id/body_length_name"
+                    android:text="@string/dialog_title_body_length"
+                    android:layout_gravity="start">
+                </TextView>
+
+                <Spinner
+                    android:id="@+id/spinner_selection_message_body_length"
+                    android:layout_width="fill_parent"
+                    android:layout_height="wrap_content"
+                    android:text="@string/blank"
+                    android:visibility="visible" />
+            </LinearLayout>
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="1dp"
+                android:background="@android:color/darker_gray"/>
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="6dp" />
+
+            <TextView
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:id="@+id/method_name"
+                android:text="@string/dialog_title_message_body"
+                />
+
+            <EditText android:id="@+id/edit_message_body1"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:autoLink="all"
+                android:linksClickable="true"
+                android:inputType="text"
+                android:hint="@string/dialog_message_body1_hint"
+                />
+
+            <EditText android:id="@+id/edit_message_body2"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:autoLink="all"
+                android:linksClickable="true"
+                android:inputType="text"
+                android:hint="@string/dialog_message_body2_hint"
+                />
+
+            <Button
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:tag="button"
+                android:id="@+id/send_message_button"
+                android:text="@string/dialog_send_message"
+                android:layout_gravity="center"
+                android:textSize="6pt" />
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="2dp"
+                android:background="@android:color/darker_gray"/>
+
+            <TextView
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:id="@+id/command_response_value"
+                android:text="@string/blank"
+                />
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="2dp"
+                android:background="@android:color/darker_gray"/>
+
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>
diff --git a/app/src/main/res/layout/dialog_status_show.xml b/app/src/main/res/layout/dialog_status_show.xml
new file mode 100644 (file)
index 0000000..5973d6d
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <ScrollView
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content">
+        <LinearLayout
+            android:id="@+id/info_edit_data"
+            android:orientation="vertical"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:padding="6dp"
+            >
+            <TextView
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:id="@+id/status_text_view"
+                android:tag="status_text"
+                android:textSize="8pt"
+                android:layout_gravity="start">
+            </TextView>
+
+            <Button
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:tag="button"
+                android:id="@+id/status_update_button"
+                android:text="@string/update_status"
+                android:layout_gravity="center"
+                android:textSize="6pt" />
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>
diff --git a/app/src/main/res/layout/fujix_request_command_layout.xml b/app/src/main/res/layout/fujix_request_command_layout.xml
new file mode 100644 (file)
index 0000000..2776887
--- /dev/null
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <LinearLayout
+            android:id="@+id/info_edit_data"
+            android:orientation="vertical"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:padding="6dp"
+            >
+            <LinearLayout
+                android:id="@+id/mode_change_button_area"
+                android:orientation="horizontal"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:padding="6dp"
+                >
+                <Button
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:tag="button"
+                    android:id="@+id/change_to_liveview"
+                    android:text="@string/dialog_button_liveview"
+                    android:layout_gravity="center"
+                    android:textSize="6pt" />
+
+                <Button
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:tag="button"
+                    android:id="@+id/change_to_playback"
+                    android:text="@string/dialog_button_playback"
+                    android:layout_gravity="center"
+                    android:textSize="6pt" />
+            </LinearLayout>
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="2dp"
+                android:background="@android:color/darker_gray"/>
+
+            <LinearLayout
+                android:id="@+id/command_select_area"
+                android:orientation="horizontal"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:padding="6dp"
+                >
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:id="@+id/command_name"
+                    android:text="@string/dialog_title_command"
+                    android:layout_gravity="start">
+                </TextView>
+
+                <Spinner
+                    android:id="@+id/spinner_selection_command_id"
+                    android:layout_width="fill_parent"
+                    android:layout_height="wrap_content"
+                    android:text="@string/blank"
+                    android:visibility="visible" />
+            </LinearLayout>
+
+            <EditText android:id="@+id/edit_command_id"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:autoLink="all"
+                android:linksClickable="true"
+                android:inputType="text"
+                android:hint="@string/dialog_command_id_hint"
+                />
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="8dp" />
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="1dp"
+                android:background="@android:color/darker_gray"/>
+
+            <LinearLayout
+                android:id="@+id/message_type_area"
+                android:orientation="horizontal"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:padding="6dp"
+                >
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:id="@+id/message_type_name"
+                    android:text="@string/dialog_message_type_name"
+                    android:layout_gravity="start">
+                </TextView>
+
+                <Spinner
+                    android:id="@+id/spinner_selection_message_type"
+                    android:layout_width="fill_parent"
+                    android:layout_height="wrap_content"
+                    android:text="@string/blank"
+                    android:visibility="visible" />
+            </LinearLayout>
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="1dp"
+                android:background="@android:color/darker_gray"/>
+
+            <LinearLayout
+                android:id="@+id/body_length_area"
+                android:orientation="horizontal"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:padding="6dp"
+                >
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:id="@+id/body_length_name"
+                    android:text="@string/dialog_title_body_length"
+                    android:layout_gravity="start">
+                </TextView>
+
+                <Spinner
+                    android:id="@+id/spinner_selection_message_body_length"
+                    android:layout_width="fill_parent"
+                    android:layout_height="wrap_content"
+                    android:text="@string/blank"
+                    android:visibility="visible" />
+            </LinearLayout>
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="1dp"
+                android:background="@android:color/darker_gray"/>
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="6dp" />
+
+            <TextView
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:id="@+id/message_body_name"
+                android:text="@string/dialog_title_message_body"
+                />
+
+            <EditText android:id="@+id/edit_message_body1"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:autoLink="all"
+                android:linksClickable="true"
+                android:inputType="text"
+                android:hint="@string/dialog_message_body1_hint"
+                />
+
+            <EditText android:id="@+id/edit_message_body2"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:autoLink="all"
+                android:linksClickable="true"
+                android:inputType="text"
+                android:hint="@string/dialog_message_body2_hint"
+                />
+
+            <Button
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:tag="button"
+                android:id="@+id/send_message_button"
+                android:text="@string/dialog_send_message"
+                android:layout_gravity="center"
+                android:textSize="6pt" />
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="2dp"
+                android:background="@android:color/darker_gray"/>
+
+            <TextView
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:id="@+id/command_response_value"
+                android:text="@string/blank"
+                />
+
+            <View
+                android:layout_width="fill_parent"
+                android:layout_height="2dp"
+                android:background="@android:color/darker_gray"/>
+
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>
index 9cab506..7dfa36b 100644 (file)
         <item >QUAD_VGA</item>
     </string-array>
 
+    <string-array name="fuji_x_film_simulation">
+        <item>PROVIA</item>
+        <item>Velvia</item>
+        <item>ASTIA</item>
+        <item>MONOCHROME</item>
+        <item>SEPIA</item>
+        <item>PRO Neg. Hi</item>
+        <item>PRO Neg. Std</item>
+        <item>MONOCHROME+Ye</item>
+        <item>MONOCHROME+R</item>
+        <item>MONOCHROME+G</item>
+        <item>CLASSIC CHROME</item>
+        <item>ACROS</item>
+        <item>ACROS+Ye</item>
+        <item>ACROS+R</item>
+        <item>ACROS+G</item>
+        <item>ETERNA</item>
+        <item>CLASSIC Neg.</item>
+    </string-array>
+
+    <string-array name="fuji_x_film_simulation_value">
+        <item>1</item>
+        <item>2</item>
+        <item>3</item>
+        <item>4</item>
+        <item>5</item>
+        <item>6</item>
+        <item>7</item>
+        <item>8</item>
+        <item>9</item>
+        <item>10</item>
+        <item>11</item>
+        <item>12</item>
+        <item>13</item>
+        <item>14</item>
+        <item>15</item>
+        <item>16</item>
+        <item>17</item>
+    </string-array>
+
+    <string-array name="fuji_x_white_balance">
+        <item>AUTO</item>
+        <item>FINE</item>
+        <item>INCANDESCENT</item>
+        <item>FLUORESCENT 1</item>
+        <item>FLUORESCENT 2</item>
+        <item>FLUORESCENT 3</item>
+        <item>SHADE</item>
+        <item>UNDERWATER</item>
+        <item>TEMPERATURE</item>
+        <item>CUSTOM</item>
+    </string-array>
+
+    <string-array name="fuji_x_white_balance_value">
+        <item>2</item>
+        <item>4</item>
+        <item>6</item>
+        <item>32769</item>
+        <item>32770</item>
+        <item>32771</item>
+        <item>32774</item>
+        <item>32778</item>
+        <item>32779</item>
+        <item>32780</item>
+    </string-array>
+
 </resources>
index 332cc84..b72d283 100644 (file)
     <string name="pref_exit_only">アプリ終了</string>
     <string name="pref_fujix_display_camera_view">LVをカメラでも表示</string>
     <string name="pref_fujix_display_camera_view_summary">お試し:ライブビューをカメラ画面で同時表示します</string>
-    <string name="pref_fujix_focus_xy">フォーカス点数 (default: 7,7)</string>
-    <string name="pref_summary_fujix_focus_xy">フォーカス点数を指定します</string>
+    <string name="pref_fujix_focus_xy">フォーカス点数[X,Y] (default: 7,7)</string>
+    <string name="pref_summary_fujix_focus_xy">接続するカメラに合わせてフォーカス点数を指定します</string>
     <string name="pref_fujix_liveview_wait">LV画像受信待ち間隔(default: 80)</string>
     <string name="pref_summary_fujix_liveview_wait">ライブビュー画像受信間隔を指定します</string>
     <string name="pref_fujix_command_polling_wait">コマンド間隔(default: 500)</string>
     <string name="connect_connecting12">接続中&#8230;(12/12)</string>
     <string name="connect_connect_finished">カメラと接続</string>
     <string name="connect_receive_unknown_message">不明な応答を受信しました。</string>
+
+    <string name="dialog_fujix_command_title_command">メッセージ送信(FUJI)</string>
+    <string name="camera_status_title">カメラ状態</string>
+    <string name="update_status">更新</string>
+    <string name="dialog_title_command">コマンド</string>
+    <string name="dialog_command_id_hint">0x####</string>
+    <string name="dialog_message_type_name">メッセージ種別</string>
+    <string name="dialog_title_body_length">ボディ長</string>
+    <string name="dialog_message_body1_hint">0x########</string>
+    <string name="dialog_message_body2_hint">0x########</string>
+    <string name="dialog_message_body3_hint">0x########</string>
+    <string name="dialog_message_body4_hint">0x########</string>
+    <string name="dialog_title_message_body">メッセージボディ</string>
+    <string name="dialog_command_hint">(command)</string>
+    <string name="dialog_service_hint">(service)</string>
 </resources>
index 9cab506..7dfa36b 100644 (file)
         <item >QUAD_VGA</item>
     </string-array>
 
+    <string-array name="fuji_x_film_simulation">
+        <item>PROVIA</item>
+        <item>Velvia</item>
+        <item>ASTIA</item>
+        <item>MONOCHROME</item>
+        <item>SEPIA</item>
+        <item>PRO Neg. Hi</item>
+        <item>PRO Neg. Std</item>
+        <item>MONOCHROME+Ye</item>
+        <item>MONOCHROME+R</item>
+        <item>MONOCHROME+G</item>
+        <item>CLASSIC CHROME</item>
+        <item>ACROS</item>
+        <item>ACROS+Ye</item>
+        <item>ACROS+R</item>
+        <item>ACROS+G</item>
+        <item>ETERNA</item>
+        <item>CLASSIC Neg.</item>
+    </string-array>
+
+    <string-array name="fuji_x_film_simulation_value">
+        <item>1</item>
+        <item>2</item>
+        <item>3</item>
+        <item>4</item>
+        <item>5</item>
+        <item>6</item>
+        <item>7</item>
+        <item>8</item>
+        <item>9</item>
+        <item>10</item>
+        <item>11</item>
+        <item>12</item>
+        <item>13</item>
+        <item>14</item>
+        <item>15</item>
+        <item>16</item>
+        <item>17</item>
+    </string-array>
+
+    <string-array name="fuji_x_white_balance">
+        <item>AUTO</item>
+        <item>FINE</item>
+        <item>INCANDESCENT</item>
+        <item>FLUORESCENT 1</item>
+        <item>FLUORESCENT 2</item>
+        <item>FLUORESCENT 3</item>
+        <item>SHADE</item>
+        <item>UNDERWATER</item>
+        <item>TEMPERATURE</item>
+        <item>CUSTOM</item>
+    </string-array>
+
+    <string-array name="fuji_x_white_balance_value">
+        <item>2</item>
+        <item>4</item>
+        <item>6</item>
+        <item>32769</item>
+        <item>32770</item>
+        <item>32771</item>
+        <item>32774</item>
+        <item>32778</item>
+        <item>32779</item>
+        <item>32780</item>
+    </string-array>
+
 </resources>
index 8fbdf4e..fa2c38f 100644 (file)
     <string name="connect_connect_finished">Connect Finished.</string>
     <string name="connect_receive_unknown_message">RECEIVED UNKNOWN ID MESSAGE</string>
 
+    <string name="dialog_fujix_command_title_command">Send Message(FUJI)</string>
+    <string name="camera_status_title">Camera Status</string>
+    <string name="update_status">Update</string>
+
+    <string name="dialog_title_command">Command</string>
+    <string name="dialog_command_id_hint">0x####</string>
+    <string name="dialog_message_type_name">Message Type</string>
+    <string name="dialog_title_body_length">Body Length</string>
+    <string name="dialog_message_body1_hint">0x########</string>
+    <string name="dialog_message_body2_hint">0x########</string>
+    <string name="dialog_message_body3_hint">0x########</string>
+    <string name="dialog_message_body4_hint">0x########</string>
+    <string name="dialog_title_message_body">Message Body</string>
+    <string name="dialog_command_hint">(command)</string>
+    <string name="dialog_service_hint">(service)</string>
+
 </resources>