OSDN Git Service

SONYカメラのライブビュー機能を追加。
[gokigen/A01d.git] / app / src / main / java / net / osdn / gokigen / a01d / camera / sony / wrapper / connection / SonyCameraConnectSequence.java
1 package net.osdn.gokigen.a01d.camera.sony.wrapper.connection;
2
3 import android.app.Activity;
4 import android.content.Context;
5 import android.support.annotation.NonNull;
6 import android.util.Log;
7
8 import net.osdn.gokigen.a01d.R;
9 import net.osdn.gokigen.a01d.camera.ICameraConnection;
10 import net.osdn.gokigen.a01d.camera.ICameraStatusReceiver;
11 import net.osdn.gokigen.a01d.camera.sony.wrapper.ISonyCamera;
12 import net.osdn.gokigen.a01d.camera.sony.wrapper.ISonyCameraHolder;
13 import net.osdn.gokigen.a01d.camera.sony.wrapper.eventlistener.CameraChangeListerTemplate;
14
15
16 /**
17  *   SONYカメラとの接続処理
18  *
19  */
20 public class SonyCameraConnectSequence implements Runnable, SonySsdpClient.ISearchResultCallback
21 {
22     private final String TAG = this.toString();
23     private final Activity context;
24     private final ICameraConnection cameraConnection;
25     private final ISonyCameraHolder cameraHolder;
26     private final ICameraStatusReceiver cameraStatusReceiver;
27     private final SonySsdpClient client;
28
29     SonyCameraConnectSequence(Activity context, ICameraStatusReceiver statusReceiver, final ICameraConnection cameraConnection, final @NonNull ISonyCameraHolder cameraHolder)
30     {
31         Log.v(TAG, "SonyCameraConnectSequence");
32         this.context = context;
33         this.cameraConnection = cameraConnection;
34         this.cameraStatusReceiver = statusReceiver;
35         this.cameraHolder = cameraHolder;
36         client = new SonySsdpClient(context, this, statusReceiver, -1);
37     }
38
39     @Override
40     public void run()
41     {
42         Log.v(TAG, "search()");
43         try
44         {
45             cameraStatusReceiver.onStatusNotify(context.getString(R.string.connect_start));
46             client.search();
47         }
48         catch (Exception e)
49         {
50             e.printStackTrace();
51         }
52     }
53
54     @Override
55     public void onDeviceFound(ISonyCamera cameraDevice)
56     {
57         try
58         {
59             cameraStatusReceiver.onStatusNotify(context.getString(R.string.camera_detected) + " " + cameraDevice.getFriendlyName());
60             cameraHolder.detectedCamera(cameraDevice);
61         }
62         catch (Exception e)
63         {
64             e.printStackTrace();
65         }
66     }
67
68     @Override
69     public void onFinished()
70     {
71         Log.v(TAG, "SonyCameraConnectSequence.onFinished()");
72         try
73         {
74             Thread thread = new Thread(new Runnable()
75             {
76                 @Override
77                 public void run()
78                 {
79                     try
80                     {
81                         cameraHolder.prepare();
82                         cameraHolder.startEventWatch(new CameraChangeListerTemplate());
83                     }
84                     catch (Exception e)
85                     {
86                         e.printStackTrace();
87                     }
88                     Log.v(TAG, "CameraConnectSequence:: connected.");
89                     onConnectNotify();
90                 }
91             });
92             thread.start();
93         }
94         catch (Exception e)
95         {
96             e.printStackTrace();
97         }
98     }
99
100     private void onConnectNotify()
101     {
102         try
103         {
104             final Thread thread = new Thread(new Runnable()
105             {
106                 @Override
107                 public void run()
108                 {
109                     // カメラとの接続確立を通知する
110                     cameraStatusReceiver.onStatusNotify(context.getString(R.string.connect_connected));
111                     cameraStatusReceiver.onCameraConnected();
112                     Log.v(TAG, "onConnectNotify()");
113                 }
114             });
115             thread.start();
116         }
117         catch (Exception e)
118         {
119             e.printStackTrace();
120         }
121     }
122
123     private void waitForAMoment(long mills)
124     {
125         if (mills > 0)
126         {
127             try {
128                 Log.v(TAG, " WAIT " + mills + "ms");
129                 Thread.sleep(mills);
130             } catch (Exception e) {
131                 e.printStackTrace();
132             }
133         }
134     }
135
136
137     @Override
138     public void onErrorFinished(String reason)
139     {
140         cameraConnection.alertConnectingFailed(reason);
141     }
142
143 }