OSDN Git Service

FUJIFILM用画像詳細画面で、タイミングによってはスモールイメージを使用できるようにした。
[gokigen/Gr2Control.git] / app / src / main / java / net / osdn / gokigen / gr2control / camera / fuji_x / wrapper / FujiXRunMode.java
1 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper;
2
3 import android.util.Log;
4
5 import androidx.annotation.NonNull;
6
7 import net.osdn.gokigen.gr2control.camera.ICameraConnection;
8 import net.osdn.gokigen.gr2control.camera.ICameraRunMode;
9 import net.osdn.gokigen.gr2control.camera.ICameraRunModeCallback;
10 import net.osdn.gokigen.gr2control.camera.fuji_x.IFujiXInterfaceProvider;
11 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
12 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.connection.FujiXCameraModeChangeToLiveView;
13 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.connection.FujiXCameraModeChangeToPlayback;
14
15 public class FujiXRunMode implements ICameraRunMode, IFujiXRunModeHolder, IFujiXCommandCallback
16 {
17     private final String TAG = toString();
18     private final IFujiXInterfaceProvider interfaceProvider;
19     private final FujiXCameraModeChangeToLiveView toLiveViewCommand;
20     private final FujiXCameraModeChangeToPlayback toPlaybackCommand;
21     private final FujiXStatusChecker statusChecker;
22     private boolean isChanging = false;
23     private boolean isRecordingMode = true;
24     private boolean modeChangeIsPending = false;
25     private ICameraRunModeCallback runModeCallback = null;
26
27     FujiXRunMode(@NonNull IFujiXInterfaceProvider interfaceProvider, @NonNull FujiXStatusChecker statusChecker)
28     {
29         this.interfaceProvider = interfaceProvider;
30         this.statusChecker = statusChecker;
31         toLiveViewCommand = new FujiXCameraModeChangeToLiveView(interfaceProvider.getCommandPublisher(), this);
32         toPlaybackCommand = new FujiXCameraModeChangeToPlayback(interfaceProvider.getCommandPublisher(), this);
33     }
34
35     @Override
36     public void changeRunMode(boolean isRecording, @NonNull ICameraRunModeCallback callback)
37     {
38         // モードを切り替える
39         Log.v(TAG, " changeRunMode() : " + isRecording);
40
41         if (interfaceProvider.getCameraConnection().getConnectionStatus() != ICameraConnection.CameraConnectionStatus.CONNECTED)
42         {
43             Log.v(TAG, " ===== DOES NOT CONNECT TO CAMERA, SO CHANGE MODE IS PENDING...");
44             return;
45         }
46
47         this.runModeCallback = callback;
48         if (isRecording)
49         {
50             toLiveViewCommand.startModeChange(this);
51         }
52         else
53         {
54             toPlaybackCommand.startModeChange(this);
55         }
56     }
57
58     @Override
59     public boolean isRecordingMode()
60     {
61         Log.v(TAG, "isRecordingMode() : " + isRecordingMode + " (" + isChanging + ")");
62
63         if (isChanging)
64         {
65             // モード変更中の場合は、かならず false を応答する
66             return (false);
67         }
68         return (isRecordingMode);
69     }
70
71     @Override
72     public void transitToRecordingMode(boolean isFinished)
73     {
74         isChanging = !isFinished;
75         isRecordingMode = true;
76         if (isFinished)
77         {
78             runModeCallback.onCompleted(isRecordingMode);
79         }
80     }
81
82     @Override
83     public void transitToPlaybackMode(boolean isFinished)
84     {
85         isChanging = !isFinished;
86         isRecordingMode = false;
87         if (isFinished)
88         {
89             runModeCallback.onCompleted(isRecordingMode);
90         }
91     }
92
93     @Override
94     public int getStartLiveViewSequenceNumber()
95     {
96         return (toLiveViewCommand.getChangedSequenceNumber());
97     }
98
99     @Override
100     public void receivedMessage(int id, byte[] rx_body)
101     {
102         Log.v(TAG, " FujiXRunMode::receivedMessage() " + id);
103         statusChecker.receivedMessage(id, rx_body);
104     }
105
106     @Override
107     public void onReceiveProgress(int currentBytes, int totalBytes, byte[] rx_body)
108     {
109         Log.v(TAG, " onReceiveProgress() ");
110     }
111
112     @Override
113     public boolean isReceiveMulti()
114     {
115         return (false);
116     }
117 }