FujiXStatusChecker(@NonNull Activity activity, @NonNull IFujiXCommandPublisher issuer)
{
this.issuer = issuer;
- this.statusHolder = new FujiXStatusHolder();
+ this.statusHolder = new FujiXStatusHolder(issuer);
try
{
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
}
@Override
- public void setStatus(@NonNull String key, @NonNull String value)
+ public void setStatus(@NonNull final String key, @NonNull final String value)
{
try
{
- if (logcat)
- {
- Log.v(TAG, "setStatus(" + key + ", " + value + ")");
- }
-
- // ここで設定を行う。
+ Thread thread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ if (statusHolder != null)
+ {
+ statusHolder.setItemStatus(key, value);
+ }
+ }
+ });
+ thread.start();
}
catch (Exception e)
{
import androidx.annotation.Nullable;
import androidx.collection.SparseArrayCompat;
+import net.osdn.gokigen.gr2control.camera.ICameraStatus;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.FujiXReplyMessageReceiver;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandPublisher;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.SetPropertyValue;
import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXBatteryMode;
import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXCameraProperties;
import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXFSSControl;
class FujiXStatusHolder
{
private final String TAG = toString();
+ private final IFujiXCommandPublisher publisher;
private static final boolean logcat = true;
private SparseIntArray statusHolder;
private SparseArrayCompat<String> statusNameArray;
- FujiXStatusHolder()
+ FujiXStatusHolder(@NonNull IFujiXCommandPublisher publisher)
{
statusHolder = new SparseIntArray();
statusHolder.clear();
+ this.publisher = publisher;
statusNameArray = new SparseArrayCompat<>();
prepareStatusNameArray();
}
case IFujiXCameraProperties.UNKNOWN_DF41:
case IFujiXCameraProperties.UNKNOWN_DF26:
case IFujiXCameraProperties.UNKNOWN_DF27:
+ default:
updateUnknownValue(id, previous, current);
break;
}
return (getAvailableStatusNameList());
}
+ if (listKey.matches(ICameraStatus.EFFECT))
+ {
+ return (getAvailableEffectItemList());
+ }
+
///// 選択可能なステータスの一覧を取得する : でも以下はアイテム名の一覧... /////
ArrayList<String> selection = new ArrayList<>();
try
return (selection);
}
+ private List<String> getAvailableEffectItemList()
+ {
+ // EFFECTの選択肢をリストにして返す : Film Simulation にした。
+ ArrayList<String> selection = new ArrayList<>();
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_PROVIA_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_VELVIA_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ASTIA_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_SEPIA_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_PRO_NEG_HI_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_PRO_NEG_STD_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_Y_FILTER_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_R_FILTER_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_G_FILTER_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_CHROME_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_Y_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_R_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_G_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ETERNA_STR);
+ selection.add(IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_NEGATIVE_STR);
+ return(selection);
+ }
+
+ private String getCurrentEffectStatus()
+ {
+ // EFFECTの現在状態を応答する : FILM Simulationにした
+ try
+ {
+ int value = statusHolder.get(IFujiXCameraProperties.FILM_SIMULATION);
+ List<String> itemList = getAvailableEffectItemList();
+ if ((value >= IFujiXFilmSimulation.FILM_SIMULATION_MIN)&&(value < itemList.size()))
+ {
+ return (itemList.get(value - 1));
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return ("");
+ }
+
+ private void setEffectItem(String value)
+ {
+ try
+ {
+ int index = 1;
+ List<String> itemList = getAvailableEffectItemList();
+ for (String item : itemList)
+ {
+ if (item.matches(value))
+ {
+ // 見つかった! この値に設定する
+ publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyMessageReceiver(" Set Film Simulation", true), IFujiXCameraProperties.FILM_SIMULATION, 4, index));
+ return;
+ }
+ index++;
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+
String getItemStatus(String key)
{
+ if (key.matches(ICameraStatus.EFFECT))
+ {
+ return (getCurrentEffectStatus());
+ }
try
{
int strIndex = key.indexOf("x");
return ("? [" + key + "]");
}
+ void setItemStatus(@NonNull String key, @NonNull String value)
+ {
+ try
+ {
+ if (logcat)
+ {
+ Log.v(TAG, "setStatus(" + key + ", " + value + ")");
+ }
+
+ if (key.matches(ICameraStatus.EFFECT))
+ {
+ setEffectItem(value);
+ return;
+ }
+
+ // ここで設定を行う。
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+
private void dumpStatus()
{
try
--- /dev/null
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command;
+
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import net.osdn.gokigen.gr2control.camera.utils.SimpleLogDumper;
+
+public class FujiXReplyMessageReceiver implements IFujiXCommandCallback
+{
+ private final String TAG = toString();
+ private final String messageHeader;
+ private final boolean isLogging;
+
+
+ public FujiXReplyMessageReceiver(@NonNull String messageHeader, boolean isLogging)
+ {
+ this.messageHeader = messageHeader;
+ this.isLogging = isLogging;
+ }
+
+ @Override
+ public void receivedMessage(int id, byte[] rx_body)
+ {
+ if (isLogging)
+ {
+ SimpleLogDumper.dump_bytes(messageHeader, rx_body);
+ }
+ }
+
+ @Override
+ public void onReceiveProgress(int currentBytes, int totalBytes, byte[] rx_body)
+ {
+ if (isLogging)
+ {
+ Log.v(TAG, " " + messageHeader + " onReceiveProgress : " + currentBytes + "/" + totalBytes + " Bytes.");
+ }
+ }
+
+ @Override
+ public boolean isReceiveMulti()
+ {
+ return (false);
+ }
+}
int FILM_SIMULATION_ETERNA =16;
int FILM_SIMULATION_CLASSIC_NEGATIVE = 17;
int FILM_SIMULATION_MAX = 18;
+
+ String FILM_SIMULATION_PROVIA_STR = "PROVIA";
+ String FILM_SIMULATION_VELVIA_STR = "Velvia";
+ String FILM_SIMULATION_ASTIA_STR = "ASTIA";
+ String FILM_SIMULATION_MONOCHROME_STR = "MONOCHROME";
+ String FILM_SIMULATION_SEPIA_STR = "SEPIA";
+ String FILM_SIMULATION_PRO_NEG_HI_STR = "PRO Neg. Hi";
+ String FILM_SIMULATION_PRO_NEG_STD_STR = "PRO Neg. Std";
+ String FILM_SIMULATION_MONOCHROME_Y_FILTER_STR = "MONOCHROME+Ye";
+ String FILM_SIMULATION_MONOCHROME_R_FILTER_STR = "MONOCHROME+R";
+ String FILM_SIMULATION_MONOCHROME_G_FILTER_STR = "MONOCHROME+G";
+ String FILM_SIMULATION_CLASSIC_CHROME_STR = "CLASSIC CHROME";
+ String FILM_SIMULATION_ACROS_STR = "ACROS";
+ String FILM_SIMULATION_ACROS_Y_STR = "ACROS+Ye";
+ String FILM_SIMULATION_ACROS_R_STR = "ACROS+R";
+ String FILM_SIMULATION_ACROS_G_STR = "ACROS+G";
+ String FILM_SIMULATION_ETERNA_STR = "ETERNA";
+ String FILM_SIMULATION_CLASSIC_NEGATIVE_STR = "CLASSIC Neg.";
+
}
private LiveViewClickTouchListener onClickTouchListener = null;
private LiveViewControlPanelClickListener onPanelClickListener = null;
private LiveViewKeyPanelClickListener onKeyPanelClickListener = null;
+ private LiveViewFujiXKeyPanelClickListener fujiXOnKeyPanelClickListener = null;
private TextView statusArea = null;
private TextView focalLengthArea = null;
setKeyPanelClickListener(view, R.id.button_lcd_onoff);
setKeyPanelClickListener(view, R.id.button_highlight);
+ if (fujiXOnKeyPanelClickListener == null)
+ {
+ fujiXOnKeyPanelClickListener = new LiveViewFujiXKeyPanelClickListener(interfaceProvider, vibrator);
+ }
+ //setFujiXKeyPanelClickListener(view, xxx);
+
+
connectStatus = view.findViewById(R.id.connect_disconnect_button);
if (connectStatus != null)
{
}
}
+ private void setFujiXKeyPanelClickListener(View view, int id)
+ {
+ try
+ {
+ View button = view.findViewById(id);
+ if (button != null)
+ {
+ button.setOnClickListener(fujiXOnKeyPanelClickListener);
+ button.setOnLongClickListener(fujiXOnKeyPanelClickListener);
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
/**
*
*/
--- /dev/null
+package net.osdn.gokigen.gr2control.liveview;
+
+import android.os.Vibrator;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import net.osdn.gokigen.gr2control.camera.IInterfaceProvider;
+
+public class LiveViewFujiXKeyPanelClickListener implements View.OnClickListener, View.OnLongClickListener
+{
+ private final String TAG = toString();
+ private final IInterfaceProvider interfaceProvider;
+ private final Vibrator vibrator;
+
+ LiveViewFujiXKeyPanelClickListener(@NonNull IInterfaceProvider interfaceProvider, @Nullable Vibrator vibrator)
+ {
+ this.interfaceProvider = interfaceProvider;
+ this.vibrator = vibrator;
+ }
+
+
+ @Override
+ public void onClick(View v)
+ {
+
+ }
+
+ @Override
+ public boolean onLongClick(View v)
+ {
+ return (false);
+ }
+}
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="connection_method">
- <item>Ricoh GR II / PENTAX DSLR</item>
+ <item>Ricoh GR Series / PENTAX DSLR</item>
<item>OPC(Olympus Air)</item>
<item>Fujifilm X</item>
</string-array>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="connection_method">
- <item>Ricoh GR II / PENTAX DSLR</item>
+ <item>Ricoh GR Series / PENTAX DSLR</item>
<item>OPC(Olympus Air)</item>
<item>Fujifilm X</item>
</string-array>