OSDN Git Service

Wifi設定をPreferenceから出せるようにした。Nikonの接続シーケンスまで確認。
[gokigen/PKRemote.git] / app / src / main / java / net / osdn / gokigen / pkremote / camera / vendor / nikon / wrapper / playback / NikonPlaybackControl.java
1 package net.osdn.gokigen.pkremote.camera.vendor.nikon.wrapper.playback;
2
3 import android.app.Activity;
4 import android.content.SharedPreferences;
5 import android.graphics.Color;
6 import android.util.Log;
7
8 import androidx.preference.PreferenceManager;
9
10 import net.osdn.gokigen.pkremote.IInformationReceiver;
11 import net.osdn.gokigen.pkremote.R;
12 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraContentListCallback;
13 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraFileInfo;
14 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IContentInfoCallback;
15 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadContentCallback;
16 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadContentListCallback;
17 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadThumbnailImageCallback;
18 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IPlaybackControl;
19 import net.osdn.gokigen.pkremote.camera.vendor.nikon.wrapper.NikonInterfaceProvider;
20 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.command.IPtpIpCommandPublisher;
21 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.command.messages.PtpIpCommandGeneric;
22 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.command.messages.specific.CanonRequestInnerDevelopStart;
23 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.playback.PtpIpFullImageReceiver;
24 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.playback.PtpIpImageContentInfo;
25 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.playback.PtpIpScreennailImageReceiver;
26 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.playback.PtpIpSmallImageReceiver;
27 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.playback.PtpIpThumbnailImageReceiver;
28 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor;
29
30 /**
31  *
32  *
33  */
34 public class NikonPlaybackControl implements IPlaybackControl
35 {
36     private final String TAG = toString();
37     private final Activity activity;
38     private final NikonInterfaceProvider provider;
39     private final PtpIpFullImageReceiver fullImageReceiver;
40     private final PtpIpSmallImageReceiver smallImageReciever;
41     private String raw_suffix = "NEF";
42     private boolean use_screennail_image = false;
43     private NikonImageObjectReceiver nikonImageObjectReceiver;
44
45     public NikonPlaybackControl(Activity activity, NikonInterfaceProvider provider)
46     {
47         this.activity = activity;
48         this.provider = provider;
49         this.fullImageReceiver = new PtpIpFullImageReceiver(activity, provider.getCommandPublisher());
50         this.smallImageReciever = new PtpIpSmallImageReceiver(activity, provider.getCommandPublisher());
51         nikonImageObjectReceiver = new NikonImageObjectReceiver(provider);
52
53         try
54         {
55             SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
56             raw_suffix = preferences.getString(IPreferencePropertyAccessor.CANON_RAW_SUFFIX, IPreferencePropertyAccessor.CANON_RAW_SUFFIX_DEFAULT_VALUE);
57             use_screennail_image = preferences.getBoolean(IPreferencePropertyAccessor.CANON_USE_SCREENNAIL_AS_SMALL, false);
58         }
59         catch (Exception e)
60         {
61             e.printStackTrace();
62         }
63     }
64
65     @Override
66     public String getRawFileSuffix()
67     {
68         return (raw_suffix);
69     }
70
71     @Override
72     public void downloadContentList(IDownloadContentListCallback callback)
73     {
74         // なにもしない。(未使用)
75     }
76
77     @Override
78     public void getContentInfo(String path, String name, IContentInfoCallback callback)
79     {
80         // showFileInformation
81
82     }
83
84     @Override
85     public void updateCameraFileInfo(ICameraFileInfo info)
86     {
87         //  なにもしない
88     }
89
90     @Override
91     public void downloadContentScreennail(String path, IDownloadThumbnailImageCallback callback)
92     {
93         Log.v(TAG, " downloadContentScreennail() " + path);
94
95         if (!use_screennail_image)
96         {
97             // Thumbnail と同じ画像を表示する
98             downloadContentThumbnail(path, callback);
99             return;
100         }
101
102         try
103         {
104             int start = 0;
105             if (path.indexOf("/") == 0)
106             {
107                 start = 1;
108             }
109             final String indexStr = path.substring(start);
110             PtpIpImageContentInfo content = nikonImageObjectReceiver.getContentObject(indexStr);
111             if (content != null)
112             {
113                 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
114                 //int storageId = content.getStorageId();
115                 int objectId = content.getId();
116
117                 // 画像表示中...のメッセージを表示する
118                 IInformationReceiver display = provider.getInformationReceiver();
119                 if (display != null)
120                 {
121                     String message = activity.getString(R.string.canon_get_image_screennail);
122                     display.updateMessage(message, false, true, Color.LTGRAY);
123                 }
124
125                 // 画像を取得する
126                 PtpIpScreennailImageReceiver receiver = new PtpIpScreennailImageReceiver(activity, objectId, publisher, callback);
127                 publisher.enqueueCommand(new CanonRequestInnerDevelopStart(receiver, objectId, true, objectId, objectId));   // 0x9141 : RequestInnerDevelopStart
128             }
129         }
130         catch (Exception e)
131         {
132             e.printStackTrace();
133         }
134     }
135
136     @Override
137     public void downloadContentThumbnail(String path, final IDownloadThumbnailImageCallback callback)
138     {
139         try
140         {
141             int start = 0;
142             if (path.indexOf("/") == 0)
143             {
144                 start = 1;
145             }
146             //String indexStr = path.substring(start, path.indexOf("."));
147             final String indexStr = path.substring(start);
148             //Log.v(TAG, "downloadContentThumbnail() : [" + path + "] " + indexStr);
149
150             PtpIpImageContentInfo content = nikonImageObjectReceiver.getContentObject(indexStr);
151             if (content != null)
152             {
153                 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
154                 //int storageId = content.getStorageId();
155                 int objectId = content.getId();
156                 // Log.v(TAG, "downloadContentThumbnail() " + indexStr + " [" + objectId + "] (" + storageId + ")");
157                 publisher.enqueueCommand(new PtpIpCommandGeneric(new PtpIpThumbnailImageReceiver(activity, callback), objectId, false, 0, 0x910a, 8, objectId, 0x00032000));
158             }
159         }
160         catch (Exception e)
161         {
162             e.printStackTrace();
163         }
164     }
165
166     @Override
167     public void downloadContent(String path, boolean isSmallSize, IDownloadContentCallback callback)
168     {
169         try
170         {
171             int start = 0;
172             if (path.indexOf("/") == 0)
173             {
174                 start = 1;
175             }
176             final String indexStr = path.substring(start);
177             PtpIpImageContentInfo content = nikonImageObjectReceiver.getContentObject(indexStr);
178             if (content != null)
179             {
180                 if (isSmallSize)
181                 {
182                     // スモールサイズの画像取得コマンド(シーケンス)を発行する
183                     smallImageReciever.issueCommand(content.getId(), callback);
184                 }
185                 else
186                 {
187                     // オリジナル画像の取得コマンド(シーケンス)を発行する
188                     fullImageReceiver.issueCommand(content.getId(), content.getOriginalSize(), callback);
189                 }
190             }
191         }
192         catch (Throwable e)
193         {
194             e.printStackTrace();
195         }
196     }
197
198     @Override
199     public void getCameraContentList(final ICameraContentListCallback callback)
200     {
201         if (callback == null)
202         {
203             return;
204         }
205
206         try
207         {
208             Thread thread = new Thread(new Runnable() {
209                 @Override
210                 public void run() {
211                     nikonImageObjectReceiver.getCameraContents(callback);
212                 }
213             });
214             thread.start();
215         }
216         catch (Exception e)
217         {
218             e.printStackTrace();
219             callback.onErrorOccurred(e);
220         }
221     }
222
223     @Override
224     public void showPictureStarted()
225     {
226         try
227         {
228             Log.v(TAG, "   showPictureStarted() ");
229
230             IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
231             publisher.flushHoldQueue();
232             System.gc();
233         }
234         catch (Exception e)
235         {
236             e.printStackTrace();
237         }
238     }
239
240     @Override
241     public void showPictureFinished()
242     {
243         try
244         {
245             Log.v(TAG, "   showPictureFinished() ");
246
247             IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
248             publisher.flushHoldQueue();
249             System.gc();
250         }
251         catch (Exception e)
252         {
253             e.printStackTrace();
254         }
255     }
256
257 }