1 package net.osdn.gokigen.a01d.camera.kodak.wrapper.connection;
3 import android.app.Activity;
4 import android.content.SharedPreferences;
5 import android.graphics.Color;
6 import android.util.Log;
8 import androidx.annotation.NonNull;
9 import androidx.preference.PreferenceManager;
11 import net.osdn.gokigen.a01d.R;
12 import net.osdn.gokigen.a01d.camera.ICameraConnection;
13 import net.osdn.gokigen.a01d.camera.ICameraStatusReceiver;
14 import net.osdn.gokigen.a01d.camera.kodak.IKodakInterfaceProvider;
15 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.IKodakCommandCallback;
16 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.IKodakCommandPublisher;
17 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.IKodakMessages;
18 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.connection.KodakConnectSequence01;
19 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.connection.KodakConnectSequence02;
20 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.connection.KodakConnectSequence03;
21 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.connection.KodakConnectSequence04;
22 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.connection.KodakConnectSequence05;
23 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.connection.KodakConnectSequence06;
24 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.connection.KodakConnectSequence07;
25 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.connection.KodakConnectSequence08;
26 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.connection.KodakConnectSequence09;
27 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.connection.KodakConnectSequence10;
28 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.connection.KodakConnectSequence11;
29 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.specific.KodakFlashAuto;
30 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.specific.KodakFlashOff;
31 import net.osdn.gokigen.a01d.camera.kodak.wrapper.command.messages.specific.KodakFlashOn;
32 import net.osdn.gokigen.a01d.camera.kodak.wrapper.status.KodakStatusChecker;
34 import static net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.KODAK_FLASH_MODE;
35 import static net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.KODAK_FLASH_MODE_DEFAULT_VALUE;
37 public class KodakCameraConnectSequence implements Runnable, IKodakCommandCallback, IKodakMessages
39 private final String TAG = this.toString();
41 private final Activity context;
42 private final ICameraConnection cameraConnection;
43 private final ICameraStatusReceiver cameraStatusReceiver;
44 private final IKodakInterfaceProvider interfaceProvider;
45 private final IKodakCommandPublisher commandIssuer;
46 private final KodakStatusChecker statusChecker;
48 private String flashMode = "OFF";
50 KodakCameraConnectSequence(@NonNull Activity context, @NonNull ICameraStatusReceiver statusReceiver, @NonNull final ICameraConnection cameraConnection, @NonNull IKodakInterfaceProvider interfaceProvider, @NonNull KodakStatusChecker statusChecker)
52 Log.v(TAG, " KodakCameraConnectSequence");
53 this.context = context;
54 this.cameraConnection = cameraConnection;
55 this.cameraStatusReceiver = statusReceiver;
56 this.interfaceProvider = interfaceProvider;
57 this.commandIssuer = interfaceProvider.getCommandPublisher();
58 this.statusChecker = statusChecker;
66 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
67 if (preferences != null)
69 flashMode = preferences.getString(KODAK_FLASH_MODE, KODAK_FLASH_MODE_DEFAULT_VALUE);
81 IKodakCommandPublisher issuer = interfaceProvider.getCommandPublisher();
82 if (!issuer.isConnected())
84 if (!interfaceProvider.getCommandCommunication().connect())
87 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.dialog_title_connect_failed_kodak), false, true, Color.RED);
88 onConnectError(context.getString(R.string.dialog_title_connect_failed_kodak));
94 Log.v(TAG, "SOCKET IS ALREADY CONNECTED...");
100 startConnectSequence();
106 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.dialog_title_connect_failed_kodak), false, true, Color.RED);
107 onConnectError(e.getLocalizedMessage());
111 private void onConnectError(String reason)
113 cameraConnection.alertConnectingFailed(reason);
117 public void receivedMessage(int id, byte[] rx_body)
122 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.kodak_connect_connecting1), false, false, 0);
123 commandIssuer.enqueueCommand(new KodakConnectSequence02(this));
127 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.kodak_connect_connecting2), false, false, 0);
128 commandIssuer.enqueueCommand(new KodakConnectSequence03(this));
132 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.kodak_connect_connecting3), false, false, 0);
133 commandIssuer.enqueueCommand(new KodakConnectSequence04(this));
136 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.kodak_connect_connecting4), false, false, 0);
137 commandIssuer.enqueueCommand(new KodakConnectSequence05(this));
140 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.kodak_connect_connecting5), false, false, 0);
141 commandIssuer.enqueueCommand(new KodakConnectSequence06(this));
144 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.kodak_connect_connecting6), false, false, 0);
145 commandIssuer.enqueueCommand(new KodakConnectSequence07(this));
148 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.kodak_connect_connecting7), false, false, 0);
149 commandIssuer.enqueueCommand(new KodakConnectSequence08(this));
152 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.kodak_connect_connecting8), false, false, 0);
153 commandIssuer.enqueueCommand(new KodakConnectSequence09(this));
156 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.kodak_connect_connecting9), false, false, 0);
157 commandIssuer.enqueueCommand(new KodakConnectSequence10(this));
160 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.kodak_connect_connecting10), false, false, 0);
161 commandIssuer.enqueueCommand(new KodakConnectSequence11(this));
164 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.kodak_connect_connecting11), false, false, 0);
165 if (flashMode.contains("AUTO"))
167 commandIssuer.enqueueCommand(new KodakFlashAuto(this));
169 else if (flashMode.contains("ON"))
171 commandIssuer.enqueueCommand(new KodakFlashOn(this));
175 commandIssuer.enqueueCommand(new KodakFlashOff(this));
181 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.connect_connect_finished), false, false, 0);
183 Log.v(TAG, " CONNECT TO CAMERA : DONE.");
186 Log.v(TAG, " RECEIVED UNKNOWN ID : " + id);
187 onConnectError(context.getString(R.string.connect_receive_unknown_message));
192 private void startConnectSequence()
194 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.connect_start), false, false, 0);
195 cameraStatusReceiver.onStatusNotify(context.getString(R.string.connect_start));
196 commandIssuer.enqueueCommand(new KodakConnectSequence01(this));
199 private void connectFinished()
204 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.connect_connected), false, false, 0);
209 //interfaceProvider.getAsyncEventCommunication().connect();
210 //interfaceProvider.getCameraStatusWatcher().startStatusWatch(interfaceProvider.getStatusListener()); ステータスの定期確認は実施しない
213 interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.connect_connected), false, false, 0);
223 private void onConnectNotify()
227 final Thread thread = new Thread(new Runnable()
233 cameraStatusReceiver.onStatusNotify(context.getString(R.string.connect_connected));
234 cameraStatusReceiver.onCameraConnected();
235 Log.v(TAG, " onConnectNotify()");