1 package net.osdn.gokigen.pkremote.camera.vendor.ptpip.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.ptpip.wrapper.PtpIpInterfaceProvider;
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.preference.IPreferencePropertyAccessor;
29 public class CanonPlaybackControl implements IPlaybackControl
31 private final String TAG = toString();
32 private final Activity activity;
33 private final PtpIpInterfaceProvider provider;
34 private final CanonFullImageReceiver fullImageReceiver;
35 private final ICanonSmallImageReceiver smallImageReciever;
36 private String raw_suffix = "CR2";
37 private boolean useScreennailImage = false;
38 private final CanonImageObjectReceiver canonImageObjectReceiver;
40 public CanonPlaybackControl(Activity activity, PtpIpInterfaceProvider provider)
42 int smallImageSequence = 0;
46 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
47 raw_suffix = preferences.getString(IPreferencePropertyAccessor.CANON_RAW_SUFFIX, IPreferencePropertyAccessor.CANON_RAW_SUFFIX_DEFAULT_VALUE);
48 useScreennailImage = preferences.getBoolean(IPreferencePropertyAccessor.CANON_USE_SCREENNAIL_AS_SMALL, false);
51 delayMs = Integer.parseInt(preferences.getString(IPreferencePropertyAccessor.CANON_RECEIVE_WAIT, IPreferencePropertyAccessor.CANON_RECEIVE_WAIT_DEFAULT_VALUE));
59 delayMs = 10; // 最短は 10msにする
63 smallImageSequence = Integer.parseInt(preferences.getString(IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE, IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE_DEFAULT_VALUE));
74 this.activity = activity;
75 this.provider = provider;
76 this.fullImageReceiver = new CanonFullImageReceiver(activity, provider.getCommandPublisher());
77 if (smallImageSequence == 2)
79 this.smallImageReciever = new CanonReducedImageReceiver(activity, provider.getCommandPublisher(), smallImageSequence);
83 this.smallImageReciever = new CanonSmallImageReceiver(activity, provider.getCommandPublisher(), smallImageSequence);
85 canonImageObjectReceiver = new CanonImageObjectReceiver(provider, delayMs);
89 public String getRawFileSuffix()
95 public void downloadContentList(IDownloadContentListCallback callback)
101 public void getContentInfo(String path, String name, IContentInfoCallback callback)
103 // showFileInformation
108 public void updateCameraFileInfo(ICameraFileInfo info)
114 public void downloadContentScreennail(String path, IDownloadThumbnailImageCallback callback)
116 Log.v(TAG, " downloadContentScreennail() " + path);
118 if (!useScreennailImage)
120 // Thumbnail と同じ画像を表示する
121 downloadContentThumbnail(path, callback);
128 if (path.indexOf("/") == 0)
132 final String indexStr = path.substring(start);
133 CanonImageContentInfo content = canonImageObjectReceiver.getContentObject(indexStr);
136 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
137 //int storageId = content.getStorageId();
138 int objectId = content.getId();
140 // 画像表示中...のメッセージを表示する
141 IInformationReceiver display = provider.getInformationReceiver();
144 String message = activity.getString(R.string.canon_get_image_screennail);
145 display.updateMessage(message, false, true, Color.LTGRAY);
149 CanonScreennailImageReceiver receiver = new CanonScreennailImageReceiver(activity, objectId, publisher, callback);
150 publisher.enqueueCommand(new CanonRequestInnerDevelopStart(receiver, objectId, true, objectId, objectId, 0x0f, 0x02)); // 0x9141 : RequestInnerDevelopStart
160 public void downloadContentThumbnail(String path, final IDownloadThumbnailImageCallback callback)
165 if (path.indexOf("/") == 0)
170 final String indexStr = path.substring(start);
171 CanonImageContentInfo content = canonImageObjectReceiver.getContentObject(indexStr);
174 int objectId = content.getId();
175 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
176 publisher.enqueueCommand(new PtpIpCommandGeneric(new PtpIpThumbnailImageReceiver(activity, callback), objectId, false, 0, 0x910a, 8, objectId, 0x00032000));
186 public void downloadContent(String path, boolean isSmallSize, IDownloadContentCallback callback)
191 if (path.indexOf("/") == 0)
195 final String indexStr = path.substring(start);
196 CanonImageContentInfo content = canonImageObjectReceiver.getContentObject(indexStr);
201 // スモールサイズの画像取得コマンド(シーケンス)を発行する
202 smallImageReciever.issueCommand(content.getId(), callback);
206 // オリジナル画像の取得コマンド(シーケンス)を発行する
207 fullImageReceiver.issueCommand(content.getId(), content.getOriginalSize(), callback);
218 public void getCameraContentList(final ICameraContentListCallback callback)
220 if (callback == null)
226 Thread thread = new Thread(new Runnable() {
229 canonImageObjectReceiver.getCameraContents(callback);
237 callback.onErrorOccurred(e);
242 public void showPictureStarted()
246 Log.v(TAG, " showPictureStarted() ");
247 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
248 publisher.flushHoldQueue();
258 public void showPictureFinished()
262 Log.v(TAG, " showPictureFinished() ");
263 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
264 publisher.flushHoldQueue();