1 package net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.playback;
3 import android.app.Activity;
4 import android.content.SharedPreferences;
5 import android.util.Log;
7 import androidx.preference.PreferenceManager;
9 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraContentListCallback;
10 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraFileInfo;
11 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IContentInfoCallback;
12 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadContentCallback;
13 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadContentListCallback;
14 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadThumbnailImageCallback;
15 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IPlaybackControl;
16 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.PtpIpInterfaceProvider;
17 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.command.IPtpIpCommandPublisher;
18 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.command.messages.PtpIpCommandGeneric;
19 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.command.messages.specific.CanonRequestInnerDevelopStart;
20 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor;
26 public class PtpIpPlaybackControl implements IPlaybackControl
28 private final String TAG = toString();
29 private final Activity activity;
30 private final PtpIpInterfaceProvider provider;
31 private final PtpIpFullImageReceiver fullImageReceiver;
32 private final PtpIpSmallImageReceiver smallImageReciever;
33 private String raw_suffix = "CR2";
34 private boolean use_screennail_image = false;
35 private CanonImageObjectReceiver canonImageObjectReceiver;
37 public PtpIpPlaybackControl(Activity activity, PtpIpInterfaceProvider provider)
39 this.activity = activity;
40 this.provider = provider;
41 this.fullImageReceiver = new PtpIpFullImageReceiver(activity, provider.getCommandPublisher());
42 this.smallImageReciever = new PtpIpSmallImageReceiver(activity, provider.getCommandPublisher());
43 canonImageObjectReceiver = new CanonImageObjectReceiver(provider);
47 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
48 raw_suffix = preferences.getString(IPreferencePropertyAccessor.CANON_RAW_SUFFIX, IPreferencePropertyAccessor.CANON_RAW_SUFFIX_DEFAULT_VALUE);
49 use_screennail_image = preferences.getBoolean(IPreferencePropertyAccessor.CANON_USE_SCREENNAIL_AS_SMALL, false);
58 public String getRawFileSuffix()
64 public void downloadContentList(IDownloadContentListCallback callback)
70 public void getContentInfo(String path, String name, IContentInfoCallback callback)
72 // showFileInformation
77 public void updateCameraFileInfo(ICameraFileInfo info)
83 public void downloadContentScreennail(String path, IDownloadThumbnailImageCallback callback)
85 Log.v(TAG, " downloadContentScreennail() " + path);
87 if (!use_screennail_image)
89 // Thumbnail と同じ画像を表示する
90 downloadContentThumbnail(path, callback);
97 if (path.indexOf("/") == 0)
101 final String indexStr = path.substring(start);
102 PtpIpImageContentInfo content = canonImageObjectReceiver.getContentObject(indexStr);
105 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
106 //int storageId = content.getStorageId();
107 int objectId = content.getId();
108 // Log.v(TAG, "downloadContentThumbnail() " + indexStr + " [" + objectId + "] (" + storageId + ")");
111 PtpIpScreennailImageReceiver receiver = new PtpIpScreennailImageReceiver(activity, objectId, publisher, callback);
112 publisher.enqueueCommand(new CanonRequestInnerDevelopStart(receiver, objectId, true, objectId, objectId)); // 0x9141 : RequestInnerDevelopStart
122 public void downloadContentThumbnail(String path, final IDownloadThumbnailImageCallback callback)
127 if (path.indexOf("/") == 0)
131 //String indexStr = path.substring(start, path.indexOf("."));
132 final String indexStr = path.substring(start);
133 //Log.v(TAG, "downloadContentThumbnail() : [" + path + "] " + indexStr);
135 PtpIpImageContentInfo content = canonImageObjectReceiver.getContentObject(indexStr);
138 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
139 //int storageId = content.getStorageId();
140 int objectId = content.getId();
141 // Log.v(TAG, "downloadContentThumbnail() " + indexStr + " [" + objectId + "] (" + storageId + ")");
142 publisher.enqueueCommand(new PtpIpCommandGeneric(new PtpIpThumbnailImageReceiver(activity, callback), objectId, false, 0, 0x910a, 8, objectId, 0x00032000));
152 public void downloadContent(String path, boolean isSmallSize, IDownloadContentCallback callback)
157 if (path.indexOf("/") == 0)
161 final String indexStr = path.substring(start);
162 PtpIpImageContentInfo content = canonImageObjectReceiver.getContentObject(indexStr);
167 // スモールサイズの画像取得コマンド(シーケンス)を発行する
168 smallImageReciever.issueCommand(content.getId(), callback);
172 // オリジナル画像の取得コマンド(シーケンス)を発行する
173 fullImageReceiver.issueCommand(content.getId(), content.getOriginalSize(), callback);
184 public void getCameraContentList(final ICameraContentListCallback callback)
186 if (callback == null)
193 Thread thread = new Thread(new Runnable() {
196 canonImageObjectReceiver.getCameraContents(callback);
204 callback.onErrorOccurred(e);
209 public void showPictureStarted()
213 Log.v(TAG, " showPictureStarted() ");
215 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
216 publisher.flushHoldQueue();
226 public void showPictureFinished()
230 Log.v(TAG, " showPictureFinished() ");
232 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
233 publisher.flushHoldQueue();