package net.osdn.gokigen.cameratest.camtest;
import android.app.Activity;
+import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PointF;
import net.osdn.gokigen.cameratest.fuji.preference.FujiPreferenceFragment;
import net.osdn.gokigen.cameratest.fuji.ILiveViewImage;
import net.osdn.gokigen.cameratest.fuji.ReceivedDataHolder;
+import net.osdn.gokigen.cameratest.fuji.preference.IPreferencePropertyAccessor;
import net.osdn.gokigen.cameratest.fuji.statuses.IFujiStatus;
import net.osdn.gokigen.cameratest.fuji.statuses.IFujiStatusNotify;
import androidx.annotation.NonNull;
+import androidx.preference.PreferenceManager;
public class CamTest implements View.OnClickListener, View.OnTouchListener, ILiveViewImage, IFujiStatusNotify
{
//prepareFile();
Snackbar.make(activity.findViewById(R.id.constraintLayout), R.string.connect, Snackbar.LENGTH_SHORT).show();
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
+ final boolean isBothLiveView = preferences.getBoolean(IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW, false);
+
showMessageText("START CONNECT");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
- boolean ret = connection.start_connect();
+ boolean ret = connection.start_connect(isBothLiveView);
if (!ret)
{
- showMessageText("CONNECT FAILURE...");
+ showMessageText("CONNECT FAILURE... : " + isBothLiveView);
}
}
});
this.statusChecker = new FujiStatusChecker(this, notify);
}
- public boolean start_connect()
+ public boolean start_connect(boolean isBothLiveView)
{
boolean ret = false;
- if (connect_to_camera())
+ if (connect_to_camera(isBothLiveView))
{
ret = requestStatus();
if (ret)
return (ret);
}
- private boolean connect_to_camera()
+ private boolean connect_to_camera(boolean isBothLiveView)
{
try
{
dump_bytes(1, rx_bytes);
Thread.sleep(50);
-/**/
// なんだろう?? (送信が必要なようだが)
comm.send_to_camera(sequence.start_message2(), true);
rx_bytes = comm.receive_from_camera();
dump_bytes(2, rx_bytes);
Thread.sleep(50);
-/**/
-/**/
+
// two_part messageを発行 (その1)
comm.send_to_camera(sequence.start_message3_1(), true);
rx_bytes = comm.receive_from_camera();
dump_bytes(3, rx_bytes);
Thread.sleep(50);
- // two_part messageを発行 (その2)
- comm.send_to_camera(sequence.start_message3_2(), false);
- rx_bytes = comm.receive_from_camera();
- dump_bytes(4, rx_bytes);
- Thread.sleep(50);
-/**/
+ if (rx_bytes.getData().length <= 50)
+ {
+ // two_part messageを発行 (その2)
+ comm.send_to_camera(sequence.start_message3_2(), false);
+ rx_bytes = comm.receive_from_camera();
+ dump_bytes(4, rx_bytes);
+ Thread.sleep(50);
+ }
-/**/
// remote mode
comm.send_to_camera(sequence.start_message4(), true);
rx_bytes = comm.receive_from_camera();
dump_bytes(5, rx_bytes);
Thread.sleep(50);
-/**/
-/**/
- // two_part messageを発行 (その1)
- comm.send_to_camera(sequence.start_message5_1(), true);
- rx_bytes = comm.receive_from_camera();
- dump_bytes(6, rx_bytes);
- Thread.sleep(50);
- // two_part messageを発行 (その2)
- comm.send_to_camera(sequence.start_message5_2(), false);
- rx_bytes = comm.receive_from_camera();
- dump_bytes(7, rx_bytes);
- Thread.sleep(50);
-/**/
-/**/
- // ????
- comm.send_to_camera(sequence.start_message6(), true);
- rx_bytes = comm.receive_from_camera();
- dump_bytes(8, rx_bytes);
- Thread.sleep(50);
+ if (!isBothLiveView)
+ {
+ // two_part messageを発行 (その1)
+ comm.send_to_camera(sequence.start_message5_1(), true);
+ rx_bytes = comm.receive_from_camera();
+ dump_bytes(6, rx_bytes);
+ Thread.sleep(50);
+
+ // two_part messageを発行 (その2)
+ comm.send_to_camera(sequence.start_message5_2(), false);
+ rx_bytes = comm.receive_from_camera();
+ dump_bytes(7, rx_bytes);
+ Thread.sleep(50);
+
+ // ????
+ comm.send_to_camera(sequence.start_message6(), true);
+ rx_bytes = comm.receive_from_camera();
+ dump_bytes(8, rx_bytes);
+ Thread.sleep(50);
+
+ // ????
+ comm.send_to_camera(sequence.start_message7(), true);
+ rx_bytes = comm.receive_from_camera();
+ dump_bytes(9, rx_bytes);
+ Thread.sleep(50);
+
+ // ????
+ comm.send_to_camera(sequence.start_message8(), true);
+ rx_bytes = comm.receive_from_camera();
+ dump_bytes(10, rx_bytes);
+ Thread.sleep(50);
+ }
- // ????
- comm.send_to_camera(sequence.start_message7(), true);
- rx_bytes = comm.receive_from_camera();
- dump_bytes(9, rx_bytes);
- Thread.sleep(50);
-/**/
-/**/
- // ????
- comm.send_to_camera(sequence.start_message8(), true);
- rx_bytes = comm.receive_from_camera();
- dump_bytes(10, rx_bytes);
- Thread.sleep(50);
-/**/
// リモート制御の開始!
comm.send_to_camera(sequence.camera_remote_message(), true);
package net.osdn.gokigen.cameratest.fuji.preference;
import android.content.Context;
+import android.content.SharedPreferences;
import android.os.Bundle;
+import android.util.Log;
import androidx.annotation.NonNull;
+import androidx.fragment.app.FragmentActivity;
+import androidx.preference.CheckBoxPreference;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
+import androidx.preference.PreferenceManager;
import net.osdn.gokigen.cameratest.IApplicationControl;
import net.osdn.gokigen.cameratest.R;
-public class FujiPreferenceFragment extends PreferenceFragmentCompat
+import java.util.Map;
+
+public class FujiPreferenceFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener
{
+ private final String TAG = toString();
+ private SharedPreferences preferences = null;
private PowerOffController powerOffController = null;
/**
powerOffController = new PowerOffController(context, control);
}
+ /**
+ *
+ *
+ */
+ @Override
+ public void onAttach(@NonNull Context activity)
+ {
+ super.onAttach(activity);
+ Log.v(TAG, "onAttach()");
+ try
+ {
+ // Preference をつかまえる
+ preferences = PreferenceManager.getDefaultSharedPreferences(activity);
+
+ // Preference を初期設定する
+ initializePreferences();
+
+ preferences.registerOnSharedPreferenceChangeListener(this);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
{
findPreference("exit_application").setOnPreferenceClickListener(powerOffController);
}
+
+ /**
+ * Preferenceの初期化...
+ *
+ */
+ private void initializePreferences()
+ {
+ try
+ {
+ Map<String, ?> items = preferences.getAll();
+ SharedPreferences.Editor editor = preferences.edit();
+
+ if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
+ editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
+ }
+ if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
+ editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
+ }
+ if (!items.containsKey(IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW)) {
+ editor.putBoolean(IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW, false);
+ }
+ editor.apply();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
+ {
+ Log.v(TAG, "onSharedPreferenceChanged() : " + key);
+ boolean value;
+ if (key != null)
+ {
+ switch (key)
+ {
+ case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
+ value = preferences.getBoolean(key, true);
+ Log.v(TAG, " " + key + " , " + value);
+ break;
+
+ case IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW:
+ value = preferences.getBoolean(key, false);
+ Log.v(TAG, " " + key + " , " + value);
+ break;
+
+ default:
+ String strValue = preferences.getString(key, "");
+ setListPreference(key, key, strValue);
+ break;
+ }
+ }
+ }
+
+ /**
+ *
+ *
+ */
+ @Override
+ public void onResume()
+ {
+ super.onResume();
+ Log.v(TAG, "onResume() Start");
+ try
+ {
+ synchronizedProperty();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ Log.v(TAG, "onResume() End");
+ }
+
+ /**
+ *
+ *
+ */
+ @Override
+ public void onPause()
+ {
+ super.onPause();
+ Log.v(TAG, "onPause() Start");
+ try
+ {
+ // Preference変更のリスナを解除
+ preferences.unregisterOnSharedPreferenceChangeListener(this);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ Log.v(TAG, "onPause() End");
+ }
+
+ /**
+ * ListPreference の表示データを設定
+ *
+ * @param pref_key Preference(表示)のキー
+ * @param key Preference(データ)のキー
+ * @param defaultValue Preferenceのデフォルト値
+ */
+ private void setListPreference(String pref_key, String key, String defaultValue)
+ {
+ try
+ {
+ ListPreference pref;
+ pref = (ListPreference) findPreference(pref_key);
+ String value = preferences.getString(key, defaultValue);
+ if (pref != null)
+ {
+ pref.setValue(value);
+ pref.setSummary(value);
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * BooleanPreference の表示データを設定
+ *
+ * @param pref_key Preference(表示)のキー
+ * @param key Preference(データ)のキー
+ * @param defaultValue Preferenceのデフォルト値
+ */
+ private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
+ {
+ try
+ {
+ CheckBoxPreference pref = (CheckBoxPreference) findPreference(pref_key);
+ if (pref != null) {
+ boolean value = preferences.getBoolean(key, defaultValue);
+ pref.setChecked(value);
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ *
+ *
+ */
+ private void synchronizedProperty()
+ {
+ final FragmentActivity activity = getActivity();
+ if (activity != null)
+ {
+ activity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ try
+ {
+ // Preferenceの画面に反映させる
+ setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
+ setBooleanPreference(IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW, IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW, false);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+ });
+ }
+ }
}
public interface IPreferencePropertyAccessor
{
String EXIT_APPLICATION = "exit_application";
+
String CONNECTION_METHOD = "connection_method";
String CONNECTION_METHOD_DEFAULT_VALUE = "FUJI_X";
+ String CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW = "capture_both_camera_and_live_view";
+
+ String FUJIX_DISPLAY_CAMERA_VIEW = "fujix_display_camera_view";
+
}
boolean isStatusUpdated = false;
try
{
+ if (data.length < 14)
+ {
+ Log.v(TAG, "received status length is short. (" + data.length + " bytes.)");
+ return;
+ }
+
int nofStatus = (data[13] * 256) + data[12];
//Log.v(TAG, "status Received. " + data.length + " bytes. [status : " + nofStatus + "]");
<string name="pref_degug_info">Debug Information</string>
<string name="pref_summary_debug_info">LogCat Information</string>
+ <string name="pref_fujix_display_camera_view">Use Camera Display</string>
+ <string name="pref_fujix_display_camera_view_summary">Shows liveview screen both camera and smartphone.</string>
+
<string name="pref_special_thanks">Special Thanks to : fuji-cam-wifi-tool</string>
<PreferenceCategory
android:title="@string/pref_cat_camera">
+ <CheckBoxPreference
+ android:key="fujix_display_camera_view"
+ android:title="@string/pref_fujix_display_camera_view"
+ android:summary="@string/pref_fujix_display_camera_view_summary"/>
<CheckBoxPreference
android:key="capture_both_camera_and_live_view"