From: MRSa Date: Mon, 4 May 2020 06:51:02 +0000 (+0900) Subject: フラッシュモードとセルフタイマーの設定を変更できるようにする。 X-Git-Url: http://git.osdn.net/view?p=gokigen%2FGr2Control.git;a=commitdiff_plain;h=be6e106c9bb6ceb2841c9335ff715be404fdf068 フラッシュモードとセルフタイマーの設定を変更できるようにする。 --- diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/ICameraStatus.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/ICameraStatus.java index 76b121b..31e1780 100644 --- a/app/src/main/java/net/osdn/gokigen/gr2control/camera/ICameraStatus.java +++ b/app/src/main/java/net/osdn/gokigen/gr2control/camera/ICameraStatus.java @@ -41,6 +41,7 @@ public interface ICameraStatus String ISO_SENSITIVITY = "sv"; String EXPREV = "xv"; String FLASH_XV = "flashxv"; + String SELF_TIMER = "selftimer"; String TAKE_MODE_MOVIE = "movie"; } diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXStatusHolder.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXStatusHolder.java index 75b8bbe..3ce1723 100644 --- a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXStatusHolder.java +++ b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXStatusHolder.java @@ -756,7 +756,14 @@ class FujiXStatusHolder { return (getAvailableResourceArrayItemList(R.array.fuji_x_iso_sensitivity)); } - + if (listKey.matches(ICameraStatus.FLASH_XV)) + { + return (getAvailableResourceArrayItemList(R.array.fuji_x_flash_control)); + } + if (listKey.matches(ICameraStatus.SELF_TIMER)) + { + return (getAvailableResourceArrayItemList(R.array.fuji_x_timer_control)); + } ///// 選択可能なステータスの一覧を取得する : でも以下はアイテム名の一覧... ///// /* @@ -810,6 +817,7 @@ class FujiXStatusHolder String[] items = activity.getResources().getStringArray(id); for (String item : items) { + Log.v(TAG, " SELECTION : " + item); selection.add(item); } return (selection); @@ -893,6 +901,58 @@ class FujiXStatusHolder return (iso); } + private String getCurrentFlashStatus() + { + String flash = ""; + try + { + int current = statusHolder.get(IFujiXCameraProperties.FLASH); + String[] items = activity.getResources().getStringArray(R.array.fuji_x_flash_control); + String[] itemValues = activity.getResources().getStringArray(R.array.fuji_x_flash_control_value); + int index = 0; + for (String itemValue : itemValues) + { + int itemValueInt = Integer.parseInt(itemValue, 16); + if (itemValueInt == current) + { + return (items[index]); + } + index++; + } + } + catch (Exception e) + { + e.printStackTrace(); + } + return (flash); + } + + private String getCurrentSelfTimerStatus() + { + String selfTimer = ""; + try + { + int current = statusHolder.get(IFujiXCameraProperties.SELF_TIMER); + String[] items = activity.getResources().getStringArray(R.array.fuji_x_timer_control); + String[] itemValues = activity.getResources().getStringArray(R.array.fuji_x_timer_control_value); + int index = 0; + for (String itemValue : itemValues) + { + int itemValueInt = Integer.parseInt(itemValue, 16); + if (itemValueInt == current) + { + return (items[index]); + } + index++; + } + } + catch (Exception e) + { + e.printStackTrace(); + } + return (selfTimer); + } + private void setEffectItem(String value) { try @@ -953,14 +1013,72 @@ class FujiXStatusHolder int index = 0; for (String item : items) { - Log.v(TAG, " ===== ISO : " + value + " " + item + " ===== "); + //Log.v(TAG, " ===== ISO : " + value + " " + item + " ===== "); if (item.matches(value)) { // 見つかった! この値を設定する String itemValue = itemValues[index]; int itemValueInt = (int) Long.parseLong(itemValue,16); logcat(" SET ISO SENSITIVITY : " + value + " " + itemValueInt); - publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyMessageReceiver(" Set ISO", true), IFujiXCameraProperties.ISO, 8, itemValueInt)); + publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyMessageReceiver(" Set ISO", true), IFujiXCameraProperties.ISO, 4, itemValueInt)); + return; + } + index++; + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + private void setCurrentFlashStatus(String value) + { + // ISO感度を設定する + try + { + String[] items = activity.getResources().getStringArray(R.array.fuji_x_flash_control); + String[] itemValues = activity.getResources().getStringArray(R.array.fuji_x_flash_control_value); + int index = 0; + for (String item : items) + { + Log.v(TAG, " ===== FLASH : " + value + " " + item + " ===== "); + if (item.matches(value)) + { + // 見つかった! この値を設定する + String itemValue = itemValues[index]; + int itemValueInt = (int) Long.parseLong(itemValue,16); + logcat(" SET FLASH : " + value + " " + itemValueInt); + publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyMessageReceiver(" Set FLASH", true), IFujiXCameraProperties.FLASH, 4, itemValueInt)); + return; + } + index++; + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + private void setSelfTimerStatus(String value) + { + // セルフタイマーを設定する + try + { + String[] items = activity.getResources().getStringArray(R.array.fuji_x_timer_control); + String[] itemValues = activity.getResources().getStringArray(R.array.fuji_x_timer_control_value); + int index = 0; + for (String item : items) + { + Log.v(TAG, " ===== SELF-TIMER : " + value + " " + item + " ===== "); + if (item.matches(value)) + { + // 見つかった! この値を設定する + String itemValue = itemValues[index]; + int itemValueInt = (int) Long.parseLong(itemValue,16); + logcat(" SET SELF-TIMER : " + value + " " + itemValueInt); + publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyMessageReceiver(" Set SELF-TIMER", true), IFujiXCameraProperties.SELF_TIMER, 4, itemValueInt)); return; } index++; @@ -986,6 +1104,14 @@ class FujiXStatusHolder { return (getCurrentIsoSensitivityStatus()); } + if (key.matches(ICameraStatus.FLASH_XV)) + { + return (getCurrentFlashStatus()); + } + if (key.matches(ICameraStatus.SELF_TIMER)) + { + return (getCurrentSelfTimerStatus()); + } if (key.matches(ICameraStatus.TAKE_MODE)) { return (""); @@ -1033,27 +1159,28 @@ class FujiXStatusHolder { try { - if (logcat) - { - Log.v(TAG, "setStatus(" + key + ", " + value + ")"); - } + logcat(" setStatus(" + key + ", " + value + ")"); if (key.matches(ICameraStatus.EFFECT)) { setEffectItem(value); - return; } - if (key.matches(ICameraStatus.WHITE_BALANCE)) + else if (key.matches(ICameraStatus.WHITE_BALANCE)) { setCurrentWhiteBalanceStatus(value); - return; } - if (key.matches(ICameraStatus.ISO_SENSITIVITY)) + else if (key.matches(ICameraStatus.ISO_SENSITIVITY)) { setCurrentIsoSensitivityStatus(value); - // return; } - - // ここで設定を行う。 + else if (key.matches(ICameraStatus.FLASH_XV)) + { + setCurrentFlashStatus(value); + } + else if (key.matches(ICameraStatus.SELF_TIMER)) + { + setSelfTimerStatus(value); + } + // その他の設定... } catch (Exception e) { @@ -1061,7 +1188,6 @@ class FujiXStatusHolder } } - private void dumpStatus() { try diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewControlPanelClickListener.java b/app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewControlPanelClickListener.java index 318de81..2e9e394 100644 --- a/app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewControlPanelClickListener.java +++ b/app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewControlPanelClickListener.java @@ -1,6 +1,5 @@ package net.osdn.gokigen.gr2control.liveview; -import android.app.Activity; import android.content.DialogInterface; import android.util.Log; import android.view.View; @@ -13,6 +12,7 @@ import java.util.List; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.FragmentActivity; /** * @@ -21,10 +21,10 @@ import androidx.appcompat.app.AlertDialog; class LiveViewControlPanelClickListener implements View.OnClickListener { private final String TAG = toString(); - private final Activity activity; + private final FragmentActivity activity; private final IInterfaceProvider interfaceProvider; - LiveViewControlPanelClickListener(Activity context, IInterfaceProvider interfaceProvider) + LiveViewControlPanelClickListener(FragmentActivity context, IInterfaceProvider interfaceProvider) { this.activity = context; this.interfaceProvider = interfaceProvider; diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFragment.java b/app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFragment.java index 07ac50c..f8aa972 100644 --- a/app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFragment.java +++ b/app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFragment.java @@ -226,7 +226,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo if (fujiXOnKeyPanelClickListener == null) { - fujiXOnKeyPanelClickListener = new LiveViewFujiXKeyPanelClickListener(interfaceProvider, vibrator); + fujiXOnKeyPanelClickListener = new LiveViewFujiXKeyPanelClickListener(getActivity(), interfaceProvider, vibrator); } setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_sv_minus); setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_sv_plus); @@ -234,6 +234,8 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_tv_plus); setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_xv_minus); setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_xv_plus); + setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_flash); + setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_timer); connectStatus = view.findViewById(R.id.connect_disconnect_button); if (connectStatus != null) 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 index db94f7a..5e699f5 100644 --- a/app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFujiXKeyPanelClickListener.java +++ b/app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFujiXKeyPanelClickListener.java @@ -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 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(); + } + } + + /** * ぶるぶるさせる * */ diff --git a/app/src/main/res/drawable/ic_flash_on_black_24dp.xml b/app/src/main/res/drawable/ic_flash_on_black_24dp.xml new file mode 100644 index 0000000..a3c81cc --- /dev/null +++ b/app/src/main/res/drawable/ic_flash_on_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout-land/fragment_live_view.xml b/app/src/main/res/layout-land/fragment_live_view.xml index ae969fb..c8f15f7 100644 --- a/app/src/main/res/layout-land/fragment_live_view.xml +++ b/app/src/main/res/layout-land/fragment_live_view.xml @@ -519,6 +519,51 @@ android:layout_marginStart="2pt" android:gravity="center" /> + + + + + + + + + + + + 64 + + AUTO + OFF + FILL + RedEye AUTO + RedEye FILL + External Sync + ON + RedEye + RedEye ON + RedEye Sync + RedEye Rear + Slow Sync + Rear Sync + Commander + DISABLE + ENABLE + + + + 1 + 2 + 3 + 4 + 5 + 6 + 8001 + 8002 + 8003 + 8004 + 8005 + 8006 + 8007 + 8008 + 8009 + 800A + + + + + OFF + 1 Sec. + 2 Sec. + 5 Sec. + 10 Sec. + + + + 0 + 1 + 2 + 3 + 4 + + diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 4ded025..15b8b22 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -212,4 +212,58 @@ 64 + + AUTO + OFF + FILL + RedEye AUTO + RedEye FILL + External Sync + ON + RedEye + RedEye ON + RedEye Sync + RedEye Rear + Slow Sync + Rear Sync + Commander + DISABLE + ENABLE + + + + 1 + 2 + 3 + 4 + 5 + 6 + 8001 + 8002 + 8003 + 8004 + 8005 + 8006 + 8007 + 8008 + 8009 + 800A + + + + OFF + 1 Sec. + 2 Sec. + 5 Sec. + 10 Sec. + + + + 0 + 1 + 2 + 3 + 4 + +