OSDN Git Service

画面の長押し対応と、作例表示モードの開発開始。
authorMRSa <mrsa@myad.jp>
Wed, 30 Jun 2021 14:44:56 +0000 (23:44 +0900)
committerMRSa <mrsa@myad.jp>
Wed, 30 Jun 2021 14:44:56 +0000 (23:44 +0900)
16 files changed:
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/CameraPreference.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/CameraPreferenceKeySet.kt [new file with mode: 0644]
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/DummyCameraControl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/ICameraPreferenceUpdater.kt [new file with mode: 0644]
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/camerax/operation/CameraControl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/example/ExamplePictureControl.kt [new file with mode: 0644]
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/interfaces/ICameraControl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/panasonic/wrapper/PanasonicCameraControl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/ricohpentax/RicohPentaxCameraControl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/theta/ThetaCameraControl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/constants/ICameraConnectionMethods.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/liveview/LiveImageViewFragment.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/liveview/image/CameraLiveViewListenerImpl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/utils/imagefile/FileControl.kt
app/src/main/java/jp/osdn/gokigen/mangle/scene/CameraProvider.kt
app/src/main/res/values/arrays.xml

index e1fc248..e293a40 100644 (file)
@@ -1,7 +1,17 @@
 package jp.osdn.gokigen.gokigenassets.camera
 
-class CameraPreference(private val method : String, private val sequence : String = "0", private val option1 : String = "", private val option2 : String = "", private val option3 : String = "", private val option4 : String = "", private val option5 : String = "") : ICameraPreferenceProvider
+import jp.osdn.gokigen.gokigenassets.preference.PreferenceAccessWrapper
+
+class CameraPreference(private val wrapper : PreferenceAccessWrapper, method0 : String, sequence0 : String = "0", option1_ : String = "", option2_ : String = "", option3_ : String = "", option4_ : String = "", option5_ : String = "", private val keySet : CameraPreferenceKeySet? = null) : ICameraPreferenceProvider, ICameraPreferenceUpdater
 {
+    private var method = method0
+    private var sequence = sequence0
+    private var option1 = option1_
+    private var option2 = option2_
+    private var option3 = option3_
+    private var option4 = option4_
+    private var option5 = option5_
+
     override fun getCameraMethod(): String
     {
         return (method)
@@ -36,4 +46,49 @@ class CameraPreference(private val method : String, private val sequence : Strin
     {
         return (option5)
     }
+
+    override fun setCameraOption1(value: String)
+    {
+        option1 = value
+        if (keySet != null)
+        {
+            wrapper.putString(keySet.getOption1Key(), option1)
+        }
+    }
+
+    override fun setCameraOption2(value: String)
+    {
+        option2 = value
+        if (keySet != null)
+        {
+            wrapper.putString(keySet.getOption2Key(), option2)
+        }
+    }
+
+    override fun setCameraOption3(value: String)
+    {
+        option3 = value
+        if (keySet != null)
+        {
+            wrapper.putString(keySet.getOption3Key(), option3)
+        }
+    }
+
+    override fun setCameraOption4(value: String)
+    {
+        option4 = value
+        if (keySet != null)
+        {
+            wrapper.putString(keySet.getOption4Key(), option4)
+        }
+    }
+
+    override fun setCameraOption5(value: String)
+    {
+        option5 = value
+        if (keySet != null)
+        {
+            wrapper.putString(keySet.getOption5Key(), option5)
+        }
+    }
 }
diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/CameraPreferenceKeySet.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/CameraPreferenceKeySet.kt
new file mode 100644 (file)
index 0000000..076efce
--- /dev/null
@@ -0,0 +1,10 @@
+package jp.osdn.gokigen.gokigenassets.camera
+
+class CameraPreferenceKeySet(private val key1 : String, private val key2 : String, private val key3 : String, private val key4 : String, private val key5 : String)
+{
+    fun getOption1Key() : String { return (key1) }
+    fun getOption2Key() : String { return (key2) }
+    fun getOption3Key() : String { return (key3) }
+    fun getOption4Key() : String { return (key4) }
+    fun getOption5Key() : String { return (key5) }
+}
index d9ea5da..1a095f2 100644 (file)
@@ -10,7 +10,7 @@ import jp.osdn.gokigen.gokigenassets.camera.interfaces.IKeyDown
 import jp.osdn.gokigen.gokigenassets.liveview.ILiveView
 import jp.osdn.gokigen.gokigenassets.liveview.ILiveViewRefresher
 
-class DummyCameraControl() : ICameraControl, View.OnClickListener, IKeyDown
+class DummyCameraControl() : ICameraControl, View.OnClickListener, View.OnLongClickListener, IKeyDown
 {
     override fun getConnectionMethod(): String { return ("NONE") }
     override fun initialize() { }
@@ -21,9 +21,11 @@ class DummyCameraControl() : ICameraControl, View.OnClickListener, IKeyDown
     override fun needRotateImage(): Boolean { return (false) }
     override fun setRefresher(refresher: ILiveViewRefresher, imageView: ILiveView) { }
     override fun captureButtonReceiver(id: Int): View.OnClickListener { return (this) }
+    override fun onLongClickReceiver(id: Int): View.OnLongClickListener { return (this) }
     override fun keyDownReceiver(id: Int): IKeyDown { return (this) }
     override fun getFocusingControl(id: Int): IFocusingControl? { return (null) }
     override fun getDisplayInjector(): IDisplayInjector? { return (null) }
     override fun onClick(v: View?) { }
     override fun handleKeyDown(keyCode: Int, event: KeyEvent): Boolean { return (false) }
+    override fun onLongClick(v: View?): Boolean { return (false) }
 }
diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/ICameraPreferenceUpdater.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/ICameraPreferenceUpdater.kt
new file mode 100644 (file)
index 0000000..3ca99ee
--- /dev/null
@@ -0,0 +1,10 @@
+package jp.osdn.gokigen.gokigenassets.camera
+
+interface ICameraPreferenceUpdater
+{
+    fun setCameraOption1(value : String)
+    fun setCameraOption2(value : String)
+    fun setCameraOption3(value : String)
+    fun setCameraOption4(value : String)
+    fun setCameraOption5(value : String)
+}
index aa545e8..557a172 100644 (file)
@@ -115,7 +115,6 @@ class CameraControl(private val activity : AppCompatActivity, private val prefer
                 .also {
                     it.setSurfaceProvider(activity.findViewById<androidx.camera.view.PreviewView>(ID_CAMERA_X_PREVIEW_LAYOUT).surfaceProvider)
                 }
-            //val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
             val imageCapture = fileControl.prepare()
 
             try
@@ -143,18 +142,12 @@ class CameraControl(private val activity : AppCompatActivity, private val prefer
         val cameraProviderFuture = ProcessCameraProvider.getInstance(activity)
         cameraProviderFuture.addListener( {
             val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
-/*
-            val preview = Preview.Builder()
-                .build()
-                .also {
-                    it.setSurfaceProvider(activity.findViewById<androidx.camera.view.PreviewView>(R.id.viewFinder).createSurfaceProvider())
-                }
-*/
-            //val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
             val imageCapture = fileControl.prepare()
             val option1 = preference.getCameraOption1()  // プレビューサイズを設定する
             val previewSize = if (option1.isNotBlank()) {
                 when (option1) {
+                    "_8K" -> Size(4320, 7680)
+                    "_6K" -> Size(3384, 6016)
                     "_4K"   -> Size(4096, 2160)
                     "_WQHD" -> Size(2560, 1440)
                     "_2K" -> Size(2048, 1080)
@@ -163,6 +156,8 @@ class CameraControl(private val activity : AppCompatActivity, private val prefer
                     "_XGA" -> Size(1024, 768)   // XGA  : 1600x1200 @ Pixel3a
                     "_SVGA" -> Size(800, 600)   // SVGA : 1280x960  @ Pixel3a
                     "_VGA" -> Size(640, 480)   // SVGA : 1280x960  @ Pixel3a
+                    "8K" -> Size(7680, 4320)
+                    "6K" -> Size(6016, 3384)
                     "4K"   -> Size(2160, 4096)
                     "WQHD" -> Size(1440, 2560)
                     "2K" -> Size(1080, 2048)
@@ -247,6 +242,19 @@ class CameraControl(private val activity : AppCompatActivity, private val prefer
         return (fileControl)
     }
 
+    override fun onLongClickReceiver(id: Int): View.OnLongClickListener
+    {
+        try
+        {
+            fileControl.setId(id)
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+        return (fileControl)
+    }
+
     override fun keyDownReceiver(id: Int): IKeyDown
     {
         try
diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/example/ExamplePictureControl.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/example/ExamplePictureControl.kt
new file mode 100644 (file)
index 0000000..b9dd5bf
--- /dev/null
@@ -0,0 +1,76 @@
+package jp.osdn.gokigen.gokigenassets.camera.example
+
+import android.view.KeyEvent
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import jp.osdn.gokigen.gokigenassets.camera.ICameraPreferenceProvider
+import jp.osdn.gokigen.gokigenassets.camera.interfaces.*
+import jp.osdn.gokigen.gokigenassets.camera.theta.status.ICaptureModeReceiver
+import jp.osdn.gokigen.gokigenassets.liveview.IIndicatorControl
+import jp.osdn.gokigen.gokigenassets.liveview.ILiveView
+import jp.osdn.gokigen.gokigenassets.liveview.ILiveViewRefresher
+import jp.osdn.gokigen.gokigenassets.liveview.focusframe.IAutoFocusFrameDisplay
+import jp.osdn.gokigen.gokigenassets.liveview.image.CameraLiveViewListenerImpl
+import jp.osdn.gokigen.gokigenassets.scene.IVibrator
+
+class ExamplePictureControl(private val context: AppCompatActivity, private val vibrator : IVibrator, private val preference: ICameraPreferenceProvider) : IDisplayInjector, ILiveViewController, ICameraControl, View.OnClickListener, View.OnLongClickListener, ICaptureModeReceiver, ICameraShutter, IKeyDown
+{
+    private val liveViewListener = CameraLiveViewListenerImpl(context, isDisableCache = true)
+
+    override fun injectDisplay(frameDisplayer: IAutoFocusFrameDisplay, indicator: IIndicatorControl, focusingModeNotify: IFocusingModeNotify) { }
+    override fun initialize() { updateExamplePicture() }
+    override fun startLiveView() {  }
+    override fun stopLiveView() { }
+    override fun getConnectionMethod(): String { return ("EXAMPLE") }
+    override fun connectToCamera() { }
+    override fun startCamera(isPreviewView: Boolean, cameraSequence: Int) { }
+    override fun finishCamera() { }
+    override fun changeCaptureMode(mode: String) { }
+    override fun needRotateImage(): Boolean { return (false) }
+    override fun captureButtonReceiver(id: Int): View.OnClickListener { return (this) }
+    override fun onLongClickReceiver(id: Int): View.OnLongClickListener { return (this) }
+
+    override fun keyDownReceiver(id: Int): IKeyDown { return (this) }
+    override fun getFocusingControl(id: Int): IFocusingControl? { return (null) }
+    override fun getDisplayInjector(): IDisplayInjector? { return (null) }
+    override fun onClick(v: View?) { }
+    override fun changedCaptureMode(captureMode: String) { }
+    override fun doShutter() { }
+    override fun doShutterOff() { }
+    override fun handleKeyDown(keyCode: Int, event: KeyEvent): Boolean { return (false) }
+
+    override fun setRefresher(refresher: ILiveViewRefresher, imageView: ILiveView)
+    {
+        try
+        {
+            liveViewListener.setRefresher(refresher)
+            imageView.setImageProvider(liveViewListener)
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    private fun updateExamplePicture()
+    {
+        try
+        {
+            //liveViewListener.onUpdateLiveView(receivedData.copyOfRange(offset, dataLength), null)
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+
+
+    }
+
+    override fun onLongClick(v: View?): Boolean
+    {
+        vibrator.vibrate(IVibrator.VibratePattern.SIMPLE_SHORT)
+        return (true)
+    }
+
+
+}
index 248f718..bd5a5d4 100644 (file)
@@ -18,6 +18,7 @@ interface ICameraControl
 
     fun setRefresher(refresher : ILiveViewRefresher, imageView : ILiveView)
     fun captureButtonReceiver(id : Int = 0) : View.OnClickListener
+    fun onLongClickReceiver(id : Int = 0) : View.OnLongClickListener
     fun keyDownReceiver(id : Int = 0) : IKeyDown
 
     fun getFocusingControl(id : Int = 0) : IFocusingControl?
index e75390d..b66a52d 100644 (file)
@@ -15,7 +15,6 @@ import jp.osdn.gokigen.gokigenassets.camera.panasonic.operation.PanasonicCameraC
 import jp.osdn.gokigen.gokigenassets.camera.panasonic.operation.PanasonicCameraFocusControl
 import jp.osdn.gokigen.gokigenassets.camera.panasonic.operation.PanasonicCameraZoomLensControl
 import jp.osdn.gokigen.gokigenassets.camera.panasonic.status.CameraEventObserver
-import jp.osdn.gokigen.gokigenassets.camera.theta.status.ICaptureModeReceiver
 import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert
 import jp.osdn.gokigen.gokigenassets.liveview.IIndicatorControl
 import jp.osdn.gokigen.gokigenassets.liveview.ILiveView
@@ -27,7 +26,7 @@ import jp.osdn.gokigen.gokigenassets.preference.PreferenceAccessWrapper
 import jp.osdn.gokigen.gokigenassets.scene.IVibrator
 import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleHttpClient
 
-class PanasonicCameraControl(private val context: AppCompatActivity, private val vibrator : IVibrator, private val preference: ICameraPreferenceProvider,  private val provider: ICameraStatusReceiver) : IPanasonicCameraHolder, IDisplayInjector,ILiveViewController, ICameraControl, View.OnClickListener, ICaptureModeReceiver, ICameraShutter, IKeyDown
+class PanasonicCameraControl(private val context: AppCompatActivity, private val vibrator : IVibrator, private val preference: ICameraPreferenceProvider,  private val provider: ICameraStatusReceiver) : IPanasonicCameraHolder, IDisplayInjector,ILiveViewController, ICameraControl, View.OnClickListener, View.OnLongClickListener, ICameraShutter, IKeyDown
 {
     private val cardSlotSelector = PanasonicCardSlotSelector()
     private val liveViewListener = CameraLiveViewListenerImpl(context)
@@ -221,11 +220,6 @@ class PanasonicCameraControl(private val context: AppCompatActivity, private val
         // TODO("Not yet implemented")
     }
 
-    override fun changedCaptureMode(captureMode: String)
-    {
-        //TODO("Not yet implemented")
-    }
-
     override fun needRotateImage(): Boolean
     {
         return (false)
@@ -250,6 +244,12 @@ class PanasonicCameraControl(private val context: AppCompatActivity, private val
         return (this)
     }
 
+    override fun onLongClickReceiver(id: Int): View.OnLongClickListener
+    {
+        cameraPositionId = id
+        return (this)
+    }
+
     override fun keyDownReceiver(id: Int): IKeyDown
     {
         cameraPositionId = id
@@ -400,4 +400,8 @@ class PanasonicCameraControl(private val context: AppCompatActivity, private val
         return (false)
     }
 
+    override fun onLongClick(v: View?): Boolean
+    {
+        return (false)
+    }
 }
index 18910c3..e145a7b 100644 (file)
@@ -24,7 +24,7 @@ import jp.osdn.gokigen.gokigenassets.liveview.storeimage.StoreImage
 import jp.osdn.gokigen.gokigenassets.preference.PreferenceAccessWrapper
 import jp.osdn.gokigen.gokigenassets.scene.IVibrator
 
-class RicohPentaxCameraControl(private val context: AppCompatActivity, private val vibrator : IVibrator, private val preference: ICameraPreferenceProvider, statusReceiver : ICameraStatusReceiver)  : ILiveViewController, ICameraControl, View.OnClickListener, ICaptureModeReceiver, ICameraShutter, IDisplayInjector, IUseGR2CommandNotify, IKeyDown
+class RicohPentaxCameraControl(private val context: AppCompatActivity, private val vibrator : IVibrator, private val preference: ICameraPreferenceProvider, statusReceiver : ICameraStatusReceiver)  : ILiveViewController, ICameraControl, View.OnClickListener, View.OnLongClickListener, ICaptureModeReceiver, ICameraShutter, IDisplayInjector, IUseGR2CommandNotify, IKeyDown
 {
 
     //private final Activity activity;
@@ -166,6 +166,12 @@ class RicohPentaxCameraControl(private val context: AppCompatActivity, private v
         return (this)
     }
 
+    override fun onLongClickReceiver(id: Int): View.OnLongClickListener
+    {
+        cameraPositionId = id
+        return (this)
+    }
+
     override fun keyDownReceiver(id: Int): IKeyDown
     {
         cameraPositionId = id
@@ -315,6 +321,11 @@ class RicohPentaxCameraControl(private val context: AppCompatActivity, private v
         return (false)
     }
 
+    override fun onLongClick(v: View?): Boolean
+    {
+        return (false)
+    }
+
     /**
      *
      *
@@ -324,4 +335,5 @@ class RicohPentaxCameraControl(private val context: AppCompatActivity, private v
         private val TAG = RicohPentaxCameraControl::class.java.simpleName
         private const val communicationTimeoutMs = 5000
     }
+
 }
\ No newline at end of file
index ec620b8..b66503b 100644 (file)
@@ -28,7 +28,7 @@ import jp.osdn.gokigen.gokigenassets.preference.PreferenceAccessWrapper
 import jp.osdn.gokigen.gokigenassets.scene.IVibrator
 
 class ThetaCameraControl(private val context: AppCompatActivity, private val vibrator : IVibrator, private val preference: ICameraPreferenceProvider, statusReceiver : ICameraStatusReceiver) : ILiveViewController,
-    ICameraControl, View.OnClickListener, ICaptureModeReceiver, ICameraShutter, IKeyDown
+    ICameraControl, View.OnClickListener, View.OnLongClickListener, ICaptureModeReceiver, ICameraShutter, IKeyDown
 {
     private val sessionIdHolder = ThetaSessionHolder()
     private val cameraConnection = ThetaCameraConnection(context, statusReceiver, sessionIdHolder, sessionIdHolder, this)
@@ -305,6 +305,12 @@ class ThetaCameraControl(private val context: AppCompatActivity, private val vib
         return (this)
     }
 
+    override fun onLongClickReceiver(id: Int): View.OnLongClickListener
+    {
+        cameraPositionId = id
+        return (this)
+    }
+
     override fun keyDownReceiver(id: Int): IKeyDown
     {
         cameraPositionId = id
@@ -331,4 +337,9 @@ class ThetaCameraControl(private val context: AppCompatActivity, private val vib
         return (false)
     }
 
+    override fun onLongClick(v: View?): Boolean
+    {
+        return (false)
+    }
+
 }
index 9127264..44d6ac6 100644 (file)
@@ -6,6 +6,7 @@ interface ICameraConnectionMethods
     {
         // --- CONNECTION METHOD
         const val PREFERENCE_CAMERA_METHOD_NONE = "none"
+        const val PREFERENCE_CAMERA_METHOD_EXAMPLE = "EXAMPLE"
         const val PREFERENCE_CAMERA_METHOD_CAMERAX = "camerax"
         const val PREFERENCE_CAMERA_METHOD_THETA = "THETA"
         const val PREFERENCE_CAMERA_METHOD_PENTAX = "RICOH"
index e780070..6cc9300 100644 (file)
@@ -30,7 +30,7 @@ import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert.Compa
 import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert.Companion.ID_VIEW_LOWER_AREA
 import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert.Companion.ID_VIEW_UPPER_AREA
 
-class LiveImageViewFragment(private val contentLayoutId: Int = ID_LIVE_VIEW_LAYOUT_DEFAULT) : Fragment(contentLayoutId), View.OnClickListener
+class LiveImageViewFragment(private val contentLayoutId: Int = ID_LIVE_VIEW_LAYOUT_DEFAULT) : Fragment(contentLayoutId), View.OnClickListener, View.OnLongClickListener
 {
     private lateinit var liveviewView : View
 
@@ -92,6 +92,7 @@ class LiveImageViewFragment(private val contentLayoutId: Int = ID_LIVE_VIEW_LAYO
                 {
                     cameraControl0.setRefresher(imageView0, imageView0)
                     imageView0.injectDisplay(cameraControl0)
+                    imageView0.setOnLongClickListener(this)
                     imageView0.setOnTouchListener(LiveViewOnTouchListener(cameraControl0, 0))
                     if (isCacheImage)
                     {
@@ -117,6 +118,7 @@ class LiveImageViewFragment(private val contentLayoutId: Int = ID_LIVE_VIEW_LAYO
                 {
                     cameraControl1.setRefresher(imageView1, imageView1)
                     imageView1.injectDisplay(cameraControl1)
+                    imageView1.setOnLongClickListener(this)
                     imageView1.setOnTouchListener(LiveViewOnTouchListener(cameraControl1, 1))
                     if (isCacheImage)
                     {
@@ -142,6 +144,7 @@ class LiveImageViewFragment(private val contentLayoutId: Int = ID_LIVE_VIEW_LAYO
                 {
                     cameraControl2.setRefresher(imageView2, imageView2)
                     imageView2.injectDisplay(cameraControl2)
+                    imageView2.setOnLongClickListener(this)
                     imageView2.setOnTouchListener(LiveViewOnTouchListener(cameraControl2, 2))
                     if (isCacheImage)
                     {
@@ -167,6 +170,7 @@ class LiveImageViewFragment(private val contentLayoutId: Int = ID_LIVE_VIEW_LAYO
                 {
                     cameraControl3.setRefresher(imageView3, imageView3)
                     imageView3.injectDisplay(cameraControl3)
+                    imageView3.setOnLongClickListener(this)
                     imageView3.setOnTouchListener(LiveViewOnTouchListener(cameraControl3, 3))
                     if (isCacheImage)
                     {
@@ -311,4 +315,38 @@ class LiveImageViewFragment(private val contentLayoutId: Int = ID_LIVE_VIEW_LAYO
         }
         return (rotation)
     }
+
+    override fun onLongClick(v: View?): Boolean
+    {
+        var ret = false
+        try
+        {
+            val id = v?.id
+            if ((::cameraControl0.isInitialized)&&(isCameraControl0)&&(id == ID_VIEW_FINDER_0))
+            {
+                cameraControl0.onLongClickReceiver(0).onLongClick(v)
+                ret = true
+            }
+            if ((::cameraControl1.isInitialized)&&(isCameraControl1)&&(id == ID_VIEW_FINDER_1))
+            {
+                cameraControl1.onLongClickReceiver(1).onLongClick(v)
+                ret = true
+            }
+            if ((::cameraControl2.isInitialized)&&(isCameraControl2)&&(id == ID_VIEW_FINDER_2))
+            {
+                cameraControl2.onLongClickReceiver(2).onLongClick(v)
+                ret = true
+            }
+            if ((::cameraControl3.isInitialized)&&(isCameraControl3)&&(id == ID_VIEW_FINDER_3))
+            {
+                cameraControl3.onLongClickReceiver(3).onLongClick(v)
+                ret = true
+            }
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+        return (ret)
+    }
 }
index 07024f7..f1940f9 100644 (file)
@@ -21,7 +21,7 @@ import java.util.*
 
 data class MyImageByteArray(val imageData : ByteArray, val rotationDegrees: Int)
 
-class CameraLiveViewListenerImpl(private val context: Context) : IImageDataReceiver, IImageProvider, ImageAnalysis.Analyzer
+class CameraLiveViewListenerImpl(private val context: Context, private val isDisableCache : Boolean = false) : IImageDataReceiver, IImageProvider, ImageAnalysis.Analyzer
 {
     private var cachePics = ArrayList<MyImageByteArray>()
     private var isImageReceived = false
@@ -351,7 +351,7 @@ class CameraLiveViewListenerImpl(private val context: Context) : IImageDataRecei
     private fun setupLiveviewCache()
     {
         val preference = PreferenceAccessWrapper(context)
-        if (!preference.getBoolean(ID_PREFERENCE_CACHE_LIVE_VIEW_PICTURES, false))
+        if ((!preference.getBoolean(ID_PREFERENCE_CACHE_LIVE_VIEW_PICTURES, false))||(isDisableCache))
         {
             return
         }
index 28bcc08..52155a4 100644 (file)
@@ -7,7 +7,6 @@ import android.view.View
 import androidx.camera.core.ImageCapture
 import androidx.fragment.app.FragmentActivity
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.IKeyDown
-import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert
 import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert.Companion.ID_BUTTON_SHUTTER
 import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert.Companion.ID_PREFERENCE_CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW
 import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert.Companion.ID_PREFERENCE_CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW_DEFAULT_VALUE
@@ -21,12 +20,12 @@ import jp.osdn.gokigen.gokigenassets.preference.PreferenceAccessWrapper
 import jp.osdn.gokigen.gokigenassets.scene.IVibrator
 
 
-class FileControl(private val context: FragmentActivity, private val storeImage : IStoreImage, private val vibrator : IVibrator) : View.OnClickListener, IKeyDown
+class FileControl(private val context: FragmentActivity, private val storeImage : IStoreImage, private val vibrator : IVibrator) : View.OnClickListener, View.OnLongClickListener, IKeyDown
 {
     private val storeLocal = ImageStoreLocal(context)
     private val storeExternal = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { ImageStoreExternal(context) } else { ImageStoreExternalLegacy(context) }
     private var imageCapture: ImageCapture? = null
-    private var addId : Int = 0
+    private var cameraId : Int = 0
 
     fun prepare() : ImageCapture?
     {
@@ -48,7 +47,7 @@ class FileControl(private val context: FragmentActivity, private val storeImage
 
     fun setId(id : Int)
     {
-        addId = id
+        cameraId = id
     }
 
     private fun takePhoto()
@@ -65,7 +64,7 @@ class FileControl(private val context: FragmentActivity, private val storeImage
             if (captureBothCamera)
             {
                 // ライブビュー画像を保管する場合...
-                val thread = Thread { storeImage.doStore(addId) }
+                val thread = Thread { storeImage.doStore(cameraId, false) }
                 try
                 {
                     thread.start()
@@ -94,12 +93,12 @@ class FileControl(private val context: FragmentActivity, private val storeImage
             if (!isLocalLocation)
             {
                 // 共用フォルダに保存
-                isStoreLocal = !storeExternal.takePhoto(addId, imageCapture)
+                isStoreLocal = !storeExternal.takePhoto(cameraId, imageCapture)
             }
             if (isStoreLocal)
             {
                 // アプリ専用フォルダに登録
-                storeLocal.takePhoto(addId, imageCapture)
+                storeLocal.takePhoto(cameraId, imageCapture)
             }
         }
         catch (e: Exception)
@@ -140,4 +139,9 @@ class FileControl(private val context: FragmentActivity, private val storeImage
     {
         private val TAG = FileControl::class.java.simpleName
     }
+
+    override fun onLongClick(v: View?): Boolean
+    {
+        return (false)
+    }
 }
index 7eb552e..92891ff 100644 (file)
@@ -2,14 +2,17 @@ package jp.osdn.gokigen.mangle.scene
 
 import androidx.appcompat.app.AppCompatActivity
 import jp.osdn.gokigen.gokigenassets.camera.CameraPreference
+import jp.osdn.gokigen.gokigenassets.camera.CameraPreferenceKeySet
 import jp.osdn.gokigen.gokigenassets.camera.DummyCameraControl
 import jp.osdn.gokigen.gokigenassets.camera.ICameraPreferenceProvider
 import jp.osdn.gokigen.gokigenassets.camera.camerax.operation.CameraControl
+import jp.osdn.gokigen.gokigenassets.camera.example.ExamplePictureControl
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.*
 import jp.osdn.gokigen.gokigenassets.camera.panasonic.wrapper.PanasonicCameraControl
 import jp.osdn.gokigen.gokigenassets.camera.ricohpentax.RicohPentaxCameraControl
 import jp.osdn.gokigen.gokigenassets.camera.theta.ThetaCameraControl
 import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_CAMERAX
+import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_EXAMPLE
 import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_NONE
 import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_PANASONIC
 import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_PENTAX
@@ -77,6 +80,7 @@ import jp.osdn.gokigen.mangle.preference.IPreferencePropertyAccessor.Companion.P
 class CameraProvider(private val activity: AppCompatActivity, private val informationNotify: IInformationReceiver, private val vibrator : IVibrator, private val statusReceiver : ICameraStatusReceiver)
 {
     private var cameraXisCreated = false
+    private val isMultiCamera = false
     private lateinit var cameraXControl0: ICameraControl
     private lateinit var cameraXControl1: ICameraControl
 
@@ -90,10 +94,11 @@ class CameraProvider(private val activity: AppCompatActivity, private val inform
                 PREFERENCE_CAMERA_METHOD_2 -> setupCameraPreference2(wrapper)
                 PREFERENCE_CAMERA_METHOD_3 -> setupCameraPreference3(wrapper)
                 PREFERENCE_CAMERA_METHOD_4 -> setupCameraPreference4(wrapper)
-                else -> setupCameraPreference0()
+                else -> setupCameraPreference0(wrapper)
             }
             return (when (cameraPreference.getCameraMethod()) {
                 PREFERENCE_CAMERA_METHOD_NONE -> DummyCameraControl()
+                PREFERENCE_CAMERA_METHOD_EXAMPLE -> prepareExamplePictureControl(cameraPreference)
                 PREFERENCE_CAMERA_METHOD_CAMERAX -> prepareCameraXControl(cameraPreference)
                 PREFERENCE_CAMERA_METHOD_THETA -> prepareThetaCameraControl(cameraPreference)
                 PREFERENCE_CAMERA_METHOD_PENTAX -> preparePentaxCameraControl(cameraPreference)
@@ -112,7 +117,7 @@ class CameraProvider(private val activity: AppCompatActivity, private val inform
     {
         try
         {
-            return (prepareCameraXControl(setupCameraPreference0()))
+            return (prepareCameraXControl(setupCameraPreference0(PreferenceAccessWrapper(activity))))
         }
         catch (e : Exception)
         {
@@ -136,9 +141,9 @@ class CameraProvider(private val activity: AppCompatActivity, private val inform
         return (cameraSequence)
     }
 
-    private fun setupCameraPreference0() : ICameraPreferenceProvider
+    private fun setupCameraPreference0(wrapper : PreferenceAccessWrapper) : ICameraPreferenceProvider
     {
-        return (CameraPreference(PREFERENCE_CAMERA_METHOD_NONE))
+        return (CameraPreference(wrapper, PREFERENCE_CAMERA_METHOD_NONE))
     }
 
     private fun setupCameraPreference1(wrapper : PreferenceAccessWrapper) : ICameraPreferenceProvider
@@ -151,7 +156,7 @@ class CameraProvider(private val activity: AppCompatActivity, private val inform
         val option4  = wrapper.getString(PREFERENCE_CAMERA_OPTION4_1, PREFERENCE_CAMERA_OPTION4_1_DEFAULT_VALUE)
         val option5  = wrapper.getString(PREFERENCE_CAMERA_OPTION5_1, PREFERENCE_CAMERA_OPTION5_1_DEFAULT_VALUE)
 
-        return (CameraPreference(method, sequence, option1, option2, option3, option4, option5))
+        return (CameraPreference(wrapper, method, sequence, option1, option2, option3, option4, option5, CameraPreferenceKeySet(PREFERENCE_CAMERA_OPTION1_1, PREFERENCE_CAMERA_OPTION2_1, PREFERENCE_CAMERA_OPTION3_1, PREFERENCE_CAMERA_OPTION4_1, PREFERENCE_CAMERA_OPTION5_1)))
     }
 
     private fun setupCameraPreference2(wrapper : PreferenceAccessWrapper) : ICameraPreferenceProvider
@@ -164,7 +169,7 @@ class CameraProvider(private val activity: AppCompatActivity, private val inform
         val option4  = wrapper.getString(PREFERENCE_CAMERA_OPTION4_2, PREFERENCE_CAMERA_OPTION4_2_DEFAULT_VALUE)
         val option5  = wrapper.getString(PREFERENCE_CAMERA_OPTION5_2, PREFERENCE_CAMERA_OPTION5_2_DEFAULT_VALUE)
 
-        return (CameraPreference(method, sequence, option1, option2, option3, option4, option5))
+        return (CameraPreference(wrapper, method, sequence, option1, option2, option3, option4, option5, CameraPreferenceKeySet(PREFERENCE_CAMERA_OPTION1_2, PREFERENCE_CAMERA_OPTION2_2, PREFERENCE_CAMERA_OPTION3_2, PREFERENCE_CAMERA_OPTION4_2, PREFERENCE_CAMERA_OPTION5_2)))
     }
 
     private fun setupCameraPreference3(wrapper : PreferenceAccessWrapper) : ICameraPreferenceProvider
@@ -177,7 +182,7 @@ class CameraProvider(private val activity: AppCompatActivity, private val inform
         val option4  = wrapper.getString(PREFERENCE_CAMERA_OPTION4_3, PREFERENCE_CAMERA_OPTION4_3_DEFAULT_VALUE)
         val option5  = wrapper.getString(PREFERENCE_CAMERA_OPTION5_3, PREFERENCE_CAMERA_OPTION5_3_DEFAULT_VALUE)
 
-        return (CameraPreference(method, sequence, option1, option2, option3, option4, option5))
+        return (CameraPreference(wrapper, method, sequence, option1, option2, option3, option4, option5, CameraPreferenceKeySet(PREFERENCE_CAMERA_OPTION1_3, PREFERENCE_CAMERA_OPTION2_3, PREFERENCE_CAMERA_OPTION3_3, PREFERENCE_CAMERA_OPTION4_3, PREFERENCE_CAMERA_OPTION5_3)))
     }
 
     private fun setupCameraPreference4(wrapper : PreferenceAccessWrapper) : ICameraPreferenceProvider
@@ -190,7 +195,7 @@ class CameraProvider(private val activity: AppCompatActivity, private val inform
         val option4  = wrapper.getString(PREFERENCE_CAMERA_OPTION4_4, PREFERENCE_CAMERA_OPTION4_4_DEFAULT_VALUE)
         val option5  = wrapper.getString(PREFERENCE_CAMERA_OPTION5_4, PREFERENCE_CAMERA_OPTION5_4_DEFAULT_VALUE)
 
-        return (CameraPreference(method, sequence, option1, option2, option3, option4, option5))
+        return (CameraPreference(wrapper, method, sequence, option1, option2, option3, option4, option5, CameraPreferenceKeySet(PREFERENCE_CAMERA_OPTION1_4, PREFERENCE_CAMERA_OPTION2_4, PREFERENCE_CAMERA_OPTION3_4, PREFERENCE_CAMERA_OPTION4_4, PREFERENCE_CAMERA_OPTION5_4)))
     }
 
     private fun prepareThetaCameraControl(cameraPreference : ICameraPreferenceProvider) : ICameraControl
@@ -208,13 +213,22 @@ class CameraProvider(private val activity: AppCompatActivity, private val inform
         return (PanasonicCameraControl(activity, vibrator, cameraPreference, statusReceiver))
     }
 
+    private fun prepareExamplePictureControl(cameraPreference : ICameraPreferenceProvider) : ICameraControl
+    {
+        return (ExamplePictureControl(activity, vibrator, cameraPreference))
+    }
+
     private fun prepareCameraXControl(cameraPreference : ICameraPreferenceProvider): ICameraControl
     {
         if ((cameraXisCreated)&&(::cameraXControl0.isInitialized))
         {
-            cameraXControl1 = CameraControl(activity, cameraPreference, vibrator)
-            cameraXisCreated = true
-            return (cameraXControl1)
+            if (isMultiCamera)
+            {
+                cameraXControl1 = CameraControl(activity, cameraPreference, vibrator)
+                cameraXisCreated = true
+                return (cameraXControl1)
+            }
+            return (cameraXControl0)
         }
         cameraXControl0 = CameraControl(activity, cameraPreference, vibrator)
         cameraXisCreated = true
index bfff4dd..db43ccc 100644 (file)
@@ -16,6 +16,7 @@
 
     <string-array name="connection_method">
         <item>None</item>
+        <item>Show Example</item>
         <item>Internal Camera</item>
         <item>Ricoh GR / PENTAX</item>
         <item>Ricoh Theta(OSC)</item>
@@ -31,6 +32,7 @@
 
     <string-array name="connection_method_value">
         <item>NONE</item>
+        <item>EXAMPLE</item>
         <item>camerax</item>
         <item>RICOH</item>
         <item>THETA</item>