1 package jp.sfjp.gokigen.a01c.olycamerawrapper.property;
3 import android.content.Context;
4 import android.content.SharedPreferences;
5 import android.preference.PreferenceManager;
6 import android.util.Log;
8 import java.text.DateFormat;
10 //import java.util.HashMap;
14 import jp.co.olympus.camerakit.OLYCamera;
15 //import jp.co.olympus.camerakit.OLYCameraKitException;
16 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOLYCameraObjectProvider;
19 * カメラプロパティを一括でバックアップしたり、リストアしたりするクラス
22 public class LoadSaveCameraProperties implements ILoadSaveCameraProperties
24 private final String TAG = toString();
26 private final Context parent;
27 private final OLYCamera camera;
28 private final IOlyCameraPropertyProvider propertyProvider;
30 public LoadSaveCameraProperties(Context context, IOlyCameraPropertyProvider propertyProvider, IOLYCameraObjectProvider provider)
32 this.camera = provider.getOLYCamera();
33 this.parent = context;
34 this.propertyProvider = propertyProvider;
38 * カメラの現在の設定を本体から読みだして記憶する
42 public void saveCameraSettings(String idHeader, String dataName)
44 // カメラから設定を一括で読みだして、Preferenceに記録する
45 if (propertyProvider.isConnected())
47 Map<String, String> values = null;
50 values = propertyProvider.getCameraPropertyValues(camera.getCameraPropertyNames());
56 //Log.v(TAG, "CameraPropertyBackupRestore::storeCameraSettings() : " + idHeader);
60 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
61 SharedPreferences.Editor editor = preferences.edit();
62 for (String key : values.keySet())
64 editor.putString(idHeader + key, values.get(key));
65 //Log.v(TAG, "storeCameraSettings(): " + idHeader + key + " , " + values.get(key));
67 DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
68 editor.putString(idHeader + DATE_KEY, dateFormat.format(new Date()));
69 editor.putString(idHeader + TITLE_KEY, dataName);
73 Log.v(TAG, "storeCameraSettings() COMMITED : " + idHeader + " [" + dataName + "]");
79 * Preferenceにあるカメラの設定をカメラに登録する
80 * (注: Read Onlyなパラメータを登録しようとするとエラーになるので注意)
83 public void loadCameraSettings(String idHeader)
85 Log.v(TAG, "loadCameraSettings() : START [" + idHeader + "]");
86 //loadCameraSettingsBatch(idHeader);
87 //loadCameraSettingsMiniBatch(idHeader, 5);
88 //loadCameraSettingsSequential(idHeader);
89 loadCameraSettingsOnlyDifferences(idHeader);
94 // * カメラのプロパティを1つづつ個別設定
97 private void loadCameraSettingsSequential(String idHeader)
100 // Restores my settings.
101 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
102 if (camera.isConnected())
104 String takeModeValue = preferences.getString(idHeader + TAKEMODE, null);
107 // TAKEMODE だけは先行して設定する(設定できないカメラプロパティもあるので...)
108 if (takeModeValue != null)
110 camera.setCameraPropertyValue(TAKEMODE, takeModeValue);
111 Log.v(TAG, "loadCameraSettings() TAKEMODE : " + takeModeValue);
118 Log.v(TAG, "loadCameraSettings() : loadCameraSettingsSequential() fail...");
121 Set<String> names = camera.getCameraPropertyNames();
122 for (String name : names)
124 String value = preferences.getString(idHeader + name, null);
127 if (propertyProvider.canSetCameraProperty(name))
129 // Read Onlyのプロパティを除外して登録
132 // カメラプロパティを個別登録(全パラメータを一括登録すると何か落ちている
133 Log.v(TAG, "loadCameraSettingsSequential(): " + value);
134 camera.setCameraPropertyValue(name, value);
136 //Thread.sleep(5); // 処理落ちしている?かもしれないので必要なら止める
145 Log.v(TAG, "loadCameraSettingsSequential() : END [" + idHeader + "]" + " " + setCount);
150 private void loadCameraSettingsBatch(String idHeader)
152 // Restores my settings.
153 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
154 if (camera.isConnected())
156 String takeModeValue = preferences.getString(idHeader + TAKEMODE, null);
159 // TAKEMODE だけは先行して設定する(設定できないカメラプロパティもあるので...)
160 if (takeModeValue != null)
162 camera.setCameraPropertyValue(TAKEMODE, takeModeValue);
163 Log.v(TAG, "loadCameraSettings() TAKEMODE : " + takeModeValue);
169 Log.v(TAG, "loadCameraSettings() : setCameraPropertyValue() fail...");
172 Map<String, String> values = new HashMap<>();
173 Set<String> names = camera.getCameraPropertyNames();
174 for (String name : names)
176 String value = preferences.getString(idHeader + name, null);
179 if (propertyProvider.canSetCameraProperty(name))
181 // Read Onlyのプロパティを除外して登録
182 values.put(name, value);
183 Log.v(TAG, "loadCameraSettings(): " + value);
187 if (values.size() > 0)
191 camera.setCameraPropertyValues(values);
193 catch (OLYCameraKitException e)
195 Log.w(TAG, "To change the camera properties is failed: " + e.getMessage());
202 Log.v(TAG, "loadCameraSettingsBatch() : END [" + idHeader + "]" + " " + values.size());
206 //// プロパティの一括設定 (ミニバッチ)
207 private void loadCameraSettingsMiniBatch(String idHeader, int batchSize)
209 // Restores my settings.
210 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
211 if (camera.isConnected())
213 String takeModeValue = preferences.getString(idHeader + TAKEMODE, null);
216 // TAKEMODE だけは先行して設定する(設定できないカメラプロパティもあるので...)
217 if (takeModeValue != null)
219 camera.setCameraPropertyValue(TAKEMODE, takeModeValue);
220 Log.v(TAG, "loadCameraSettings() TAKEMODE : " + takeModeValue);
226 Log.v(TAG, "loadCameraSettings() : setCameraPropertyValue() fail...");
230 Map<String, String> values = new HashMap<>();
231 Set<String> names = camera.getCameraPropertyNames();
232 for (String name : names)
234 String value = preferences.getString(idHeader + name, null);
237 if (propertyProvider.canSetCameraProperty(name))
239 // Read Onlyのプロパティを除外して登録
240 values.put(name, value);
242 Log.v(TAG, "loadCameraSettings(): " + value + " [" + (currentSize) + "]");
245 if (currentSize >= batchSize)
247 // バッチサイズの最大数到達...設定する
250 camera.setCameraPropertyValues(values);
251 Log.v(TAG, "setCameraPropertyValues() : " + currentSize);
253 catch (OLYCameraKitException e)
255 Log.w(TAG, "camera.setCameraPropertyValues() failed: " + e.getMessage());
265 if (values.size() > 0)
269 camera.setCameraPropertyValues(values);
271 catch (OLYCameraKitException e)
273 Log.w(TAG, "To change the camera properties is failed: " + e.getMessage());
280 Log.v(TAG, "loadCameraSettingsBatch() : END [" + idHeader + "]" + " " + values.size());
285 * カメラのプロパティを1つづつ個別設定(違っているものだけ設定する)
288 private boolean loadCameraSettingsOnlyDifferences(String idHeader)
293 // Restores my settings.
294 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
295 if (camera.isConnected())
299 Map<String, String> propertyValues;
302 propertyValues = propertyProvider.getCameraPropertyValues(propertyProvider.getCameraPropertyNames());
306 // 設定値が取得できなかった場合は、終了する。
310 if (propertyValues == null)
312 // プロパティの取得が失敗していたら、何もせずに折り返す
316 String takeModeValue = preferences.getString(idHeader + IOlyCameraProperty.TAKE_MODE, null);
319 // TAKEMODE だけは先行して設定する(設定できないカメラプロパティもあるので...)
320 if (takeModeValue != null)
322 propertyProvider.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, takeModeValue);
323 Log.v(TAG, "loadCameraSettingsOnlyDifferences() TAKEMODE : " + takeModeValue);
330 Log.v(TAG, "loadCameraSettings() : loadCameraSettingsOnlyDifferences() fail...");
333 Set<String> names = propertyProvider.getCameraPropertyNames();
334 for (String name : names)
336 String value = preferences.getString(idHeader + name, null);
337 String currentValue = propertyValues.get(name);
338 if ((value != null)&&(currentValue != null)&&(!value.equals(currentValue)))
341 if (propertyProvider.canSetCameraProperty(name))
343 // Read Onlyのプロパティを除外して登録
346 // カメラプロパティを個別登録(全パラメータを一括登録すると何か落ちている
347 Log.v(TAG, "loadCameraSettingsOnlyDifferences(): SET : " + value);
348 propertyProvider.setCameraPropertyValue(name, value);
350 //Thread.sleep(5); // 処理落ちしている?かもしれないので必要なら止める
361 Log.v(TAG, "loadCameraSettingsOnlyDifferences() : END [" + idHeader + "]" + " " + setCount);