OSDN Git Service

いったん保管。
authorMRSa <mrsa@myad.jp>
Sat, 25 Apr 2020 13:56:06 +0000 (22:56 +0900)
committerMRSa <mrsa@myad.jp>
Sat, 25 Apr 2020 13:56:06 +0000 (22:56 +0900)
12 files changed:
app/src/main/java/net/osdn/gokigen/gr2control/camera/ICameraRunMode.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/ICameraRunModeCallback.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXInterfaceProvider.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXRunMode.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXStatusHolder.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/connection/FujiXCameraModeChangeToPlayback.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/olympus/wrapper/OlyCameraWrapper.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/ricohgr2/wrapper/RicohGr2RunMode.java
app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFragment.java
app/src/main/java/net/osdn/gokigen/gr2control/playback/ImageGridViewFragment.java
app/src/main/java/net/osdn/gokigen/gr2control/playback/detail/ImagePagerViewFragment.java
app/src/main/java/net/osdn/gokigen/gr2control/preference/olympus/PreferenceFragment.java

index f39e41b..d2970bf 100644 (file)
@@ -1,8 +1,10 @@
 package net.osdn.gokigen.gr2control.camera;
 
+import androidx.annotation.NonNull;
+
 public interface ICameraRunMode
 {
     /** カメラの動作モード変更 **/
-    void changeRunMode(boolean isRecording);
+    void changeRunMode(boolean isRecording, @NonNull ICameraRunModeCallback callback);
     boolean isRecordingMode();
 }
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/ICameraRunModeCallback.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/ICameraRunModeCallback.java
new file mode 100644 (file)
index 0000000..a7158c6
--- /dev/null
@@ -0,0 +1,7 @@
+package net.osdn.gokigen.gr2control.camera;
+
+public interface ICameraRunModeCallback
+{
+    void onCompleted(boolean isRecording);
+    void onErrorOccurred(boolean isRecording);
+}
index 4467416..7de477a 100644 (file)
@@ -98,7 +98,7 @@ public class FujiXInterfaceProvider implements IFujiXInterfaceProvider, IDisplay
         statusChecker = new FujiXStatusChecker(context, commandPublisher);
         playbackControl = new FujiXPlaybackControl(context, this);
         hardwareStatus = new FujiXHardwareStatus();
-        runMode = new FujiXRunMode();
+        runMode = new FujiXRunMode(commandPublisher);
     }
 
     public void prepare()
index 8cd2812..f922922 100644 (file)
@@ -1,25 +1,98 @@
 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper;
 
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
 import net.osdn.gokigen.gr2control.camera.ICameraRunMode;
+import net.osdn.gokigen.gr2control.camera.ICameraRunModeCallback;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.FujiXCommandPublisher;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.connection.FujiXCameraModeChangeToLiveView;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.connection.FujiXCameraModeChangeToPlayback;
 
-public class FujiXRunMode implements ICameraRunMode
+public class FujiXRunMode implements ICameraRunMode, IFujiXRunModeHolder, IFujiXCommandCallback
 {
+    private final String TAG = toString();
+    private final FujiXCameraModeChangeToLiveView toLiveViewCommand;
+    private final FujiXCameraModeChangeToPlayback toPlaybackCommand;
+    private boolean isChanging = false;
+    private boolean isRecordingMode = false;
+    private ICameraRunModeCallback runModeCallback = null;
+
+    FujiXRunMode(@NonNull FujiXCommandPublisher commandPublisher)
+    {
+        //
+        toLiveViewCommand = new FujiXCameraModeChangeToLiveView(commandPublisher, this);
+        toPlaybackCommand = new FujiXCameraModeChangeToPlayback(commandPublisher, this);
+    }
 
-    FujiXRunMode()
+    @Override
+    public void changeRunMode(boolean isRecording, @NonNull ICameraRunModeCallback callback)
+    {
+        // モードを切り替える
+        Log.v(TAG, "changeRunMode() : " + isRecording);
+        this.runModeCallback = callback;
+        if (isRecording)
+        {
+            toLiveViewCommand.startModeChange(this);
+        }
+        else
+        {
+            toPlaybackCommand.startModeChange(this);
+        }
+    }
+
+    @Override
+    public boolean isRecordingMode()
     {
+        Log.v(TAG, "isRecordingMode() : " + isRecordingMode + " (" + isChanging + ")");
 
+        if (isChanging)
+        {
+            // モード変更中の場合は、かならず false を応答する
+            return (false);
+        }
+        return (isRecordingMode);
     }
 
+    @Override
+    public void transitToRecordingMode(boolean isFinished)
+    {
+        isChanging = !isFinished;
+        isRecordingMode = true;
+        if (isFinished)
+        {
+            runModeCallback.onCompleted(isRecordingMode);
+        }
+    }
 
     @Override
-    public void changeRunMode(boolean isRecording)
+    public void transitToPlaybackMode(boolean isFinished)
     {
+        isChanging = !isFinished;
+        isRecordingMode = false;
+        if (isFinished)
+        {
+            runModeCallback.onCompleted(isRecordingMode);
+        }
+    }
 
+    @Override
+    public void receivedMessage(int id, byte[] rx_body)
+    {
+        Log.v(TAG, " receivedMessage() " + id);
     }
 
     @Override
-    public boolean isRecordingMode()
+    public void onReceiveProgress(int currentBytes, int totalBytes, byte[] rx_body)
+    {
+        Log.v(TAG, " onReceiveProgress() ");
+    }
+
+    @Override
+    public boolean isReceiveMulti()
     {
-        return false;
+        return (false);
     }
 }
index 0b338d1..415872b 100644 (file)
@@ -179,7 +179,8 @@ class FujiXStatusHolder
                 {
                     int id = Integer.parseInt(key, 16);
                     int value = statusHolder.get(id);
-                    return (String.format(Locale.US,"0x%08x (%d)", value, value));
+                    Log.v(TAG, "getItemStatus() value : " + value + " key : " + key + " [" + id + "]");
+                    return (value + "");
                 }
                 catch (Exception e)
                 {
@@ -194,7 +195,7 @@ class FujiXStatusHolder
                 if (key.contentEquals(strKey))
                 {
                     int value = statusHolder.get(id);
-                    return (String.format(Locale.US,"0x%08x (%d)", value, value));
+                    return (value + "");
                 }
             }
         }
index 7662c0c..195243d 100644 (file)
@@ -31,7 +31,7 @@ public class FujiXCameraModeChangeToPlayback implements View.OnClickListener, IF
 
     public void startModeChange(IFujiXRunModeHolder runModeHolder)
     {
-        Log.v(TAG, "onClick");
+        Log.v(TAG, "startModeChange()");
         try
         {
             if (runModeHolder != null)
@@ -47,7 +47,6 @@ public class FujiXCameraModeChangeToPlayback implements View.OnClickListener, IF
         }
     }
 
-
     @Override
     public void onClick(View v)
     {
@@ -82,6 +81,7 @@ public class FujiXCameraModeChangeToPlayback implements View.OnClickListener, IF
 
                 case IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_2ND:
                     publisher.enqueueCommand(new ChangeToPlayback3rd(this));
+                    //publisher.enqueueCommand(new StatusRequestMessage(this));
                     break;
 
                 case IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_3RD:
@@ -101,11 +101,11 @@ public class FujiXCameraModeChangeToPlayback implements View.OnClickListener, IF
                     {
                         runModeHolder.transitToPlaybackMode(true);
                     }
-                    Log.v(TAG, "CHANGED PLAYBACK MODE : DONE.");
+                    Log.v(TAG, " CHANGED PLAYBACK MODE : DONE.");
                     break;
 
                 default:
-                    Log.v(TAG, "RECEIVED UNKNOWN ID : " + id);
+                    Log.v(TAG, " RECEIVED UNKNOWN ID : " + id);
                     break;
             }
         }
index 419abf7..fa8b53b 100644 (file)
@@ -6,6 +6,7 @@ import android.graphics.PointF;
 import android.util.Log;
 
 import net.osdn.gokigen.gr2control.camera.ICameraRunMode;
+import net.osdn.gokigen.gr2control.camera.ICameraRunModeCallback;
 import net.osdn.gokigen.gr2control.camera.ILiveViewControl;
 import net.osdn.gokigen.gr2control.camera.olympus.wrapper.property.CameraPropertyUtilities;
 import net.osdn.gokigen.gr2control.liveview.liveviewlistener.IImageDataReceiver;
@@ -55,17 +56,19 @@ class OlyCameraWrapper implements ICameraRunMode, ILiveViewControl, ILiveViewLis
      *
      */
     @Override
-    public void changeRunMode(boolean isRecording)
+    public void changeRunMode(boolean isRecording, @NonNull ICameraRunModeCallback callback)
     {
         OLYCamera.RunMode runMode = (isRecording) ? OLYCamera.RunMode.Recording : OLYCamera.RunMode.Playback;
         Log.v(TAG, "changeRunMode() : " + runMode);
         try
         {
             camera.changeRunMode(runMode);
+            callback.onCompleted(isRecording);
         }
         catch (Exception e)
         {
             e.printStackTrace();
+            callback.onErrorOccurred(isRecording);
         }
     }
 
index fbc9e97..5249a45 100644 (file)
@@ -1,18 +1,25 @@
 package net.osdn.gokigen.gr2control.camera.ricohgr2.wrapper;
 
+import androidx.annotation.NonNull;
+
 import net.osdn.gokigen.gr2control.camera.ICameraRunMode;
+import net.osdn.gokigen.gr2control.camera.ICameraRunModeCallback;
 
 public class RicohGr2RunMode implements ICameraRunMode
 {
+    private boolean recordingMode = true;
+
     @Override
-    public void changeRunMode(boolean isRecording)
+    public void changeRunMode(boolean isRecording, @NonNull ICameraRunModeCallback callback)
     {
-        // 何もしない...
+        // モードレスなので、絶対成功する
+        recordingMode = isRecording;
+        callback.onCompleted(isRecording);
     }
 
     @Override
     public boolean isRecordingMode()
     {
-        return (true);
+        return (recordingMode);
     }
 }
index 2002415..e531abf 100644 (file)
@@ -31,6 +31,7 @@ import net.osdn.gokigen.gr2control.camera.ICameraButtonControl;
 import net.osdn.gokigen.gr2control.camera.ICameraConnection;
 import net.osdn.gokigen.gr2control.camera.ICameraInformation;
 import net.osdn.gokigen.gr2control.camera.ICameraRunMode;
+import net.osdn.gokigen.gr2control.camera.ICameraRunModeCallback;
 import net.osdn.gokigen.gr2control.camera.ICameraStatus;
 import net.osdn.gokigen.gr2control.camera.ICameraStatusWatcher;
 import net.osdn.gokigen.gr2control.camera.IDisplayInjector;
@@ -50,7 +51,7 @@ import static android.content.Context.VIBRATOR_SERVICE;
  *  撮影用ライブビュー画面
  *
  */
-public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFocusingModeNotify, IFavoriteSettingDialogKicker, ICameraStatusUpdateNotify, LiveViewKeyPanelClickListener.KeyPanelFeedback
+public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFocusingModeNotify, IFavoriteSettingDialogKicker, ICameraStatusUpdateNotify, LiveViewKeyPanelClickListener.KeyPanelFeedback, ICameraRunModeCallback
 {
     private final String TAG = this.toString();
 
@@ -494,10 +495,16 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
         if ((changeRunModeExecutor != null)&&(!changeRunModeExecutor.isRecordingMode()))
         {
             // Runモードを切り替える。(でも切り替えると、設定がクリアされてしまう...。)
-            changeRunModeExecutor.changeRunMode(true);
+            changeRunModeExecutor.changeRunMode(true, this);
+            Log.v(TAG, "onResume() End");
+            return;
         }
+        prepareToStart();
+        Log.v(TAG, "onResume() End");
+    }
 
-        // propertyを取得
+    private void prepareToStart()
+    {
         try
         {
             Context context = getContext();
@@ -521,7 +528,18 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
         {
             e.printStackTrace();
         }
-        Log.v(TAG, "onResume() End");
+    }
+
+    @Override
+    public void onCompleted(boolean isRecording)
+    {
+        prepareToStart();
+    }
+
+    @Override
+    public void onErrorOccurred(boolean isRecording)
+    {
+        prepareToStart();
     }
 
     /**
index 44f0884..526794e 100644 (file)
@@ -37,6 +37,7 @@ import android.widget.ProgressBar;
 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.ICameraRunModeCallback;
 import net.osdn.gokigen.gr2control.camera.playback.ICameraContentListCallback;
 import net.osdn.gokigen.gr2control.camera.playback.IDownloadThumbnailImageCallback;
 import net.osdn.gokigen.gr2control.camera.playback.IPlaybackControl;
@@ -51,7 +52,7 @@ import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentTransaction;
 
-public class ImageGridViewFragment extends Fragment
+public class ImageGridViewFragment extends Fragment implements ICameraRunModeCallback
 {
        private final String TAG = this.toString();
     private final String MOVIE_SUFFIX = ".mov";
@@ -211,17 +212,50 @@ public class ImageGridViewFragment extends Fragment
         if (!runMode.isRecordingMode())
         {
             // Threadで呼んではダメみたいだ...
-            runMode.changeRunMode(true);
+            runMode.changeRunMode(true, this);
+            super.onPause();
+            Log.v(TAG, "onPause() End");
+            return;
         }
-
-               if (!executor.isShutdown())
-               {
-                       executor.shutdownNow();
-               }
+        postProcessChangeRunMode(true);
                super.onPause();
         Log.v(TAG, "onPause() End");
     }
 
+    private void postProcessChangeRunMode(boolean isRecording)
+    {
+        try
+        {
+            if (isRecording)
+            {
+                if (!executor.isShutdown())
+                {
+                    executor.shutdownNow();
+                }
+            }
+            else
+            {
+                refresh();
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void onCompleted(boolean isRecording)
+    {
+        postProcessChangeRunMode(isRecording);
+    }
+
+    @Override
+    public void onErrorOccurred(boolean isRecording)
+    {
+        postProcessChangeRunMode(isRecording);
+    }
+
        @Override
        public void onStop()
        {
@@ -235,7 +269,8 @@ public class ImageGridViewFragment extends Fragment
         {
             if (runMode.isRecordingMode())
             {
-                runMode.changeRunMode(false);
+                runMode.changeRunMode(false, this);
+                return;
             }
         }
         catch (Exception e)
@@ -246,12 +281,6 @@ public class ImageGridViewFragment extends Fragment
         Thread thread = new Thread(new Runnable() {
             @Override
             public void run() {
-/*
-                if (runMode.isRecordingMode())
-                {
-                    runMode.changeRunMode(false);
-                }
-*/
                 refreshImpl();
             }
         });
index 235a8d8..b2bf157 100644 (file)
@@ -23,6 +23,7 @@ import android.widget.ImageView;
 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.ICameraRunModeCallback;
 import net.osdn.gokigen.gr2control.camera.playback.IDownloadThumbnailImageCallback;
 import net.osdn.gokigen.gr2control.camera.playback.IPlaybackControl;
 
@@ -33,7 +34,7 @@ import androidx.fragment.app.Fragment;
 import androidx.viewpager.widget.PagerAdapter;
 import androidx.viewpager.widget.ViewPager;
 
-public class ImagePagerViewFragment extends Fragment
+public class ImagePagerViewFragment extends Fragment implements ICameraRunModeCallback
 {
     private final String TAG = this.toString();
     private static final String JPEG_SUFFIX = ".JPG";
@@ -92,7 +93,7 @@ public class ImagePagerViewFragment extends Fragment
        }
 
        @Override
-       public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
+       public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater)
        {
                try
                {
@@ -146,7 +147,7 @@ public class ImagePagerViewFragment extends Fragment
         boolean getInformation = false;
                boolean isSmallSize = false;
                boolean isRaw = false;
-        String specialSuffix = null;
+        //String specialSuffix = null;
         if ((item.getItemId() == R.id.action_get_information)||(item.getItemId() == R.id.action_get_information_raw))
         {
             getInformation = true;
@@ -259,11 +260,11 @@ public class ImagePagerViewFragment extends Fragment
         if (runMode.isRecordingMode())
         {
             // Threadで呼んではダメみたいだ...
-            runMode.changeRunMode(false);
+            runMode.changeRunMode(false, this);
+            return;
         }
-
         viewPager.setCurrentItem(contentIndex);
-       }
+    }
 
        @Override
        public void onPause()
@@ -282,13 +283,28 @@ public class ImagePagerViewFragment extends Fragment
         if (!runMode.isRecordingMode())
         {
             // Threadで呼んではダメみたいだ...
-            runMode.changeRunMode(true);
+            runMode.changeRunMode(true, this);
         }
     }
 
-       private class ImagePagerAdapter extends PagerAdapter
+    @Override
+    public void onCompleted(boolean isRecording)
     {
+        if (!isRecording)
+        {
+            viewPager.setCurrentItem(contentIndex);
+        }
+    }
 
+    @Override
+    public void onErrorOccurred(boolean isRecording)
+    {
+        Log.v(TAG, " onErrorOccurred() : " + isRecording);
+    }
+
+
+       private class ImagePagerAdapter extends PagerAdapter
+    {
                @Override
                public int getCount()
         {
@@ -359,7 +375,7 @@ public class ImagePagerViewFragment extends Fragment
                     {
                         bar.setTitle(path);
                     }
-                    activity.getSupportActionBar().setTitle(path);
+                    //activity.getSupportActionBar().setTitle(path);
                     activity.getFragmentManager().invalidateOptionsMenu();
                 }
                        }
index 350b17e..021bffe 100644 (file)
@@ -11,6 +11,7 @@ import android.util.Log;
 import net.osdn.gokigen.gr2control.R;
 import net.osdn.gokigen.gr2control.camera.ICameraHardwareStatus;
 import net.osdn.gokigen.gr2control.camera.ICameraRunMode;
+import net.osdn.gokigen.gr2control.camera.ICameraRunModeCallback;
 import net.osdn.gokigen.gr2control.camera.IInterfaceProvider;
 import net.osdn.gokigen.gr2control.camera.olympus.operation.CameraPowerOff;
 import net.osdn.gokigen.gr2control.camera.olympus.wrapper.property.IOlyCameraProperty;
@@ -38,7 +39,7 @@ import jp.co.olympus.camerakit.OLYCamera;
  *   SettingFragment
  *
  */
-public class PreferenceFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener, PreferenceSynchronizer.IPropertySynchronizeCallback, Preference.OnPreferenceClickListener
+public class PreferenceFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener, PreferenceSynchronizer.IPropertySynchronizeCallback, Preference.OnPreferenceClickListener, ICameraRunModeCallback
 {
     private final String TAG = toString();
     private AppCompatActivity context = null;
@@ -328,7 +329,8 @@ public class PreferenceFragment extends PreferenceFragmentCompat implements Shar
             if ((changeRunModeExecutor != null) && (!changeRunModeExecutor.isRecordingMode()))
             {
                 // Runモードを切り替える。(でも切り替えると、設定がクリアされてしまう...。
-                changeRunModeExecutor.changeRunMode(true);
+                changeRunModeExecutor.changeRunMode(true, this);
+                return;
             }
             synchronizeCameraProperties(true);
         }
@@ -339,6 +341,19 @@ public class PreferenceFragment extends PreferenceFragmentCompat implements Shar
         Log.v(TAG, "onResume() End");
     }
 
+    @Override
+    public void onCompleted(boolean isRecording)
+    {
+        synchronizeCameraProperties(true);
+    }
+
+    @Override
+    public void onErrorOccurred(boolean isRecording)
+    {
+        Log.v(TAG, " onErrorOccurred()");
+        synchronizeCameraProperties(true);
+    }
+
     /**
      *
      *