OSDN Git Service

内部整理中。
[gokigen/A01c.git] / wear / src / main / java / jp / sfjp / gokigen / a01c / liveview / CameraLiveImageView.java
index 1dadd57..1676e76 100644 (file)
@@ -1,7 +1,6 @@
 package jp.sfjp.gokigen.a01c.liveview;
 
 import android.content.Context;
-import android.content.SharedPreferences;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
@@ -10,9 +9,10 @@ import android.graphics.Paint;
 import android.graphics.PointF;
 import android.graphics.Rect;
 import android.graphics.RectF;
-import android.media.ExifInterface;
+import androidx.exifinterface.media.ExifInterface;
+import androidx.preference.PreferenceDataStore;
+
 import android.os.Looper;
-import android.preference.PreferenceManager;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
 import android.util.Log;
@@ -28,17 +28,20 @@ import java.util.TimerTask;
 import jp.co.olympus.camerakit.OLYCamera;
 
 import jp.sfjp.gokigen.a01c.R;
+import jp.sfjp.gokigen.a01c.liveview.dialog.IDialogController;
+import jp.sfjp.gokigen.a01c.liveview.dialog.IDialogDrawer;
 import jp.sfjp.gokigen.a01c.liveview.gridframe.GridFrameFactory;
 import jp.sfjp.gokigen.a01c.liveview.gridframe.IGridFrameDrawer;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.ILevelGauge;
-import jp.sfjp.gokigen.a01c.preference.ICameraPropertyAccessor;
+import jp.sfjp.gokigen.a01c.preference.IPreferenceCameraPropertyAccessor;
+import jp.sfjp.gokigen.a01c.preference.PreferenceAccessWrapper;
 
 /**
  *   CameraLiveImageView :
  *    (OLYMPUS の ImageCaptureSample をカスタマイズ)
  *
  */
-public class CameraLiveImageView extends View implements CameraLiveViewListenerImpl.IImageDataReceiver, IAutoFocusFrameDisplay, ILiveImageStatusNotify
+public class CameraLiveImageView extends View implements CameraLiveViewListenerImpl.IImageDataReceiver, IAutoFocusFrameDisplay, ILiveImageStatusNotify, IDialogController
 {
     private final String TAG = toString();
 
@@ -57,6 +60,9 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
     private IGridFrameDrawer gridFrameDrawer = null;
     private ShowMessageHolder messageHolder;
 
+    private IDialogDrawer dialogDrawer = null;
+    private PreferenceDataStore preferences = null;
+
     /**
      *   コンストラクタ
      *
@@ -95,12 +101,20 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
         messageHolder = new ShowMessageHolder();
 
         imageScaleType = ImageView.ScaleType.FIT_CENTER;
-        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
 
-        showGridFeature = preferences.getBoolean(ICameraPropertyAccessor.SHOW_GRID_STATUS, true);
-        showLevelGaugeFeature = preferences.getBoolean(ICameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, false);
+        preferences = new PreferenceAccessWrapper(context);
+        showGridFeature = preferences.getBoolean(IPreferenceCameraPropertyAccessor.SHOW_GRID_STATUS, true);
+        showLevelGaugeFeature = preferences.getBoolean(IPreferenceCameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, false);
 
-        int framingGridStatus = Integer.parseInt(preferences.getString(ICameraPropertyAccessor.FRAME_GRID, ICameraPropertyAccessor.FRAME_GRID_DEFAULT_VALUE));
+        int framingGridStatus = 0; // IPreferenceCameraPropertyAccessor.FRAME_GRID_DEFAULT_VALUE;
+        try
+        {
+            framingGridStatus = Integer.parseInt(preferences.getString(IPreferenceCameraPropertyAccessor.FRAME_GRID, IPreferenceCameraPropertyAccessor.FRAME_GRID_DEFAULT_VALUE));
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
         gridFrameDrawer = GridFrameFactory.getGridFrameDrawer(framingGridStatus);
 
         // ダミーのビットマップデータ読み込み...画面表示のテスト用ロジック
@@ -150,12 +164,25 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
     protected void onDraw(Canvas canvas)
     {
         super.onDraw(canvas);
+        try
+        {
+            // 画像の表示
+            drawCanvas(canvas);
 
-        // 画像の表示
-        drawCanvas(canvas);
+            // ダイアログの表示
+            if (dialogDrawer != null)
+            {
+                dialogDrawer.drawDialog(canvas);
+                return;
+            }
 
-        // メッセージの表示 (Overwrite)
-        drawInformationMessages(canvas);
+            // メッセージの表示 (Overwrite)
+            drawInformationMessages(canvas);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
     }
 
     /**
@@ -229,15 +256,19 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
 
             // Acquire a rotation degree of image.
             int orientation = ExifInterface.ORIENTATION_UNDEFINED;
-            if (metadata.containsKey(EXIF_ORIENTATION))
+            try
             {
-                orientation = Integer.parseInt((String) metadata.get(EXIF_ORIENTATION));
+                if (metadata.containsKey(EXIF_ORIENTATION))
+                {
+                    orientation = Integer.parseInt((String) metadata.get(EXIF_ORIENTATION));
+                }
+            }
+            catch (Exception e)
+            {
+                e.printStackTrace();
             }
             switch (orientation)
             {
-                case ExifInterface.ORIENTATION_NORMAL:
-                    rotationDegrees = 0;
-                    break;
                 case ExifInterface.ORIENTATION_ROTATE_90:
                     rotationDegrees = 90;
                     break;
@@ -247,6 +278,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
                 case ExifInterface.ORIENTATION_ROTATE_270:
                     rotationDegrees = 270;
                     break;
+                case ExifInterface.ORIENTATION_NORMAL:
                 default:
                     rotationDegrees = 0;
                     break;
@@ -550,6 +582,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
 
         Paint framePaint = new Paint();
         framePaint.setStyle(Paint.Style.STROKE);
+        framePaint.setAntiAlias(true);
 
         //DisplayMetrics dm = getResources().getDisplayMetrics();
         //float strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1.0f, dm);
@@ -668,6 +701,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
             paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.CENTER));
             paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.CENTER));
             paint.setAntiAlias(true);
+            paint.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK);  // これで文字に影をつけたい
             Paint.FontMetrics fontMetrics = paint.getFontMetrics();
             float cx = (canvas.getWidth() / 2.0f) - (paint.measureText(message) / 2.0f);
             float cy = (canvas.getHeight() / 2.0f) - ((fontMetrics.ascent + fontMetrics.descent) / 2.0f);
@@ -682,6 +716,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
             paintUp.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.UPLEFT));
             paintUp.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.UPLEFT));
             paintUp.setAntiAlias(true);
+            paintUp.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK);  // これで文字に影をつけたい
             Paint.FontMetrics fontMetrics = paintUp.getFontMetrics();
             canvas.drawText(message, viewRect.left + 3.0f, viewRect.top + (fontMetrics.descent - fontMetrics.ascent), paintUp);
         }
@@ -694,6 +729,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
             paintUp.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.UPRIGHT));
             paintUp.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.UPRIGHT));
             paintUp.setAntiAlias(true);
+            paintUp.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK);  // これで文字に影をつけたい
             float width = paintUp.measureText(message);
             Paint.FontMetrics fontMetrics = paintUp.getFontMetrics();
             canvas.drawText(message, (viewRect.right - 3.0f) - width, viewRect.top + (fontMetrics.descent - fontMetrics.ascent), paintUp);
@@ -707,6 +743,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
             paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.LOWLEFT));
             paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.LOWLEFT));
             paint.setAntiAlias(true);
+            paint.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK);  // これで文字に影をつけたい
             Paint.FontMetrics fontMetrics = paint.getFontMetrics();
             canvas.drawText(message, viewRect.left + 3.0f, viewRect.bottom - fontMetrics.bottom, paint);
         }
@@ -719,6 +756,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
             paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.LOWRIGHT));
             paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.LOWRIGHT));
             paint.setAntiAlias(true);
+            paint.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK);  // これで文字に影をつけたい
             float width = paint.measureText(message);
             Paint.FontMetrics fontMetrics = paint.getFontMetrics();
             canvas.drawText(message, (viewRect.right - 3.0f) - width, viewRect.bottom - fontMetrics.bottom, paint);
@@ -733,6 +771,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
             paintUp.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.UPCENTER));
             paintUp.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.UPCENTER));
             paintUp.setAntiAlias(true);
+            paintUp.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK);  // これで文字に影をつけたい
             float width = paintUp.measureText(message) / 2.0f;
             Paint.FontMetrics fontMetrics = paintUp.getFontMetrics();
             canvas.drawText(message, (viewRect.centerX()) - width, viewRect.top + (fontMetrics.descent - fontMetrics.ascent), paintUp);
@@ -746,11 +785,41 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
             paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.LOWCENTER));
             paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.LOWCENTER));
             paint.setAntiAlias(true);
+            paint.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK);  // これで文字に影をつけたい
             float width = paint.measureText(message) / 2.0f;
             Paint.FontMetrics fontMetrics = paint.getFontMetrics();
             canvas.drawText(message, (viewRect.centerX()) - width, viewRect.bottom - fontMetrics.bottom, paint);
         }
-/**/
+
+        // 画面中央左に表示する
+        message = messageHolder.getMessage(ShowMessageHolder.MessageArea.CENTERLEFT);
+        if ((message != null)&&(message.length() > 0))
+        {
+            Paint paint = new Paint();
+            paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.CENTERLEFT));
+            paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.CENTERLEFT));
+            paint.setAntiAlias(true);
+            paint.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK);  // これで文字に影をつけたい
+            Paint.FontMetrics fontMetrics = paint.getFontMetrics();
+            float cy = (canvas.getHeight() / 2.0f) - ((fontMetrics.ascent + fontMetrics.descent) / 2.0f);
+            canvas.drawText(message, viewRect.left + 3.0f, cy, paint);
+        }
+
+        // 画面中央右に表示する
+        message = messageHolder.getMessage(ShowMessageHolder.MessageArea.CENTERRIGHT);
+        if ((message != null)&&(message.length() > 0))
+        {
+            Paint paint = new Paint();
+            paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.CENTERRIGHT));
+            paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.CENTERRIGHT));
+            paint.setAntiAlias(true);
+            paint.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK);  // これで文字に影をつけたい
+            float width = paint.measureText(message);
+            Paint.FontMetrics fontMetrics = paint.getFontMetrics();
+            float cy = (canvas.getHeight() / 2.0f) - ((fontMetrics.ascent + fontMetrics.descent) / 2.0f);
+            canvas.drawText(message, (viewRect.right - 3.0f) - width, cy, paint);
+        }
+        /**/
     }
 
     /**
@@ -781,7 +850,8 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
         float ratioY = viewSizeHeight / imageSizeHeight;
         float scale;
 
-        switch (imageScaleType) {
+        switch (imageScaleType)
+        {
             case FIT_XY:
                 viewPointX *= ratioX;
                 viewPointY *= ratioY;
@@ -898,10 +968,14 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
     public void setShowGridFrame(boolean isShowGridFeature)
     {
         showGridFeature = isShowGridFeature;
-        SharedPreferences preferences = android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(getContext());
-        SharedPreferences.Editor editor = preferences.edit();
-        editor.putBoolean(ICameraPropertyAccessor.SHOW_GRID_STATUS, showGridFeature);
-        editor.apply();
+        try
+        {
+            preferences.putBoolean(IPreferenceCameraPropertyAccessor.SHOW_GRID_STATUS, showGridFeature);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
     }
 
     /**
@@ -922,18 +996,22 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
     {
         Log.v(TAG, "setShowLevelGauge : " + isShowLevelGaugeFeature);
         showLevelGaugeFeature = isShowLevelGaugeFeature;
-        SharedPreferences preferences = android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(getContext());
-        SharedPreferences.Editor editor = preferences.edit();
-        editor.putBoolean(ICameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, showLevelGaugeFeature);
-        editor.apply();
-        ILevelGauge levelGauge = messageHolder.getLevelGauge();
-        if (levelGauge == null)
+        try
         {
-            // デジタル水準器がとれない場合は、何もしない
-            Log.v(TAG, "setShowLevelGauge : levelGauge is null.");
-            return;
+            preferences.putBoolean(IPreferenceCameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, showLevelGaugeFeature);
+            ILevelGauge levelGauge = messageHolder.getLevelGauge();
+            if (levelGauge == null)
+            {
+                // デジタル水準器がとれない場合は、何もしない
+                Log.v(TAG, "setShowLevelGauge : levelGauge is null.");
+                return;
+            }
+            levelGauge.updateLevelGaugeChecking(isShowLevelGaugeFeature);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
         }
-        levelGauge.updateLevelGaugeChecking(isShowLevelGaugeFeature);
     }
 
     /**
@@ -975,4 +1053,35 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
     {
         return (messageHolder);
     }
+
+    /**
+     *
+     *
+     */
+    @Override
+    public void showDialog(IDialogDrawer dialogDrawer)
+    {
+        this.dialogDrawer = dialogDrawer;
+    }
+
+    /**
+     *
+     *
+     */
+    @Override
+    public void hideDialog()
+    {
+        this.dialogDrawer = null;
+        System.gc();
+    }
+
+    /**
+     *
+     *
+     */
+    @Override
+    public boolean touchedPosition(float posX, float posY)
+    {
+        return ((dialogDrawer != null)&&(dialogDrawer.touchedPosition(posX, posY)));
+    }
 }