1 package net.osdn.gokigen.gr2control.liveview;
3 import android.content.DialogInterface;
4 import android.os.Vibrator;
5 import android.util.Log;
6 import android.view.View;
8 import androidx.annotation.NonNull;
9 import androidx.annotation.Nullable;
10 import androidx.appcompat.app.AlertDialog;
11 import androidx.fragment.app.FragmentActivity;
13 import net.osdn.gokigen.gr2control.R;
14 import net.osdn.gokigen.gr2control.camera.ICameraStatus;
15 import net.osdn.gokigen.gr2control.camera.IInterfaceProvider;
16 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
17 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandPublisher;
18 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.CommandGeneric;
19 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.IFujiXCameraCommands;
20 import net.osdn.gokigen.gr2control.camera.utils.SimpleLogDumper;
22 import java.util.List;
24 public class LiveViewFujiXKeyPanelClickListener implements View.OnClickListener, View.OnLongClickListener, IFujiXCommandCallback
26 private final String TAG = toString();
27 private final FragmentActivity activity;
28 private static final boolean isDumpLog = false;
29 private final IInterfaceProvider interfaceProvider;
30 private final Vibrator vibrator;
32 LiveViewFujiXKeyPanelClickListener(@NonNull FragmentActivity activity, @NonNull IInterfaceProvider interfaceProvider, @Nullable Vibrator vibrator)
34 this.activity = activity;
35 this.interfaceProvider = interfaceProvider;
36 this.vibrator = vibrator;
40 public void onClick(View v)
42 boolean isVibrate = true;
48 case R.id.button_fuji_x_sv_minus:
49 updateValue(IFujiXCameraCommands.SHUTTER_SPEED, 0);
51 case R.id.button_fuji_x_sv_plus:
52 updateValue(IFujiXCameraCommands.SHUTTER_SPEED, 1);
54 case R.id.button_fuji_x_tv_minus:
55 updateValue(IFujiXCameraCommands.APERTURE, 0);
57 case R.id.button_fuji_x_tv_plus:
58 updateValue(IFujiXCameraCommands.APERTURE, 1);
60 case R.id.button_fuji_x_xv_minus:
61 updateValue(IFujiXCameraCommands.EXPREV, 0);
63 case R.id.button_fuji_x_flash:
64 updateSelection(ICameraStatus.FLASH_XV);
67 case R.id.button_fuji_x_timer:
68 updateSelection(ICameraStatus.SELF_TIMER);
85 public boolean onLongClick(View v)
87 boolean isVibrate = false;
94 case R.id.button_fuji_x_sv_minus:
96 case R.id.button_fuji_x_sv_plus:
98 case R.id.button_fuji_x_tv_minus:
100 case R.id.button_fuji_x_tv_plus:
102 case R.id.button_fuji_x_xv_minus:
104 case R.id.button_fuji_x_xv_plus:
106 case R.id.button_fuji_x_flash:
108 case R.id.button_fuji_x_timer:
126 private void updateValue(int id, int value)
130 IFujiXCommandPublisher publisher = interfaceProvider.getFujiXInterfaceProvider().getCommandPublisher();
131 publisher.enqueueCommand(new CommandGeneric(this, id, 4, value));
143 private void updateSelection(@NonNull final String key)
147 Log.v(TAG, "updateSelection() : " + key);
148 final ICameraStatus statusList = interfaceProvider.getCameraStatusListHolder();
149 if (statusList == null)
151 // ステータスリストの保持クラスが取れなかった...
152 Log.w(TAG, "ICameraStatus is NULL...");
155 final String current = statusList.getStatus(key);
156 final List<String> itemList = statusList.getStatusList(key);
157 if (itemList.size() <= 0)
159 // アイテム(選択肢)が登録されていなければ、何もしない
163 AlertDialog.Builder builder = new AlertDialog.Builder(activity);
166 String[] items = new String[itemList.size()];
168 for (String item : itemList)
170 Log.v(TAG, " (" + index + ") " + item);
174 int position = itemList.indexOf(current);
175 Log.v(TAG, " updateSelection() : " + key + " " + itemList.size() + " " + position);
176 builder.setSingleChoiceItems(items, position, new DialogInterface.OnClickListener() {
178 public void onClick(DialogInterface dialogInterface, int i)
180 String choice = itemList.get(i);
181 Log.v(TAG, key + " ITEM CHOICED : " + choice + "(CURRENT : " + current + ")");
183 statusList.setStatus(key, choice);
184 dialogInterface.dismiss();
199 private void vibrate(boolean isVibrate)
201 if ((vibrator != null)&&(isVibrate))
203 vibrator.vibrate(30);
208 public void receivedMessage(int id, byte[] rx_body)
212 SimpleLogDumper.dump_bytes("" + id, rx_body);
217 public void onReceiveProgress(int currentBytes, int totalBytes, byte[] rx_body)
219 Log.v(TAG, " onReceiveProgress() : " + currentBytes + "/" + totalBytes);
223 public boolean isReceiveMulti()