OSDN Git Service

フラッシュモードとセルフタイマーの設定を変更できるようにする。
[gokigen/Gr2Control.git] / app / src / main / java / net / osdn / gokigen / gr2control / liveview / LiveViewFujiXKeyPanelClickListener.java
index db94f7a..5e699f5 100644 (file)
@@ -1,13 +1,17 @@
 package net.osdn.gokigen.gr2control.liveview;
 
+import android.content.DialogInterface;
 import android.os.Vibrator;
 import android.util.Log;
 import android.view.View;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
 
 import net.osdn.gokigen.gr2control.R;
+import net.osdn.gokigen.gr2control.camera.ICameraStatus;
 import net.osdn.gokigen.gr2control.camera.IInterfaceProvider;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandPublisher;
@@ -15,15 +19,19 @@ import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.Comman
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.IFujiXCameraCommands;
 import net.osdn.gokigen.gr2control.camera.utils.SimpleLogDumper;
 
+import java.util.List;
+
 public class LiveViewFujiXKeyPanelClickListener implements View.OnClickListener, View.OnLongClickListener, IFujiXCommandCallback
 {
     private final String TAG = toString();
+    private final FragmentActivity activity;
     private static final boolean isDumpLog = false;
     private final IInterfaceProvider interfaceProvider;
     private final Vibrator vibrator;
 
-    LiveViewFujiXKeyPanelClickListener(@NonNull IInterfaceProvider interfaceProvider, @Nullable Vibrator vibrator)
+    LiveViewFujiXKeyPanelClickListener(@NonNull FragmentActivity activity, @NonNull IInterfaceProvider interfaceProvider, @Nullable Vibrator vibrator)
     {
+        this.activity = activity;
         this.interfaceProvider = interfaceProvider;
         this.vibrator = vibrator;
     }
@@ -52,9 +60,15 @@ public class LiveViewFujiXKeyPanelClickListener implements View.OnClickListener,
                 case R.id.button_fuji_x_xv_minus:
                     updateValue(IFujiXCameraCommands.EXPREV, 0);
                     break;
-                case R.id.button_fuji_x_xv_plus:
-                    updateValue(IFujiXCameraCommands.EXPREV, 1);
+                case R.id.button_fuji_x_flash:
+                    updateSelection(ICameraStatus.FLASH_XV);
+                    isVibrate = false;
+                    break;
+                case R.id.button_fuji_x_timer:
+                    updateSelection(ICameraStatus.SELF_TIMER);
+                    isVibrate = false;
                     break;
+
                 default:
                     isVibrate = false;
                     break;
@@ -89,6 +103,10 @@ public class LiveViewFujiXKeyPanelClickListener implements View.OnClickListener,
                     break;
                 case R.id.button_fuji_x_xv_plus:
                     break;
+                case R.id.button_fuji_x_flash:
+                    break;
+                case R.id.button_fuji_x_timer:
+                    break;
                 default:
                     break;
             }
@@ -119,6 +137,62 @@ public class LiveViewFujiXKeyPanelClickListener implements View.OnClickListener,
     }
 
     /**
+     *  選択肢を更新する
+     *
+     */
+    private void updateSelection(@NonNull final String key)
+    {
+        try
+        {
+            Log.v(TAG, "updateSelection() : " + key);
+            final ICameraStatus statusList = interfaceProvider.getCameraStatusListHolder();
+            if (statusList == null)
+            {
+                // ステータスリストの保持クラスが取れなかった...
+                Log.w(TAG, "ICameraStatus is NULL...");
+                return;
+            }
+            final String current = statusList.getStatus(key);
+            final List<String> itemList = statusList.getStatusList(key);
+            if (itemList.size() <= 0)
+            {
+                // アイテム(選択肢)が登録されていなければ、何もしない
+                return;
+            }
+
+            AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+
+            // リストから配列に積み替え...
+            String[] items = new String[itemList.size()];
+            int index = 0;
+            for (String item : itemList)
+            {
+                Log.v(TAG, " (" + index + ") " + item);
+                items[index] = item;
+                index++;
+            }
+            int position = itemList.indexOf(current);
+            Log.v(TAG, " updateSelection() : " + key + " " + itemList.size() + " " + position);
+            builder.setSingleChoiceItems(items, position, new DialogInterface.OnClickListener() {
+                @Override
+                public void onClick(DialogInterface dialogInterface, int i)
+                {
+                    String choice = itemList.get(i);
+                    Log.v(TAG, key + " ITEM CHOICED : " + choice + "(CURRENT : " + current + ")");
+
+                    statusList.setStatus(key, choice);
+                    dialogInterface.dismiss();
+                }
+            });
+            builder.show();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
      *   ぶるぶるさせる
      *
      */