OSDN Git Service

6b5c0db5e0d988c668ad97bc8fea945c28d6cd21
[gokigen/A01c.git] / app / src / main / java / jp / sfjp / gokigen / a01c / olycamerawrapper / CameraStatusListenerImpl.java
1 package jp.sfjp.gokigen.a01c.olycamerawrapper;
2
3 import android.content.Context;
4 import android.util.Log;
5
6 import java.util.Map;
7 import java.util.TreeSet;
8
9 import jp.co.olympus.camerakit.OLYCamera;
10 import jp.co.olympus.camerakit.OLYCameraStatusListener;
11 import jp.sfjp.gokigen.a01c.R;
12
13 /**
14  *   OLYCameraStatusListenerの実装
15  *   (LiveViewFragment用)
16  */
17 public class CameraStatusListenerImpl implements OLYCameraStatusListener, ICameraStatusSummary
18 {
19     private final String TAG = this.toString();
20
21     public static final String APERTURE_VALUE = "ActualApertureValue";
22     public static final String SHUTTER_SPEED = "ActualShutterSpeed";
23     public static final String EXPOSURE_COMPENSATION = "ActualExposureCompensation";
24     public static final String ISO_SENSITIVITY = "ActualIsoSensitivity";
25     public static final String RECORDABLEIMAGES = "RemainingRecordableImages";
26     public static final String MEDIA_BUSY = "MediaBusy";
27     public static final String MEDIA_ERROR = "MediaError";
28     public static final String DETECT_FACES = "DetectedHumanFaces";
29     public static final String FOCAL_LENGTH = "ActualFocalLength";
30     public static final String ACTUAL_ISO_SENSITIVITY_WARNING = "ActualIsoSensitivityWarning";
31     public static final String EXPOSURE_WARNING = "ExposureWarning";
32     public static final String EXPOSURE_METERING_WARNING = "ExposureMeteringWarning";
33     public static final String HIGH_TEMPERATURE_WARNING = "HighTemperatureWarning";
34     public static final String LEVEL_GAUGE = "LevelGauge";
35     public static final String LENS_MOUNT_STATUS = "LensMountStatus";
36     public static final String MEDIA_MOUNT_STATUS = "MediaMountStatus";
37     public static final String REMAINING_RECORDABLE_TIME = "RemainingRecordableTime";
38     public static final String MINIMUM_FOCAL_LENGTH = "MinimumFocalLength";
39     public static final String MAXIMUM_FOCAL_LENGTH = "MaximumFocalLength";
40
41     private final ICameraStatusDisplay display;
42     private final Context context;
43
44     /**
45      *   コンストラクタ
46      *
47      */
48     public CameraStatusListenerImpl(Context context, ICameraStatusDisplay parent)
49     {
50         this.context = context;
51         this.display = parent;
52     }
53
54     @Override
55     public void onUpdateStatus(OLYCamera camera, final String name)
56     {
57         if (name == null)
58         {
59             // name がないとき、何もしない
60             return;
61         }
62         switch (name)
63         {
64             case APERTURE_VALUE:
65             case SHUTTER_SPEED:
66             case ISO_SENSITIVITY:
67             case FOCAL_LENGTH:
68             case EXPOSURE_WARNING:
69             case EXPOSURE_METERING_WARNING:
70             case HIGH_TEMPERATURE_WARNING:
71                 // ある一定の値が更新された時だけ
72                 break;
73
74             default:
75                 // 他の値が変わった場合には、ログだけ残して何もしない。
76                 Log.v(TAG, "onUpdateStatus() : " + name);
77                 return;
78             //break;
79         }
80         display.updateCameraStatus(geCameraStatusMessage(camera, name));
81     }
82
83     /**
84      *  表示用のメッセージを生成する
85      *
86      */
87     @Override
88     public String geCameraStatusMessage(OLYCamera camera, String name)
89     {
90         String message = name;
91         String warn = "";
92         try
93         {
94             // 警告メッセージを生成
95             if (camera.isHighTemperatureWarning())
96             {
97                 warn = warn + " " + context.getString(R.string.high_temperature_warning);
98             }
99             if (camera.isExposureMeteringWarning())
100             {
101                 warn = warn + " " + context.getString(R.string.exposure_metering_warning);
102             }
103             if (camera.isActualIsoSensitivityWarning())
104             {
105                 warn = warn + " " + context.getString(R.string.iso_sensitivity_warning);
106             }
107
108             TreeSet<String> treeSet = new TreeSet<>();
109             treeSet.add(IOlyCameraProperty.TAKE_MODE);
110             treeSet.add(IOlyCameraProperty.WB_MODE);
111             treeSet.add(IOlyCameraProperty.AE_MODE);
112             treeSet.add(IOlyCameraProperty.EXPOSURE_COMPENSATION);
113             Map<String, String> values = camera.getCameraPropertyValues(treeSet);
114             //for (Map.Entry<String, String> entry : values.entrySet())
115             //{
116             //    Log.v(TAG, "STATUS : " + entry.getKey() + " : " + entry.getValue());
117             //}
118             String takeMode = camera.getCameraPropertyValueTitle(values.get(IOlyCameraProperty.TAKE_MODE));
119             String wbMode = camera.getCameraPropertyValueTitle(values.get(IOlyCameraProperty.WB_MODE));
120             String aeMode = camera.getCameraPropertyValueTitle(values.get(IOlyCameraProperty.AE_MODE));
121             String aperture = camera.getCameraPropertyValueTitle(camera.getActualApertureValue());
122             String iso = camera.getCameraPropertyValueTitle(camera.getActualIsoSensitivity());
123             String shutter = camera.getCameraPropertyValueTitle(camera.getActualShutterSpeed());
124             message = "  " + takeMode + " " + shutter + " F" + aperture + " ISO" + iso + " " + wbMode + " [" + aeMode + "]" + warn;
125         }
126         catch (Exception e)
127         {
128             e.printStackTrace();
129         }
130         return (message);
131     }
132 }