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();
}
--- /dev/null
+package net.osdn.gokigen.gr2control.camera;
+
+public interface ICameraRunModeCallback
+{
+ void onCompleted(boolean isRecording);
+ void onErrorOccurred(boolean isRecording);
+}
statusChecker = new FujiXStatusChecker(context, commandPublisher);
playbackControl = new FujiXPlaybackControl(context, this);
hardwareStatus = new FujiXHardwareStatus();
- runMode = new FujiXRunMode();
+ runMode = new FujiXRunMode(commandPublisher);
}
public void prepare()
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);
}
}
{
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)
{
if (key.contentEquals(strKey))
{
int value = statusHolder.get(id);
- return (String.format(Locale.US,"0x%08x (%d)", value, value));
+ return (value + "");
}
}
}
public void startModeChange(IFujiXRunModeHolder runModeHolder)
{
- Log.v(TAG, "onClick");
+ Log.v(TAG, "startModeChange()");
try
{
if (runModeHolder != null)
}
}
-
@Override
public void onClick(View v)
{
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:
{
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;
}
}
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;
*
*/
@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);
}
}
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);
}
}
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;
* 撮影用ライブビュー画面
*
*/
-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();
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();
{
e.printStackTrace();
}
- Log.v(TAG, "onResume() End");
+ }
+
+ @Override
+ public void onCompleted(boolean isRecording)
+ {
+ prepareToStart();
+ }
+
+ @Override
+ public void onErrorOccurred(boolean isRecording)
+ {
+ prepareToStart();
}
/**
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;
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";
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()
{
{
if (runMode.isRecordingMode())
{
- runMode.changeRunMode(false);
+ runMode.changeRunMode(false, this);
+ return;
}
}
catch (Exception e)
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
-/*
- if (runMode.isRecordingMode())
- {
- runMode.changeRunMode(false);
- }
-*/
refreshImpl();
}
});
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;
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";
}
@Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
+ public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater)
{
try
{
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;
if (runMode.isRecordingMode())
{
// Threadで呼んではダメみたいだ...
- runMode.changeRunMode(false);
+ runMode.changeRunMode(false, this);
+ return;
}
-
viewPager.setCurrentItem(contentIndex);
- }
+ }
@Override
public void onPause()
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()
{
{
bar.setTitle(path);
}
- activity.getSupportActionBar().setTitle(path);
+ //activity.getSupportActionBar().setTitle(path);
activity.getFragmentManager().invalidateOptionsMenu();
}
}
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;
* 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;
if ((changeRunModeExecutor != null) && (!changeRunModeExecutor.isRecordingMode()))
{
// Runモードを切り替える。(でも切り替えると、設定がクリアされてしまう...。
- changeRunModeExecutor.changeRunMode(true);
+ changeRunModeExecutor.changeRunMode(true, this);
+ return;
}
synchronizeCameraProperties(true);
}
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);
+ }
+
/**
*
*