1 package net.osdn.gokigen.pkremote.camera.vendor.nikon.wrapper.playback;
3 import android.app.Activity;
4 import android.content.SharedPreferences;
5 import android.graphics.Color;
6 import android.util.Log;
8 import androidx.preference.PreferenceManager;
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;
34 public class NikonPlaybackControl implements IPlaybackControl
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;
45 public NikonPlaybackControl(Activity activity, NikonInterfaceProvider provider)
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);
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);
66 public String getRawFileSuffix()
72 public void downloadContentList(IDownloadContentListCallback callback)
78 public void getContentInfo(String path, String name, IContentInfoCallback callback)
80 // showFileInformation
85 public void updateCameraFileInfo(ICameraFileInfo info)
91 public void downloadContentScreennail(String path, IDownloadThumbnailImageCallback callback)
93 Log.v(TAG, " downloadContentScreennail() " + path);
95 if (!use_screennail_image)
97 // Thumbnail と同じ画像を表示する
98 downloadContentThumbnail(path, callback);
105 if (path.indexOf("/") == 0)
109 final String indexStr = path.substring(start);
110 PtpIpImageContentInfo content = nikonImageObjectReceiver.getContentObject(indexStr);
113 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
114 //int storageId = content.getStorageId();
115 int objectId = content.getId();
117 // 画像表示中...のメッセージを表示する
118 IInformationReceiver display = provider.getInformationReceiver();
121 String message = activity.getString(R.string.canon_get_image_screennail);
122 display.updateMessage(message, false, true, Color.LTGRAY);
126 PtpIpScreennailImageReceiver receiver = new PtpIpScreennailImageReceiver(activity, objectId, publisher, callback);
127 publisher.enqueueCommand(new CanonRequestInnerDevelopStart(receiver, objectId, true, objectId, objectId)); // 0x9141 : RequestInnerDevelopStart
137 public void downloadContentThumbnail(String path, final IDownloadThumbnailImageCallback callback)
142 if (path.indexOf("/") == 0)
146 //String indexStr = path.substring(start, path.indexOf("."));
147 final String indexStr = path.substring(start);
148 //Log.v(TAG, "downloadContentThumbnail() : [" + path + "] " + indexStr);
150 PtpIpImageContentInfo content = nikonImageObjectReceiver.getContentObject(indexStr);
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));
167 public void downloadContent(String path, boolean isSmallSize, IDownloadContentCallback callback)
172 if (path.indexOf("/") == 0)
176 final String indexStr = path.substring(start);
177 PtpIpImageContentInfo content = nikonImageObjectReceiver.getContentObject(indexStr);
182 // スモールサイズの画像取得コマンド(シーケンス)を発行する
183 smallImageReciever.issueCommand(content.getId(), callback);
187 // オリジナル画像の取得コマンド(シーケンス)を発行する
188 fullImageReceiver.issueCommand(content.getId(), content.getOriginalSize(), callback);
199 public void getCameraContentList(final ICameraContentListCallback callback)
201 if (callback == null)
208 Thread thread = new Thread(new Runnable() {
211 nikonImageObjectReceiver.getCameraContents(callback);
219 callback.onErrorOccurred(e);
224 public void showPictureStarted()
228 Log.v(TAG, " showPictureStarted() ");
230 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
231 publisher.flushHoldQueue();
241 public void showPictureFinished()
245 Log.v(TAG, " showPictureFinished() ");
247 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
248 publisher.flushHoldQueue();