OSDN Git Service

カメラプロパティの設定変更で変更分だけ変更するように変更する。
authorMRSa <mrsa@myad.jp>
Sun, 15 Oct 2017 12:37:18 +0000 (21:37 +0900)
committerMRSa <mrsa@myad.jp>
Sun, 15 Oct 2017 12:37:18 +0000 (21:37 +0900)
app/src/main/java/net/osdn/gokigen/a01d/camera/olympus/myolycameraprops/LoadSaveCameraProperties.java
app/src/main/java/net/osdn/gokigen/a01d/liveview/StoreImage.java

index e98572b..85d4e93 100644 (file)
@@ -124,7 +124,8 @@ public class LoadSaveCameraProperties implements ILoadSaveCameraProperties
                     @Override
                     public void run()
                     {
-                        final boolean toast = loadCameraSettingsSequential(idHeader);
+                        //final boolean toast = loadCameraSettingsSequential(idHeader);
+                        final boolean toast = loadCameraSettingsOnlyDifferences(idHeader);
                         busyDialog.dismiss();
 
                         parent.runOnUiThread(new Runnable()
@@ -250,4 +251,88 @@ public class LoadSaveCameraProperties implements ILoadSaveCameraProperties
         }
         return (ret);
     }
+
+
+    /**
+     *   カメラのプロパティを1つづつ個別設定(違っているものだけ設定する)
+     *
+     */
+    private boolean loadCameraSettingsOnlyDifferences(String idHeader)
+    {
+        boolean ret = false;
+        int setCount = 0;
+
+        // Restores my settings.
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
+        if (cameraConnection.getConnectionStatus() == IOlyCameraConnection.CameraConnectionStatus.CONNECTED)
+        {
+
+            //  現在の設定値を全部とってくる
+            Map<String, String> propertyValues = null;
+            try
+            {
+                propertyValues = propertyProvider.getCameraPropertyValues(propertyProvider.getCameraPropertyNames());
+            }
+            catch (Exception e)
+            {
+                // 設定値が取得できなかった場合は、終了する。
+                e.printStackTrace();
+                return (false);
+            }
+            if (propertyValues == null)
+            {
+                // プロパティの取得が失敗していたら、何もせずに折り返す
+                return (false);
+            }
+
+            String takeModeValue = preferences.getString(idHeader + IOlyCameraProperty.TAKE_MODE, null);
+            try
+            {
+                // TAKEMODE だけは先行して設定する(設定できないカメラプロパティもあるので...)
+                if (takeModeValue != null)
+                {
+                    propertyProvider.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, takeModeValue);
+                    Log.v(TAG, "loadCameraSettingsOnlyDifferences() TAKEMODE : " + takeModeValue);
+                    setCount++;
+                }
+            }
+            catch (Exception e)
+            {
+                e.printStackTrace();
+                Log.v(TAG, "loadCameraSettings() : loadCameraSettingsOnlyDifferences() fail...");
+            }
+
+            Set<String> names = propertyProvider.getCameraPropertyNames();
+            for (String name : names)
+            {
+                String value = preferences.getString(idHeader + name, null);
+                String currentValue = propertyValues.get(name);
+                if ((value != null)&&(currentValue != null)&&(!value.equals(currentValue)))
+                //if (value != null)
+                {
+                    if (propertyProvider.canSetCameraProperty(name))
+                    {
+                        // Read Onlyのプロパティを除外して登録
+                        try
+                        {
+                            // カメラプロパティを個別登録(全パラメータを一括登録すると何か落ちている
+                            Log.v(TAG, "loadCameraSettingsOnlyDifferences(): SET : " + value);
+                            propertyProvider.setCameraPropertyValue(name, value);
+                            setCount++;
+                            //Thread.sleep(5);   // 処理落ちしている?かもしれないので必要なら止める
+                            ret = true;
+                        }
+                        catch (Exception e)
+                        {
+                            e.printStackTrace();
+                            ret = false;
+                        }
+                    }
+                }
+            }
+            Log.v(TAG, "loadCameraSettingsOnlyDifferences() : END [" + idHeader + "]" + " " + setCount);
+        }
+        return (ret);
+    }
+
 }
index f09dc38..64cc51a 100644 (file)
@@ -5,6 +5,7 @@ import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
 import android.graphics.Bitmap;
+import android.os.Build;
 import android.os.Environment;
 import android.provider.MediaStore;
 import android.util.Log;
@@ -97,8 +98,11 @@ class StoreImage implements IStoreImage
             values.put(MediaStore.Images.Media.DATE_ADDED, now);
             values.put(MediaStore.Images.Media.DATE_TAKEN, now);
             values.put(MediaStore.Images.Media.DATE_MODIFIED, now);
-            //values.put(MediaStore.Images.Media.WIDTH, targetImage.getWidth());
-            //values.put(MediaStore.Images.Media.HEIGHT, targetImage.getHeight());
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
+            {
+                values.put(MediaStore.Images.Media.WIDTH, targetImage.getWidth());
+                values.put(MediaStore.Images.Media.HEIGHT, targetImage.getHeight());
+            }
             resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
         }
         catch (Throwable t)