package net.osdn.gokigen.a01d;
import android.Manifest;
+import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
+import android.support.v7.preference.PreferenceManager;
import android.util.Log;
import android.view.WindowManager;
import net.osdn.gokigen.a01d.camera.olympus.IOlympusInterfaceProvider;
+import net.osdn.gokigen.a01d.camera.olympus.cameraproperty.OlyCameraPropertyListFragment;
import net.osdn.gokigen.a01d.camera.olympus.wrapper.OlympusInterfaceProvider;
import net.osdn.gokigen.a01d.camera.olympus.wrapper.connection.ICameraStatusReceiver;
import net.osdn.gokigen.a01d.camera.olympus.wrapper.connection.IOlyCameraConnection;
+import net.osdn.gokigen.a01d.liveview.IStatusViewDrawer;
import net.osdn.gokigen.a01d.liveview.LiveViewFragment;
+import net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor;
import net.osdn.gokigen.a01d.preference.PreferenceFragment;
/**
- *
+ * A01d ;
*
*/
public class A01dMain extends AppCompatActivity implements ICameraStatusReceiver, IChangeScene
{
private final String TAG = toString();
private IOlympusInterfaceProvider interfaceProvider = null;
+ private IStatusViewDrawer statusViewDrawer = null;
+
+ private PreferenceFragment preferenceFragment = null;
+ private OlyCameraPropertyListFragment propertyListFragment = null;
@Override
protected void onCreate(Bundle savedInstanceState)
*/
private void onReadyClass()
{
-
-
+ // 自動接続の支持があったとき
+ if (isAutoConnectCamera())
+ {
+ changeCameraConnection();
+ }
}
/**
private void initializeFragment()
{
LiveViewFragment fragment = new LiveViewFragment();
+ statusViewDrawer = fragment;
fragment.prepare(this);
fragment.setRetainInstance(true);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
}
/**
+ *
+ */
+ @Override
+ protected void onPause()
+ {
+ super.onPause();
+ try
+ {
+ IOlyCameraConnection connection = interfaceProvider.getOlyCameraConnection();
+ if (connection != null)
+ {
+ connection.stopWatchWifiStatus(this);
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
* カメラのプロパティ一覧画面を開く
* (カメラと接続中のときのみ)
*
@Override
public void changeSceneToCameraPropertyList()
{
-
+ IOlyCameraConnection connection = interfaceProvider.getOlyCameraConnection();
+ if (connection != null)
+ {
+ IOlyCameraConnection.CameraConnectionStatus status = connection.getConnectionStatus();
+ if (status == IOlyCameraConnection.CameraConnectionStatus.CONNECTED)
+ {
+ if (propertyListFragment == null)
+ {
+ propertyListFragment = new OlyCameraPropertyListFragment();
+ }
+ propertyListFragment.setInterface(this, interfaceProvider.getCameraPropertyProvider());
+ FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
+ transaction.replace(R.id.fragment1, propertyListFragment);
+ // backstackに追加
+ transaction.addToBackStack(null);
+ transaction.commit();
+ }
+ }
}
/**
@Override
public void changeSceneToConfiguration()
{
- PreferenceFragment fragment = new PreferenceFragment();
- fragment.setInterface(this, interfaceProvider, this);
+ if (preferenceFragment == null)
+ {
+ preferenceFragment = new PreferenceFragment();
+ }
+ preferenceFragment.setInterface(this, interfaceProvider, this);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
- transaction.replace(R.id.fragment1, fragment);
+ transaction.replace(R.id.fragment1, preferenceFragment);
// backstackに追加
transaction.addToBackStack(null);
transaction.commit();
-
}
/**
IOlyCameraConnection.CameraConnectionStatus status = connection.getConnectionStatus();
if (status == IOlyCameraConnection.CameraConnectionStatus.CONNECTED)
{
- //
+ // 接続中のときには切断する
connection.disconnect(false);
return;
}
+ // 接続中でない時は、接続中にする
connection.startWatchWifiStatus(this);
}
}
}
}
+ /**
+ *
+ *
+ */
@Override
public void onStatusNotify(String message)
{
Log.v(TAG, " CONNECTION MESSAGE : " + message);
+ if (statusViewDrawer != null)
+ {
+ statusViewDrawer.updateStatusView(message);
+ IOlyCameraConnection connection = interfaceProvider.getOlyCameraConnection();
+ if (connection != null)
+ {
+ statusViewDrawer.updateConnectionStatus(connection.getConnectionStatus());
+ }
+ }
}
-
+ /**
+ *
+ *
+ */
@Override
public void onCameraConnected()
{
Log.v(TAG, "onCameraConnected()");
- IOlyCameraConnection connection = interfaceProvider.getOlyCameraConnection();
- if (connection != null)
+ try {
+ IOlyCameraConnection connection = interfaceProvider.getOlyCameraConnection();
+ if (connection != null)
+ {
+ // クラス構造をミスった...のでこんなところで、無理やりステータスを更新する
+ connection.forceUpdateConnectionStatus(IOlyCameraConnection.CameraConnectionStatus.CONNECTED);
+ }
+ if (statusViewDrawer != null)
+ {
+ statusViewDrawer.updateConnectionStatus(IOlyCameraConnection.CameraConnectionStatus.CONNECTED);
+ }
+ }
+ catch (Exception e)
{
- // クラス構造をミスった...のでこんなところで、無理やりステータスを更新する
- connection.forceUpdateConnectionStatus(IOlyCameraConnection.CameraConnectionStatus.CONNECTED);
+ e.printStackTrace();
}
-
}
+ /**
+ *
+ *
+ */
@Override
public void onCameraDisconnected()
{
Log.v(TAG, "onCameraDisconnected()");
+ if (statusViewDrawer != null)
+ {
+ statusViewDrawer.updateStatusView(getString(R.string.camera_disconnected));
+ statusViewDrawer.updateConnectionStatus(IOlyCameraConnection.CameraConnectionStatus.DISCONNECTED);
+ }
}
+ /**
+ *
+ *
+ */
@Override
public void onCameraOccursException(String message, Exception e)
{
Log.v(TAG, "onCameraOccursException() " + message);
-
+ IOlyCameraConnection connection = interfaceProvider.getOlyCameraConnection();
+ if (connection != null)
+ {
+ connection.alertConnectingFailed(message + " " + e.getLocalizedMessage());
+ }
+ if (statusViewDrawer != null)
+ {
+ statusViewDrawer.updateStatusView(message);
+ if (connection != null)
+ {
+ statusViewDrawer.updateConnectionStatus(connection.getConnectionStatus());
+ }
+ }
}
- @Override
- public boolean isAutoConnectCamera()
+ private boolean isAutoConnectCamera()
{
- return (true);
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
+ return (preferences.getBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true));
}
}
import net.osdn.gokigen.a01d.camera.olympus.wrapper.ICameraHardwareStatus;
import net.osdn.gokigen.a01d.camera.olympus.wrapper.ICameraRunMode;
-import net.osdn.gokigen.a01d.camera.olympus.wrapper.IOlyCameraPropertyProvider;
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.property.IOlyCameraPropertyProvider;
import net.osdn.gokigen.a01d.camera.olympus.wrapper.connection.IOlyCameraConnection;
/**
import android.util.Log;
import net.osdn.gokigen.a01d.R;
-import net.osdn.gokigen.a01d.camera.olympus.wrapper.IOlyCameraPropertyProvider;
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.property.IOlyCameraPropertyProvider;
import java.util.ArrayList;
import java.util.Collections;
import android.widget.ListView;
import net.osdn.gokigen.a01d.R;
-import net.osdn.gokigen.a01d.camera.olympus.wrapper.IOlyCameraPropertyProvider;
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.property.IOlyCameraPropertyProvider;
import java.util.List;
import java.util.HashMap;
import net.osdn.gokigen.a01d.R;
-import net.osdn.gokigen.a01d.camera.olympus.wrapper.IOlyCameraPropertyProvider;
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.property.IOlyCameraPropertyProvider;
public class OlyCameraPropertyListFragment extends Fragment implements CameraPropertyLoader.IPropertyLoaderCallback
{
package net.osdn.gokigen.a01d.camera.olympus.wrapper;
import android.app.Activity;
+import android.util.Log;
import jp.co.olympus.camerakit.OLYCamera;
*
*
*/
-class OlyCameraWrapper
+class OlyCameraWrapper implements ICameraRunMode
{
- private final Activity context;
+ private final String TAG = toString();
+ //private final Activity context;
private final OLYCamera camera;
OlyCameraWrapper(Activity context)
{
- this.context = context;
+ //this.context = context;
camera = new OLYCamera();
camera.setContext(context.getApplicationContext());
}
return (camera);
}
+ @Override
+ public void changeRunMode(boolean isRecording)
+ {
+ OLYCamera.RunMode runMode = (isRecording) ? OLYCamera.RunMode.Recording : OLYCamera.RunMode.Playback;
+ Log.v(TAG, "changeRunMode() : " + runMode);
+ try
+ {
+ camera.changeRunMode(runMode);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public boolean isRecordingMode()
+ {
+ boolean isRecordingMode = false;
+ try
+ {
+ OLYCamera.RunMode runMode = camera.getRunMode();
+ isRecordingMode = (runMode == OLYCamera.RunMode.Recording);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (isRecordingMode);
+ }
}
import net.osdn.gokigen.a01d.camera.olympus.wrapper.connection.ICameraStatusReceiver;
import net.osdn.gokigen.a01d.camera.olympus.wrapper.connection.IOlyCameraConnection;
import net.osdn.gokigen.a01d.camera.olympus.wrapper.connection.OlyCameraConnection;
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.property.IOlyCameraPropertyProvider;
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.property.OlyCameraPropertyProxy;
/**
{
private final OlyCameraWrapper wrapper;
private final OlyCameraConnection connection;
+ private final OlyCameraPropertyProxy propertyProxy;
public OlympusInterfaceProvider(Activity context, ICameraStatusReceiver provider)
{
this.wrapper = new OlyCameraWrapper(context);
this.connection = new OlyCameraConnection(context, this.wrapper.getOLYCamera(), provider);
+ this.propertyProxy = new OlyCameraPropertyProxy(this.wrapper.getOLYCamera());
}
@Override
public IOlyCameraPropertyProvider getCameraPropertyProvider()
{
- return null;
+ return (propertyProxy);
}
@Override
void onCameraConnected();
void onCameraDisconnected();
void onCameraOccursException(String message, Exception e);
-
- boolean isAutoConnectCamera();
}
void disconnect(final boolean powerOff);
void connect();
+ void alertConnectingFailed(String message);
+
/** 接続状態 **/
CameraConnectionStatus getConnectionStatus();
void forceUpdateConnectionStatus(CameraConnectionStatus status);
String action = intent.getAction();
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION))
{
+ Log.v(TAG,"onReceiveBroadcastOfConnection() : CONNECTIVITY_ACTION");
+
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
if (wifiManager.isWifiEnabled() && info != null && info.getNetworkId() != -1)
{
// 自動接続が指示されていた場合は、カメラとの接続処理を行う
- if (statusReceiver.isAutoConnectCamera())
- {
- connectToCamera();
- }
+ connectToCamera();
}
}
}
@Override
public void onDisconnectedByError(OLYCamera camera, OLYCameraKitException e)
{
+ Log.v(TAG, "onDisconnectedByError()");
connectionStatus = CameraConnectionStatus.DISCONNECTED;
// カメラが切れた時に通知する
*
* @param message 表示用のメッセージ
*/
- private void alertConnectingFailed(String message)
+ @Override
+ public void alertConnectingFailed(String message)
{
final AlertDialog.Builder builder = new AlertDialog.Builder(context)
.setTitle(context.getString(R.string.dialog_title_connect_failed))
-package net.osdn.gokigen.a01d.camera.olympus.wrapper;
+package net.osdn.gokigen.a01d.camera.olympus.wrapper.property;
import jp.co.olympus.camerakit.OLYCamera;
-package net.osdn.gokigen.a01d.camera.olympus.wrapper;
+package net.osdn.gokigen.a01d.camera.olympus.wrapper.property;
/**
* 使用するカメラプロパティのキー一覧
String SOUND_VOLUME_LEVEL = "SOUND_VOLUME_LEVEL";
String RAW = "RAW";
+ String FOCUS_STILL = "FOCUS_STILL";
+ String AE_LOCK_STATE = "AE_LOCK_STATE";
+
//String TAKE_MODE_MOVIE = "<TAKEMODE/movie>";
//String DRIVE_MODE_SINGLE = "<TAKE_DRIVE/DRIVE_NORMAL>";
}
-package net.osdn.gokigen.a01d.camera.olympus.wrapper;
+package net.osdn.gokigen.a01d.camera.olympus.wrapper.property;
import java.util.List;
import java.util.Map;
--- /dev/null
+package net.osdn.gokigen.a01d.camera.olympus.wrapper.property;
+
+import android.util.Log;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import jp.co.olympus.camerakit.OLYCamera;
+
+/**
+ * カメラプロパティをやり取りするクラス (Wrapperクラス)
+ */
+public class OlyCameraPropertyProxy implements IOlyCameraPropertyProvider
+{
+ private final String TAG = toString();
+ private final OLYCamera camera;
+
+ /**
+ * コンストラクタ
+ *
+ * @param camera OLYCameraクラス
+ */
+ public OlyCameraPropertyProxy(OLYCamera camera)
+ {
+ this.camera = camera;
+ }
+
+ /**
+ * フォーカス状態を知る(MF or AF)
+ * @return true : MF / false : AF
+ */
+ boolean isManualFocus()
+ {
+ boolean isManualFocus = false;
+ try
+ {
+ String value = camera.getCameraPropertyValue(IOlyCameraProperty.FOCUS_STILL);
+ Log.v(TAG, "OlyCameraPropertyProxy::isManualFocus() " + value);
+ isManualFocus = !(value.contains("AF"));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (isManualFocus);
+ }
+
+ /**
+ * AE ロック状態を知る
+ *
+ * @return true : AE Lock / false : AE Unlock
+ */
+ boolean isExposureLocked()
+ {
+ boolean isExposureLocked =false;
+ try
+ {
+ String value = camera.getCameraPropertyValue(IOlyCameraProperty.AE_LOCK_STATE);
+ Log.v(TAG, "OlyCameraPropertyProxy::isExposureLocked() " + value);
+ isExposureLocked = !(value.contains("UNLOCK"));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (isExposureLocked);
+ }
+
+ @Override
+ public Set<String> getCameraPropertyNames()
+ {
+ try
+ {
+ return (camera.getCameraPropertyNames());
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (null);
+ }
+
+ @Override
+ public String getCameraPropertyValue(String name)
+ {
+ try
+ {
+ return (camera.getCameraPropertyValue(name));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (null);
+ }
+
+ @Override
+ public Map<String, String> getCameraPropertyValues(Set<String> names)
+ {
+ try
+ {
+ return (camera.getCameraPropertyValues(names));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (null);
+ }
+
+ @Override
+ public String getCameraPropertyTitle(String name)
+ {
+ try
+ {
+ return (camera.getCameraPropertyTitle(name));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (null);
+ }
+
+ @Override
+ public List<String> getCameraPropertyValueList(String name)
+ {
+ try
+ {
+ return (camera.getCameraPropertyValueList(name));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (null);
+ }
+
+ @Override
+ public String getCameraPropertyValueTitle(String propertyValue)
+ {
+ try
+ {
+ return (camera.getCameraPropertyValueTitle(propertyValue));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (null);
+ }
+
+ @Override
+ public void setCameraPropertyValue(String name, String value)
+ {
+ try
+ {
+ camera.setCameraPropertyValue(name, value);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void setCameraPropertyValues(Map<String, String> values)
+ {
+ try
+ {
+ camera.setCameraPropertyValues(values);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public boolean canSetCameraProperty(String name)
+ {
+ try
+ {
+ return (camera.canSetCameraProperty(name));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (false);
+ }
+}
package net.osdn.gokigen.a01d.liveview;
-interface IStatusViewDrawer
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.connection.IOlyCameraConnection;
+
+public interface IStatusViewDrawer
{
void updateGridIcon();
- void updateConnectionStatus();
+ void updateConnectionStatus(IOlyCameraConnection.CameraConnectionStatus connectionStatus);
+ void updateStatusView(String message);
/*
void updateStatusView(String message);
void updateFocusAssistStatus();
*
*
*/
-
class LiveViewClickListener implements View.OnClickListener
{
final String TAG = toString();
import net.osdn.gokigen.a01d.IChangeScene;
import net.osdn.gokigen.a01d.R;
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.connection.IOlyCameraConnection;
import net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor;
import java.io.File;
connectStatus = view.findViewById(R.id.connect_disconnect_button);
connectStatus.setOnClickListener(onClickListener);
- updateConnectionStatus();
+ updateConnectionStatus(IOlyCameraConnection.CameraConnectionStatus.UNKNOWN);
statusArea = view.findViewById(R.id.informationMessageTextView);
}
*
*/
@Override
- public void updateConnectionStatus()
+ public void updateConnectionStatus(IOlyCameraConnection.CameraConnectionStatus connectionStatus)
{
try
{
int id = R.drawable.ic_cloud_off_black_24dp;
+ if (connectionStatus == IOlyCameraConnection.CameraConnectionStatus.CONNECTING)
+ {
+ id = R.drawable.ic_cloud_queue_black_24dp;
+ }
+ else if (connectionStatus == IOlyCameraConnection.CameraConnectionStatus.CONNECTED)
+ {
+ id = R.drawable.ic_cloud_done_black_24dp;
+ }
connectStatus.setImageDrawable(ResourcesCompat.getDrawable(getResources(), id, null));
connectStatus.invalidate();
imageView.invalidate();
* 表示エリアに文字を表示する
*
*/
+ @Override
public void updateStatusView(String message)
{
messageValue = message;
}
*/
-
private void runOnUiThread(Runnable action)
{
Activity activity = getActivity();
import net.osdn.gokigen.a01d.R;
import net.osdn.gokigen.a01d.camera.olympus.wrapper.ICameraHardwareStatus;
import net.osdn.gokigen.a01d.camera.olympus.wrapper.ICameraRunMode;
-import net.osdn.gokigen.a01d.camera.olympus.wrapper.IOlyCameraProperty;
-import net.osdn.gokigen.a01d.camera.olympus.wrapper.IOlyCameraPropertyProvider;
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.property.IOlyCameraProperty;
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.property.IOlyCameraPropertyProvider;
import net.osdn.gokigen.a01d.camera.olympus.IOlympusInterfaceProvider;
import net.osdn.gokigen.a01d.camera.olympus.operation.CameraPowerOff;
import android.content.SharedPreferences;
import android.util.Log;
-import net.osdn.gokigen.a01d.camera.olympus.wrapper.IOlyCameraProperty;
-import net.osdn.gokigen.a01d.camera.olympus.wrapper.IOlyCameraPropertyProvider;
-import net.osdn.gokigen.a01d.camera.olympus.wrapper.CameraPropertyUtilities;
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.property.IOlyCameraProperty;
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.property.IOlyCameraPropertyProvider;
+import net.osdn.gokigen.a01d.camera.olympus.wrapper.property.CameraPropertyUtilities;
class PreferenceSynchronizer implements Runnable
{
android:gravity="start"
android:text="@string/information"
android:textColor="@color/background_translucent_dark"
- android:textSize="12pt" />
+ android:textSize="9pt" />
<ImageButton
android:id="@+id/camera_property_settings_button"
android:gravity="start"
android:text="@string/information"
android:textColor="@color/background_translucent_dark"
- android:textSize="12pt" />
+ android:textSize="9pt" />
<ImageButton
android:id="@+id/camera_property_settings_button"