From a1b73cb05836be4e0eb3d1cfee8b1bdb4394c3dc Mon Sep 17 00:00:00 2001 From: MRSa Date: Sun, 10 May 2020 22:07:08 +0900 Subject: [PATCH] =?utf8?q?FUJIFILM=E7=94=A8=E7=94=BB=E5=83=8F=E8=A9=B3?= =?utf8?q?=E7=B4=B0=E7=94=BB=E9=9D=A2=E3=81=A7=E3=80=81=E3=82=BF=E3=82=A4?= =?utf8?q?=E3=83=9F=E3=83=B3=E3=82=B0=E3=81=AB=E3=82=88=E3=81=A3=E3=81=A6?= =?utf8?q?=E3=81=AF=E3=82=B9=E3=83=A2=E3=83=BC=E3=83=AB=E3=82=A4=E3=83=A1?= =?utf8?q?=E3=83=BC=E3=82=B8=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=A7=E3=81=8D?= =?utf8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .project | 17 +++++ .settings/org.eclipse.buildship.core.prefs | 13 ++++ app/.classpath | 6 ++ app/.project | 23 +++++++ app/.settings/org.eclipse.buildship.core.prefs | 2 + .../wrapper/command/messages/GetScreenNail.java | 73 ++++++++++++++++++++++ .../wrapper/playback/FujiXPlaybackControl.java | 66 ++++++++++++++++++- .../wrapper/playback/FujiXReplyReceiver.java | 36 +++++++++++ .../preference/Gr2ControlPreferenceFragment.java | 3 + .../preference/IPreferencePropertyAccessor.java | 1 + .../preference/fuji_x/FujiXPreferenceFragment.java | 9 +++ .../preference/olympus/PreferenceFragment.java | 3 + .../ricohgr2/RicohGr2PreferenceFragment.java | 3 + app/src/main/res/values-ja/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + app/src/main/res/xml/preferences_fuji_x.xml | 4 ++ 17 files changed, 264 insertions(+), 2 deletions(-) create mode 100644 .project create mode 100644 .settings/org.eclipse.buildship.core.prefs create mode 100644 app/.classpath create mode 100644 app/.project create mode 100644 app/.settings/org.eclipse.buildship.core.prefs create mode 100644 app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/GetScreenNail.java create mode 100644 app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/playback/FujiXReplyReceiver.java diff --git a/.gitignore b/.gitignore index 7498d53..6670752 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *.iml .gradle +.project .idea /local.properties /.idea/libraries diff --git a/.project b/.project new file mode 100644 index 0000000..f4c557b --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + gr2control + Project gr2control created by Buildship. + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..aa0311a --- /dev/null +++ b/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir= +eclipse.preferences.version=1 +gradle.user.home= +java.home=C\:/Program Files/Java/jdk1.8.0_112 +jvm.arguments= +offline.mode=false +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/app/.classpath b/app/.classpath new file mode 100644 index 0000000..eb19361 --- /dev/null +++ b/app/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/.project b/app/.project new file mode 100644 index 0000000..ac485d7 --- /dev/null +++ b/app/.project @@ -0,0 +1,23 @@ + + + app + Project app created by Buildship. + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/app/.settings/org.eclipse.buildship.core.prefs b/app/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..b1886ad --- /dev/null +++ b/app/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir=.. +eclipse.preferences.version=1 diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/GetScreenNail.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/GetScreenNail.java new file mode 100644 index 0000000..3e2a9ba --- /dev/null +++ b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/GetScreenNail.java @@ -0,0 +1,73 @@ +package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages; + + + +import androidx.annotation.NonNull; + +import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback; +import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXMessages; + +public class GetScreenNail extends FujiXCommandBase +{ + private final IFujiXCommandCallback callback; + private final byte lower; + private final byte upper; + private final byte data0; + private final byte data1; + private final byte data2; + private final byte data3; + + public GetScreenNail(int indexNumber, int imageSize, @NonNull IFujiXCommandCallback callback) + { + this.lower = ((byte) (0x000000ff & indexNumber)); + this.upper = ((byte)((0x0000ff00 & indexNumber) >> 8)); + + data0 = ((byte) (0x000000ff & imageSize)); + data1 = ((byte)((0x0000ff00 & imageSize) >> 8)); + data2 = ((byte)((0x00ff0000 & imageSize) >> 16)); + data3 = ((byte)((0xff000000 & imageSize) >> 24)); + this.callback = callback; + } + + @Override + public IFujiXCommandCallback responseCallback() + { + return (callback); + } + + @Override + public int getId() + { + return (IFujiXMessages.SEQ_FULL_IMAGE); + } + + @Override + public byte[] commandBody() + { + return (new byte[] { + + // message_header.index : uint16 (0: terminate, 2: two_part_message, 1: other) + (byte)0x01, (byte)0x00, + + // message_header.type : full_image (0x101b) + (byte)0x1b, (byte)0x10, + + // sequence number + (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, + + // data ... (index number) + lower, upper, (byte)0x00, (byte)0x00, + + // 現物合わせ1 : 0~  + (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, + + // 現物合わせ2 : ~0x01000000 bytes + data0, data1, data2, data3, + }); + } + @Override + public boolean dumpLog() + { + return (false); + } +} diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/playback/FujiXPlaybackControl.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/playback/FujiXPlaybackControl.java index 211d1f8..6d7d302 100644 --- a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/playback/FujiXPlaybackControl.java +++ b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/playback/FujiXPlaybackControl.java @@ -1,11 +1,13 @@ package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.playback; import android.app.Activity; +import android.content.SharedPreferences; import android.util.Log; import android.util.SparseArray; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.preference.PreferenceManager; import net.osdn.gokigen.gr2control.camera.ICameraFileInfo; import net.osdn.gokigen.gr2control.camera.ICameraStatus; @@ -14,13 +16,16 @@ import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCa 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.GetScreenNail; import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.GetThumbNail; +import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.SetPropertyValue; 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 net.osdn.gokigen.gr2control.preference.IPreferencePropertyAccessor; import java.util.ArrayList; import java.util.List; @@ -87,8 +92,65 @@ public class FujiXPlaybackControl implements IPlaybackControl, IFujiXCommandCall @Override public void downloadContentScreennail(@Nullable String path, @NonNull String name, @NonNull IDownloadThumbnailImageCallback callback) { - // Thumbnail と同じ画像を表示する - downloadContentThumbnail(path, name, callback); + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity); + boolean useSmallImage = preferences.getBoolean(IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE, false); + if (useSmallImage) + { + // small image を表示する + downloadContentScreennailImpl(path, name, callback); + } + else + { + // Thumbnail と同じ画像を表示する + downloadContentThumbnail(path, name, callback); + } + } + + private void downloadContentScreennailImpl(@Nullable String path, @NonNull String name, @NonNull IDownloadThumbnailImageCallback callback) + { + try + { + Log.v(TAG, " ----- downloadContentScreennailImpl() "); + int start = 0; + if (name.indexOf("/") == 0) + { + start = 1; + } + Log.v(TAG, " downloadContentThumbnail() : " + path + " " + name); + int index = getIndexNumber(start, name); + if ((index > 0)&&(index <= imageContentInfo.size())) + { + IFujiXCommandPublisher publisher = provider.getCommandPublisher(); + FujiXImageContentInfo contentInfo = imageContentInfo.get(index); + if (contentInfo.isReceived()) + { + if (!contentInfo.isMovie()) + { + // スモール画像を取得する (たぶんこのシーケンスでいけるはず...) + publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyReceiver(), 0xd226, 2, 0x0001)); + publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyReceiver(), 0xd227, 2, 0x0001)); + publisher.enqueueCommand(new GetScreenNail(index, 0x00800000, new FujiXThumbnailImageReceiver(activity, callback))); + publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyReceiver(), 0xd226, 2, 0x0000)); + publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyReceiver(), 0xd227, 2, 0x0001)); + } + else + { + // movieの時は、Small画像を使えないのでThumbnailで代用する。 + publisher.enqueueCommand(new GetThumbNail(index, new FujiXThumbnailImageReceiver(activity, callback))); + } + } + else + { + // まだ、ファイル情報を受信していない場合は、サムネイルの情報を流用する + publisher.enqueueCommand(new GetImageInfo(index, index, contentInfo)); + publisher.enqueueCommand(new GetThumbNail(index, new FujiXThumbnailImageReceiver(activity, callback))); + } + } + } + catch (Exception e) + { + e.printStackTrace(); + } } @Override diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/playback/FujiXReplyReceiver.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/playback/FujiXReplyReceiver.java new file mode 100644 index 0000000..e27f6da --- /dev/null +++ b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/playback/FujiXReplyReceiver.java @@ -0,0 +1,36 @@ +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.utils.SimpleLogDumper; + +public class FujiXReplyReceiver implements IFujiXCommandCallback +{ + private final String TAG = toString(); + + @Override + public void receivedMessage(int id, byte[] rx_body) + { + try + { + SimpleLogDumper.dump_bytes(" RECV : ", rx_body); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + @Override + public void onReceiveProgress(int currentBytes, int totalBytes, byte[] rx_body) + { + Log.v(TAG, " " + currentBytes + "/" + totalBytes); + } + + @Override + public boolean isReceiveMulti() + { + return (false); + } +} diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/preference/Gr2ControlPreferenceFragment.java b/app/src/main/java/net/osdn/gokigen/gr2control/preference/Gr2ControlPreferenceFragment.java index 50c95b2..f2c7ee0 100644 --- a/app/src/main/java/net/osdn/gokigen/gr2control/preference/Gr2ControlPreferenceFragment.java +++ b/app/src/main/java/net/osdn/gokigen/gr2control/preference/Gr2ControlPreferenceFragment.java @@ -167,6 +167,9 @@ public class Gr2ControlPreferenceFragment extends PreferenceFragmentCompat impl if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT)) { editor.putString(IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT, IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT_DEFAULT_VALUE); } + if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE)) { + editor.putBoolean(IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE, false); + } editor.apply(); } catch (Exception e) diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/preference/IPreferencePropertyAccessor.java b/app/src/main/java/net/osdn/gokigen/gr2control/preference/IPreferencePropertyAccessor.java index 9266a41..7676b87 100644 --- a/app/src/main/java/net/osdn/gokigen/gr2control/preference/IPreferencePropertyAccessor.java +++ b/app/src/main/java/net/osdn/gokigen/gr2control/preference/IPreferencePropertyAccessor.java @@ -63,6 +63,7 @@ public interface IPreferencePropertyAccessor String FUJI_X_COMMAND_POLLING_WAIT = "fujix_command_polling_wait"; String FUJI_X_COMMAND_POLLING_WAIT_DEFAULT_VALUE = "500"; + String FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE = "fujix_get_screennail_as_small_picture"; /* //String GR2_DISPLAY_MODE = "gr2_display_mode"; diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/preference/fuji_x/FujiXPreferenceFragment.java b/app/src/main/java/net/osdn/gokigen/gr2control/preference/fuji_x/FujiXPreferenceFragment.java index a636f55..76869b4 100644 --- a/app/src/main/java/net/osdn/gokigen/gr2control/preference/fuji_x/FujiXPreferenceFragment.java +++ b/app/src/main/java/net/osdn/gokigen/gr2control/preference/fuji_x/FujiXPreferenceFragment.java @@ -165,6 +165,9 @@ public class FujiXPreferenceFragment extends PreferenceFragmentCompat implement if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT)) { editor.putString(IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT, IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT_DEFAULT_VALUE); } + if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE)) { + editor.putBoolean(IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE, false); + } editor.apply(); } catch (Exception e) @@ -206,6 +209,11 @@ public class FujiXPreferenceFragment extends PreferenceFragmentCompat implement Log.v(TAG, " DISPLAY CAMERA VIEW : " + key + " , " + value); break; + case IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE: + value = preferences.getBoolean(key, false); + Log.v(TAG, " SMALL IMAGE AS SCREENNAIL : " + key + " , " + value); + break; + case IPreferencePropertyAccessor.SHARE_AFTER_SAVE: value = preferences.getBoolean(key, false); Log.v(TAG, " SHARE AFTER SAVE : " + key + " , " + value); @@ -378,6 +386,7 @@ public class FujiXPreferenceFragment extends PreferenceFragmentCompat implement setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, defaultValue); setBooleanPreference(IPreferencePropertyAccessor.USE_PLAYBACK_MENU, IPreferencePropertyAccessor.USE_PLAYBACK_MENU, defaultValue); setBooleanPreference(IPreferencePropertyAccessor.FUJI_X_DISPLAY_CAMERA_VIEW, IPreferencePropertyAccessor.FUJI_X_DISPLAY_CAMERA_VIEW, false); + setBooleanPreference(IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE, IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE, false); setBooleanPreference(IPreferencePropertyAccessor.SHARE_AFTER_SAVE, IPreferencePropertyAccessor.SHARE_AFTER_SAVE, defaultValue); } catch (Exception e) diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/preference/olympus/PreferenceFragment.java b/app/src/main/java/net/osdn/gokigen/gr2control/preference/olympus/PreferenceFragment.java index e1603f3..eee02ca 100644 --- a/app/src/main/java/net/osdn/gokigen/gr2control/preference/olympus/PreferenceFragment.java +++ b/app/src/main/java/net/osdn/gokigen/gr2control/preference/olympus/PreferenceFragment.java @@ -186,6 +186,9 @@ public class PreferenceFragment extends PreferenceFragmentCompat implements Shar if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT)) { editor.putString(IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT, IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT_DEFAULT_VALUE); } + if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE)) { + editor.putBoolean(IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE, false); + } editor.apply(); } diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/preference/ricohgr2/RicohGr2PreferenceFragment.java b/app/src/main/java/net/osdn/gokigen/gr2control/preference/ricohgr2/RicohGr2PreferenceFragment.java index 77948da..6f9ec34 100644 --- a/app/src/main/java/net/osdn/gokigen/gr2control/preference/ricohgr2/RicohGr2PreferenceFragment.java +++ b/app/src/main/java/net/osdn/gokigen/gr2control/preference/ricohgr2/RicohGr2PreferenceFragment.java @@ -166,6 +166,9 @@ public class RicohGr2PreferenceFragment extends PreferenceFragmentCompat implem if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT)) { editor.putString(IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT, IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT_DEFAULT_VALUE); } + if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE)) { + editor.putBoolean(IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE, false); + } editor.apply(); } catch (Exception e) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 1710652..6fb7115 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -203,4 +203,7 @@ アプリ終了 (FUJI) アプリ終了 (OPC) アプリ終了 (RICOH) + + 表示画像はスモール画像を使用 + すこし時間がかかりますが、画像表示にスモール画像を使用します。 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9504cf2..d001d7b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -244,4 +244,7 @@ Exit Application (FUJI) Exit Application (OPC) Exit Application (RICOH) + + Use small image as detail screen + Use small size image for detail screen. diff --git a/app/src/main/res/xml/preferences_fuji_x.xml b/app/src/main/res/xml/preferences_fuji_x.xml index 66c78a8..f96a952 100644 --- a/app/src/main/res/xml/preferences_fuji_x.xml +++ b/app/src/main/res/xml/preferences_fuji_x.xml @@ -52,6 +52,10 @@ android:defaultValue="80" android:summary="@string/pref_summary_fujix_liveview_wait" /> +