import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandPublisher;
import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommunication;
import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.connection.FujiXConnection;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.playback.FujiXPlaybackControl;
import net.osdn.gokigen.gr2control.camera.playback.IPlaybackControl;
import net.osdn.gokigen.gr2control.liveview.IAutoFocusFrameDisplay;
import net.osdn.gokigen.gr2control.liveview.ICameraStatusUpdateNotify;
zoomControl = new FujiXZoomControl();
buttonControl = new FujiXButtonControl();
statusChecker = new FujiXStatusChecker(context, commandPublisher);
- playbackControl = new FujiXPlaybackControl(communicationTimeoutMs);
+ playbackControl = new FujiXPlaybackControl(context, this);
hardwareStatus = new FujiXHardwareStatus();
runMode = new FujiXRunMode();
}
+++ /dev/null
-package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper;
-
-import androidx.annotation.NonNull;
-
-import net.osdn.gokigen.gr2control.camera.ICameraFileInfo;
-import net.osdn.gokigen.gr2control.camera.playback.IContentInfoCallback;
-import net.osdn.gokigen.gr2control.camera.playback.IDownloadContentCallback;
-import net.osdn.gokigen.gr2control.camera.playback.IDownloadContentListCallback;
-import net.osdn.gokigen.gr2control.camera.playback.IDownloadThumbnailImageCallback;
-import net.osdn.gokigen.gr2control.camera.playback.IPlaybackControl;
-
-public class FujiXPlaybackControl implements IPlaybackControl
-{
- private final String TAG = toString();
- private static final int DEFAULT_TIMEOUT = 5000;
- private final int timeoutValue;
-
- FujiXPlaybackControl(int timeoutMSec)
- {
- this.timeoutValue = Math.max(DEFAULT_TIMEOUT, timeoutMSec); // (timeoutMSec < DEFAULT_TIMEOUT) ? DEFAULT_TIMEOUT : timeoutMSec;
- }
-
-
- @Override
- public String getRawFileSuffix()
- {
- return null;
- }
-
- @Override
- public void downloadContentList(@NonNull IDownloadContentListCallback callback)
- {
-
- }
-
- @Override
- public void getContentInfo(@NonNull String path, @NonNull IContentInfoCallback callback)
- {
-
- }
-
- @Override
- public void updateCameraFileInfo(ICameraFileInfo info)
- {
-
- }
-
- @Override
- public void downloadContentScreennail(@NonNull String path, @NonNull IDownloadThumbnailImageCallback callback)
- {
-
- }
-
- @Override
- public void downloadContentThumbnail(@NonNull String path, @NonNull IDownloadThumbnailImageCallback callback)
- {
-
- }
-
- @Override
- public void downloadContent(@NonNull String path, boolean isSmallSize, @NonNull IDownloadContentCallback callback)
- {
-
- }
-}
--- /dev/null
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.playback;
+
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+import net.osdn.gokigen.gr2control.camera.playback.IDownloadContentCallback;
+import net.osdn.gokigen.gr2control.camera.playback.ProgressEvent;
+
+public class FujiXFullImageReceiver implements IFujiXCommandCallback
+{
+ private final String TAG = toString();
+ private final IDownloadContentCallback callback;
+ private int receivedLength;
+
+ FujiXFullImageReceiver( @NonNull IDownloadContentCallback callback)
+ {
+ this.callback = callback;
+ this.receivedLength = 0;
+ }
+
+ @Override
+ public void receivedMessage(int id, byte[] rx_body)
+ {
+ try
+ {
+ Log.v(TAG, " receivedMessage() : onCompleted. " + id + " (" + receivedLength + " bytes.)");
+ callback.onCompleted();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ {
+ callback.onErrorOccurred(e);
+ }
+ }
+ }
+
+ @Override
+ public void onReceiveProgress(final int currentBytes, final int totalBytes, byte[] body)
+ {
+ try
+ {
+ receivedLength = receivedLength + currentBytes;
+ //Log.v(TAG, " onReceiveProgress() " + receivedLength + "/" + totalBytes);
+ float percent = (totalBytes == 0) ? 0.0f : ((float) currentBytes / (float) totalBytes);
+
+ callback.onProgress(body, currentBytes, new ProgressEvent(percent, null));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ callback.onErrorOccurred(e);
+ }
+ }
+
+ @Override
+ public boolean isReceiveMulti()
+ {
+ return (true);
+ }
+
+}
--- /dev/null
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.playback;
+
+import android.util.Log;
+
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+import net.osdn.gokigen.gr2control.camera.playback.CameraFileInfo;
+import net.osdn.gokigen.gr2control.camera.playback.ICameraContent;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+public class FujiXImageContentInfo implements ICameraContent, IFujiXCommandCallback
+{
+ private final String TAG = toString();
+ private final int indexNumber;
+ private boolean isReceived = false;
+ private boolean isDateValid = false;
+ private Date date = null;
+ private String realFileName = null;
+ private CameraFileInfo fileInfo = null;
+ private byte[] rx_body;
+ FujiXImageContentInfo(int indexNumber, byte[] rx_body)
+ {
+ this.indexNumber = indexNumber;
+ this.rx_body = rx_body;
+ if (this.rx_body != null)
+ {
+ updateInformation(rx_body);
+ }
+ else
+ {
+ date = new Date();
+ isDateValid = false;
+ }
+ }
+
+ @Override
+ public String getCameraId()
+ {
+ return ("FujiX");
+ }
+
+ @Override
+ public String getCardId()
+ {
+ return ("sd1");
+ }
+
+ @Override
+ public String getContentPath()
+ {
+ return ("");
+ }
+
+ @Override
+ public String getContentName()
+ {
+ try
+ {
+ if ((realFileName != null)&&(realFileName.contains(".MOV")))
+ {
+ return ("" + indexNumber + ".MOV");
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return ("" + indexNumber + ".JPG");
+ }
+
+ @Override
+ public String getOriginalName()
+ {
+ if (realFileName != null)
+ {
+ return (realFileName);
+ }
+ return (getContentName());
+ }
+
+ @Override
+ public boolean isRaw()
+ {
+ try
+ {
+ if ((realFileName != null)&&(realFileName.contains(".RAF")))
+ {
+ return (true);
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (false);
+ }
+
+ @Override
+ public boolean isMovie()
+ {
+ try
+ {
+ if ((realFileName != null)&&(realFileName.contains(".MOV")))
+ {
+ return (true);
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (false);
+ }
+
+ @Override
+ public boolean isDateValid()
+ {
+ return (isDateValid);
+ }
+
+ @Override
+ public boolean isContentNameValid()
+ {
+ return (false);
+ }
+
+ @Override
+ public Date getCapturedDate()
+ {
+ return (date);
+ }
+
+ @Override
+ public void setCapturedDate(Date date)
+ {
+ try
+ {
+ this.date = date;
+ isDateValid = true;
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void onReceiveProgress(int currentBytes, int totalBytes, byte[] body)
+ {
+ Log.v(TAG, " " + currentBytes + "/" + totalBytes);
+ }
+
+ @Override
+ public boolean isReceiveMulti()
+ {
+ return (false);
+ }
+
+ @Override
+ public void receivedMessage(int id, byte[] rx_body)
+ {
+ Log.v(TAG, "RX : " + indexNumber + "(" + id + ") " + rx_body.length + " bytes.");
+ this.rx_body = rx_body;
+ updateInformation(rx_body);
+
+ }
+
+ public int getId()
+ {
+ return (indexNumber);
+ }
+
+ boolean isReceived()
+ {
+ return (isReceived);
+ }
+
+ CameraFileInfo getCameraFileInfo()
+ {
+ if (fileInfo != null)
+ {
+ return (fileInfo);
+ }
+ return (new CameraFileInfo(getContentPath(), getOriginalName()));
+ }
+
+ private void updateInformation(byte[] rx_body)
+ {
+ try
+ {
+ if (rx_body.length >= 166)
+ {
+ // データの切り出し
+ realFileName = new String(pickupString(rx_body, 65, 12));
+ String dateString = new String(pickupString(rx_body, 92, 15));
+ //char orientation = Character.(rx_body[151]);
+ Log.v(TAG, "[" + indexNumber + "] FILE NAME : " + realFileName + " DATE : '" + dateString + "'");
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss", Locale.ENGLISH);
+ date = dateFormat.parse(dateString);
+ isDateValid = true;
+ isReceived = true;
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 文字列を無理やり切り出す...
+ *
+ */
+ private byte[] pickupString(byte[] data, int start, int length)
+ {
+ byte[] result = new byte[length];
+ for (int index = 0; index < length; index++)
+ {
+ result[index] = data[start + index * 2];
+ }
+ return (result);
+ }
+}
--- /dev/null
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.playback;
+
+import android.app.Activity;
+import android.util.Log;
+import android.util.SparseArray;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import net.osdn.gokigen.gr2control.camera.ICameraFileInfo;
+import net.osdn.gokigen.gr2control.camera.ICameraStatus;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.FujiXInterfaceProvider;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandPublisher;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.GetFullImage;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.GetImageInfo;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.GetThumbNail;
+import net.osdn.gokigen.gr2control.camera.playback.ICameraContent;
+import net.osdn.gokigen.gr2control.camera.playback.IContentInfoCallback;
+import net.osdn.gokigen.gr2control.camera.playback.IDownloadContentCallback;
+import net.osdn.gokigen.gr2control.camera.playback.ICameraContentListCallback;
+import net.osdn.gokigen.gr2control.camera.playback.IDownloadThumbnailImageCallback;
+import net.osdn.gokigen.gr2control.camera.playback.IPlaybackControl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXCameraProperties.IMAGE_FILE_COUNT_STR_ID;
+
+public class FujiXPlaybackControl implements IPlaybackControl, IFujiXCommandCallback
+{
+ private final String TAG = toString();
+ private final Activity activity;
+ private final FujiXInterfaceProvider provider;
+ //private List<ICameraContent> imageInfo;
+ private SparseArray<FujiXImageContentInfo> imageContentInfo;
+
+ private int indexNumber = 0;
+ private ICameraContentListCallback finishedCallback = null;
+
+ public FujiXPlaybackControl(Activity activity, FujiXInterfaceProvider provider)
+ {
+ this.activity = activity;
+ this.provider = provider;
+ this.imageContentInfo = new SparseArray<>();
+ }
+
+ @Override
+ public String getRawFileSuffix() {
+ return (null);
+ }
+
+ @Override
+ public void downloadContentList(@NonNull final ICameraContentListCallback callback)
+ {
+ try
+ {
+ Thread thread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ getCameraContents(callback);
+ }
+ });
+ thread.start();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ callback.onErrorOccurred(e);
+ }
+ }
+
+ @Override
+ public void getContentInfo(@Nullable String path, @NonNull String name, @NonNull IContentInfoCallback callback)
+ {
+ // showFileInformation
+
+ }
+
+ @Override
+ public void updateCameraFileInfo(ICameraFileInfo info)
+ {
+ // なにもしない
+ }
+
+ @Override
+ public void downloadContentScreennail(@Nullable String path, @NonNull String name, @NonNull IDownloadThumbnailImageCallback callback)
+ {
+ // Thumbnail と同じ画像を表示する
+ downloadContentThumbnail(path, name, callback);
+ }
+
+ @Override
+ public void downloadContentThumbnail(@Nullable String path, @NonNull String name, @NonNull IDownloadThumbnailImageCallback callback)
+ {
+ try
+ {
+ int start = 0;
+ if (path.indexOf("/") == 0)
+ {
+ start = 1;
+ }
+ String indexStr = path.substring(start, path.indexOf("."));
+ Log.v(TAG, "downloadContentThumbnail() : " + path + " " + indexStr);
+ int index = Integer.parseInt(indexStr);
+ if ((index > 0)&&(index <= imageContentInfo.size()))
+ {
+ IFujiXCommandPublisher publisher = provider.getCommandPublisher();
+ FujiXImageContentInfo contentInfo = imageContentInfo.get(index);
+ if (!contentInfo.isReceived())
+ {
+ publisher.enqueueCommand(new GetImageInfo(index, index, contentInfo));
+ }
+ publisher.enqueueCommand(new GetThumbNail(index, new FujiXThumbnailImageReceiver(activity, callback)));
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void downloadContent(@Nullable String path, @NonNull String name, boolean isSmallSize, @NonNull IDownloadContentCallback callback)
+ {
+ try
+ {
+ int start = 0;
+ if (path.indexOf("/") == 0)
+ {
+ start = 1;
+ }
+ String indexStr = path.substring(start, path.indexOf("."));
+ Log.v(TAG, "FujiX::downloadContent() : " + path + " " + indexStr);
+ int index = Integer.parseInt(indexStr);
+ //FujiXImageContentInfo contentInfo = imageContentInfo.get(index); // 特にデータを更新しないから大丈夫か?
+ if ((index > 0)&&(index <= imageContentInfo.size()))
+ {
+ IFujiXCommandPublisher publisher = provider.getCommandPublisher();
+ publisher.enqueueCommand(new GetFullImage(index, new FujiXFullImageReceiver(callback)));
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void showPictureStarted()
+ {
+
+ }
+
+ @Override
+ public void showPictureFinished()
+ {
+
+ }
+
+ private void getCameraContents(ICameraContentListCallback callback)
+ {
+ int nofFiles = -1;
+ try {
+ finishedCallback = callback;
+ ICameraStatus statusListHolder = provider.getCameraStatusListHolder();
+ if (statusListHolder != null) {
+ String count = statusListHolder.getStatus(IMAGE_FILE_COUNT_STR_ID);
+ nofFiles = Integer.parseInt(count);
+ Log.v(TAG, "getCameraContents() : " + nofFiles + " (" + count + ")");
+ }
+ Log.v(TAG, "getCameraContents() : DONE.");
+ if (nofFiles > 0)
+ {
+ // 件数ベースで取得する(情報は、後追いで反映させる...この方式だと、キューに積みまくってるが、、、)
+ checkImageFiles(nofFiles);
+ }
+ else
+ {
+ // 件数が不明だったら、1件づつインデックスの情報を取得する
+ checkImageFileAll();
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ finishedCallback.onErrorOccurred(e);
+ finishedCallback = null;
+ }
+ }
+
+ /**
+ * 最初から取得可能なイメージ情報を(件数ベースで)取得する
+ *
+ */
+ private void checkImageFiles(int nofFiles)
+ {
+ try
+ {
+ imageContentInfo.clear();
+ //IFujiXCommandPublisher publisher = provider.getCommandPublisher();
+ //for (int index = nofFiles; index > 0; index--)
+ for (int index = 1; index <= nofFiles; index++)
+ {
+ // ファイル数分、仮のデータを生成する
+ imageContentInfo.append(index, new FujiXImageContentInfo(index, null));
+
+ //ファイル名などを取得する (メッセージを積んでおく...でも遅くなるので、ここではやらない方がよいかな。)
+ //publisher.enqueueCommand(new GetImageInfo(index, index, info));
+ }
+
+ // インデックスデータがなくなったことを検出...データがそろったとして応答する。
+ Log.v(TAG, "IMAGE LIST : " + imageContentInfo.size() + " (" + nofFiles + ")");
+ finishedCallback.onCompleted(getCameraFileInfoList());
+ finishedCallback = null;
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 最初から取得可能なイメージ情報をすべて取得する
+ *
+ */
+ private void checkImageFileAll()
+ {
+ try
+ {
+ imageContentInfo.clear();
+ indexNumber = 1;
+ IFujiXCommandPublisher publisher = provider.getCommandPublisher();
+ publisher.enqueueCommand(new GetImageInfo(indexNumber, indexNumber, this));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void onReceiveProgress(int currentBytes, int totalBytes, byte[] body)
+ {
+ Log.v(TAG, " " + currentBytes + "/" + totalBytes);
+ }
+
+ @Override
+ public boolean isReceiveMulti()
+ {
+ return (false);
+ }
+
+ @Override
+ public void receivedMessage(int id, byte[] rx_body)
+ {
+ // イメージ数の一覧が取得できなかった場合にここで作る。
+ if (rx_body.length < 16)
+ {
+ // インデックスデータがなくなったことを検出...データがそろったとして応答する。
+ Log.v(TAG, "IMAGE LIST : " + imageContentInfo.size());
+ finishedCallback.onCompleted(getCameraFileInfoList());
+ finishedCallback = null;
+ return;
+ }
+ try
+ {
+ Log.v(TAG, "RECEIVED IMAGE INFO : " + indexNumber);
+
+ // 受信データを保管しておく
+ imageContentInfo.append(indexNumber, new FujiXImageContentInfo(indexNumber, rx_body));
+
+ // 次のインデックスの情報を要求する
+ indexNumber++;
+ IFujiXCommandPublisher publisher = provider.getCommandPublisher();
+ publisher.enqueueCommand(new GetImageInfo(indexNumber, indexNumber, this));
+ }
+ catch (Exception e)
+ {
+ // エラーになったら、そこで終了にする
+ e.printStackTrace();
+ finishedCallback.onCompleted(getCameraFileInfoList());
+ finishedCallback = null;
+ }
+ }
+
+ private List<ICameraContent> getCameraContentList()
+ {
+ /// ダサいけど...コンテナクラスを詰め替えて応答する
+ List<ICameraContent> contentList = new ArrayList<>();
+ int listSize = imageContentInfo.size();
+ for(int index = 0; index < listSize; index++)
+ {
+ contentList.add(imageContentInfo.valueAt(index));
+ }
+ return (contentList);
+ }
+
+ private List<ICameraFileInfo> getCameraFileInfoList()
+ {
+ List<ICameraFileInfo> fileInfoList = new ArrayList<>();
+ try
+ {
+ int listSize = imageContentInfo.size();
+ for(int index = 0; index < listSize; index++)
+ {
+ FujiXImageContentInfo info = imageContentInfo.valueAt(index);
+ fileInfoList.add(info.getCameraFileInfo());
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (fileInfoList);
+ }
+
+}
--- /dev/null
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.playback;
+
+import android.content.Context;
+import android.graphics.BitmapFactory;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import net.osdn.gokigen.gr2control.R;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+import net.osdn.gokigen.gr2control.camera.playback.IDownloadThumbnailImageCallback;
+
+public class FujiXThumbnailImageReceiver implements IFujiXCommandCallback
+{
+ private final String TAG = toString();
+ private final Context context;
+ private final IDownloadThumbnailImageCallback callback;
+
+ FujiXThumbnailImageReceiver(Context context, @NonNull IDownloadThumbnailImageCallback callback)
+ {
+ this.context = context;
+ this.callback = callback;
+ }
+
+ @Override
+ public void receivedMessage(int id, byte[] rx_body)
+ {
+ try
+ {
+ int offset = 12;
+ if (rx_body.length > offset)
+ {
+ callback.onCompleted(BitmapFactory.decodeByteArray(rx_body, offset, rx_body.length - offset), null);
+ }
+ else
+ {
+ Log.v(TAG, "BITMAP IS NONE... : " + rx_body.length);
+ callback.onCompleted(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_broken_image_black_24dp), null);
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ {
+ callback.onErrorOccurred(e);
+ }
+ }
+ }
+
+ @Override
+ public void onReceiveProgress(int currentBytes, int totalBytes, byte[] body)
+ {
+ Log.v(TAG, " " + currentBytes + "/" + totalBytes);
+ }
+
+ @Override
+ public boolean isReceiveMulti()
+ {
+ return (false);
+ }
+}
import net.osdn.gokigen.gr2control.camera.playback.CameraFileInfo;
import net.osdn.gokigen.gr2control.camera.playback.IContentInfoCallback;
import net.osdn.gokigen.gr2control.camera.playback.IDownloadContentCallback;
-import net.osdn.gokigen.gr2control.camera.playback.IDownloadContentListCallback;
+import net.osdn.gokigen.gr2control.camera.playback.ICameraContentListCallback;
import net.osdn.gokigen.gr2control.camera.playback.IDownloadThumbnailImageCallback;
import net.osdn.gokigen.gr2control.camera.playback.IPlaybackControl;
import net.osdn.gokigen.gr2control.camera.playback.ProgressEvent;
import java.util.Map;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
import jp.co.olympus.camerakit.OLYCamera;
import jp.co.olympus.camerakit.OLYCameraFileInfo;
}
@Override
- public void downloadContentList(@NonNull final IDownloadContentListCallback callback)
+ public void downloadContentList(@NonNull final ICameraContentListCallback callback)
{
try
{
}
@Override
- public void getContentInfo(@NonNull String path, @NonNull IContentInfoCallback callback)
+ public void getContentInfo(@Nullable String path, @NonNull String name, @NonNull IContentInfoCallback callback)
{
try
{
// ここは使っていないから何もしない
- Log.v(TAG, "getContentInfo() : " + path);
+ Log.v(TAG, "getContentInfo() : " + name);
}
catch (Exception e)
{
}
@Override
- public void downloadContentScreennail(@NonNull String path, @NonNull final IDownloadThumbnailImageCallback callback)
+ public void downloadContentScreennail(@Nullable String path, @NonNull String name, @NonNull final IDownloadThumbnailImageCallback callback)
{
try
{
- camera.downloadContentScreennail(path, new OLYCamera.DownloadImageCallback() {
+ camera.downloadContentScreennail(name, new OLYCamera.DownloadImageCallback() {
@Override
public void onProgress(OLYCamera.ProgressEvent progressEvent)
{
}
@Override
- public void downloadContentThumbnail(@NonNull String path, @NonNull final IDownloadThumbnailImageCallback callback)
+ public void downloadContentThumbnail(@Nullable String path, @NonNull String name, @NonNull final IDownloadThumbnailImageCallback callback)
{
try
{
- camera.downloadContentThumbnail(path, new OLYCamera.DownloadImageCallback() {
+ camera.downloadContentThumbnail(name, new OLYCamera.DownloadImageCallback() {
@Override
public void onProgress(OLYCamera.ProgressEvent progressEvent)
{
}
@Override
- public void downloadContent(@NonNull String path, boolean isSmallSize, @NonNull final IDownloadContentCallback callback)
+ public void downloadContent(@Nullable String path, @NonNull String name, boolean isSmallSize, @NonNull final IDownloadContentCallback callback)
{
try
{
- camera.downloadLargeContent(path, new OLYCamera.DownloadLargeContentCallback() {
+ camera.downloadLargeContent(name, new OLYCamera.DownloadLargeContentCallback() {
@Override
public void onProgress(byte[] bytes, OLYCamera.ProgressEvent progressEvent)
{
callback.onErrorOccurred(e);
}
}
+
+ @Override
+ public void showPictureStarted()
+ {
+
+ }
+
+ @Override
+ public void showPictureFinished()
+ {
+
+ }
}
--- /dev/null
+package net.osdn.gokigen.gr2control.camera.playback;
+
+ import java.util.Date;
+
+public interface ICameraContent
+{
+ String getCameraId();
+ String getCardId();
+ String getContentPath();
+ String getContentName();
+ String getOriginalName();
+ boolean isRaw();
+ boolean isMovie();
+ boolean isDateValid();
+ boolean isContentNameValid();
+ Date getCapturedDate();
+ void setCapturedDate(Date date);
+}
import java.util.List;
-public interface IDownloadContentListCallback
+public interface ICameraContentListCallback
{
void onCompleted(List<ICameraFileInfo> contentList);
+ //void onCompleted(List<ICameraContent> contentList);
void onErrorOccurred(Exception e);
}
import net.osdn.gokigen.gr2control.camera.ICameraFileInfo;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
/**
* 画像再生・取得用インタフェース
public interface IPlaybackControl
{
String getRawFileSuffix();
- void downloadContentList(@NonNull IDownloadContentListCallback callback);
- void getContentInfo(@NonNull String path, @NonNull IContentInfoCallback callback);
+ void downloadContentList(@NonNull ICameraContentListCallback callback);
+ void getContentInfo(@Nullable String path, @NonNull String name, @NonNull IContentInfoCallback callback);
+
void updateCameraFileInfo(ICameraFileInfo info);
- void downloadContentScreennail(@NonNull String path, @NonNull IDownloadThumbnailImageCallback callback);
- void downloadContentThumbnail(@NonNull String path, @NonNull IDownloadThumbnailImageCallback callback);
- void downloadContent(@NonNull String path, boolean isSmallSize, @NonNull IDownloadContentCallback callback);
+ void downloadContentScreennail(@Nullable String path, @NonNull String name, @NonNull IDownloadThumbnailImageCallback callback);
+ void downloadContentThumbnail(@Nullable String path, @NonNull String name, @NonNull IDownloadThumbnailImageCallback callback);
+ void downloadContent(@Nullable String path, @NonNull String name, boolean isSmallSize, @NonNull IDownloadContentCallback callback);
+
+ void showPictureStarted();
+ void showPictureFinished();
+
}
--- /dev/null
+package net.osdn.gokigen.gr2control.camera.playback;
+
+public interface IProgressEvent
+{
+ float getProgress();
+ boolean isCancellable();
+ void requestCancellation();
+
+ interface CancelCallback
+ {
+ void requestCancellation();
+ }
+}
import net.osdn.gokigen.gr2control.camera.ICameraFileInfo;
import net.osdn.gokigen.gr2control.camera.playback.CameraFileInfo;
import net.osdn.gokigen.gr2control.camera.playback.IContentInfoCallback;
-import net.osdn.gokigen.gr2control.camera.playback.IDownloadContentListCallback;
+import net.osdn.gokigen.gr2control.camera.playback.ICameraContentListCallback;
import net.osdn.gokigen.gr2control.camera.playback.IDownloadContentCallback;
import net.osdn.gokigen.gr2control.camera.playback.IDownloadThumbnailImageCallback;
import net.osdn.gokigen.gr2control.camera.playback.IPlaybackControl;
import java.util.List;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
/**
*
}
@Override
- public void downloadContentList(@NonNull IDownloadContentListCallback callback)
+ public void downloadContentList(@NonNull ICameraContentListCallback callback)
{
List<ICameraFileInfo> fileList = new ArrayList<>();
String imageListurl = "http://192.168.0.1/v1/photos?limit=3000";
}
@Override
- public void getContentInfo(@NonNull String path, @NonNull IContentInfoCallback callback)
+ public void getContentInfo(@Nullable String path, @NonNull String name, @NonNull IContentInfoCallback callback)
{
- String url = getPhotoUrl + path + "/info";
+ String url = getPhotoUrl + name + "/info";
Log.v(TAG, "getContentInfo() GET URL : " + url);
try
{
}
@Override
- public void downloadContentScreennail(@NonNull String path, @NonNull IDownloadThumbnailImageCallback callback)
+ public void downloadContentScreennail(@Nullable String path, @NonNull String name, @NonNull IDownloadThumbnailImageCallback callback)
{
//Log.v(TAG, "downloadContentScreennail() : " + path);
String suffix = "?size=view";
- String url = getPhotoUrl + path + suffix;
+ String url = getPhotoUrl + name + suffix;
Log.v(TAG, "downloadContentScreennail() GET URL : " + url);
try
{
}
@Override
- public void downloadContentThumbnail(@NonNull String path, @NonNull IDownloadThumbnailImageCallback callback)
+ public void downloadContentThumbnail(@Nullable String path, @NonNull String name, @NonNull IDownloadThumbnailImageCallback callback)
{
//Log.v(TAG, "downloadContentThumbnail() : " + path);
String suffix = "?size=view";
- if (path.contains(".JPG"))
+ if (name.contains(".JPG"))
{
suffix = "?size=thumb";
}
- String url = getPhotoUrl + path + suffix;
+ String url = getPhotoUrl + name + suffix;
Log.v(TAG, "downloadContentThumbnail() GET URL : " + url);
try
{
}
@Override
- public void downloadContent(@NonNull String path, boolean isSmallSize, @NonNull final IDownloadContentCallback callback)
+ public void downloadContent(@Nullable String path, @NonNull String name, boolean isSmallSize, @NonNull final IDownloadContentCallback callback)
{
- Log.v(TAG, "downloadContent() : " + path);
+ Log.v(TAG, "downloadContent() : " + name);
String suffix = "?size=full";
if (isSmallSize)
{
suffix = "?size=view";
}
- String url = getPhotoUrl + path + suffix;
+ String url = getPhotoUrl + name + suffix;
Log.v(TAG, "downloadContent() GET URL : " + url);
try
{
e.printStackTrace();
}
}
+
+ @Override
+ public void showPictureStarted()
+ {
+
+ }
+
+ @Override
+ public void showPictureFinished()
+ {
+
+ }
}
import java.io.File;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import net.osdn.gokigen.gr2control.R;
import net.osdn.gokigen.gr2control.camera.ICameraFileInfo;
import net.osdn.gokigen.gr2control.camera.ICameraRunMode;
-import net.osdn.gokigen.gr2control.camera.playback.IDownloadContentListCallback;
+import net.osdn.gokigen.gr2control.camera.playback.ICameraContentListCallback;
import net.osdn.gokigen.gr2control.camera.playback.IDownloadThumbnailImageCallback;
import net.osdn.gokigen.gr2control.camera.playback.IPlaybackControl;
import net.osdn.gokigen.gr2control.playback.detail.ImageContentInfoEx;
contentList = null;
Log.v(TAG, "refreshImpl() start");
- playbackControl.downloadContentList(new IDownloadContentListCallback() {
+ playbackControl.downloadContentList(new ICameraContentListCallback() {
@Override
public void onCompleted(List<ICameraFileInfo> list) {
// Sort contents in chronological order (or alphabetical order).
}
final Box box = new Box();
- playbackControl.downloadContentThumbnail(path, new IDownloadThumbnailImageCallback()
+ playbackControl.downloadContentThumbnail(null, path, new IDownloadThumbnailImageCallback()
{
@Override
public void onCompleted(final Bitmap thumbnail, Map<String, Object> metadata)
}
// Download the image.
- playbackControl.downloadContentScreennail(path, new IDownloadThumbnailImageCallback() {
+ playbackControl.downloadContentScreennail(null, path, new IDownloadThumbnailImageCallback() {
@Override
//public void onCompleted(final byte[] data, final Map<String, Object> metadata) {
public void onCompleted(final Bitmap bitmap, final Map<String, Object> metadata) {
});
}
Log.v(TAG, "downloadContent : " + path + " (small: " + isSmallSize + ")");
- playbackControl.downloadContent(path, isSmallSize, this);
+ playbackControl.downloadContent(null, path, isSmallSize, this);
}
catch (Exception ex)
{
--- /dev/null
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M21,5v6.59l-3,-3.01 -4,4.01 -4,-4 -4,4 -3,-3.01L3,5c0,-1.1 0.9,-2 2,-2h14c1.1,0 2,0.9 2,2zM18,11.42l3,3.01L21,19c0,1.1 -0.9,2 -2,2L5,21c-1.1,0 -2,-0.9 -2,-2v-6.58l3,2.99 4,-4 4,4 4,-3.99z"/>
+</vector>