OSDN Git Service

ステータス値を表示するダイアログを用意してみた。(FUJI X)
authorMRSa <mrsa@myad.jp>
Fri, 7 Jun 2019 16:03:45 +0000 (01:03 +0900)
committerMRSa <mrsa@myad.jp>
Fri, 7 Jun 2019 16:03:45 +0000 (01:03 +0900)
app/src/main/java/net/osdn/gokigen/a01d/A01dMain.java
app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/IFujiXInterfaceProvider.java
app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/cameraproperty/FujiXCameraStatusDialog.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/FujiXInterfaceProvider.java
app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/status/FujiXStatusHolder.java
app/src/main/java/net/osdn/gokigen/a01d/liveview/LiveViewFragment.java
app/src/main/res/layout-land/dialog_status_show.xml [new file with mode: 0644]
app/src/main/res/layout/dialog_status_show.xml [new file with mode: 0644]
app/src/main/res/values-ja/strings.xml
app/src/main/res/values/strings.xml

index e8c1666..646de12 100644 (file)
@@ -10,6 +10,7 @@ import android.widget.Toast;
 
 import net.osdn.gokigen.a01d.camera.CameraInterfaceProvider;
 import net.osdn.gokigen.a01d.camera.IInterfaceProvider;
+import net.osdn.gokigen.a01d.camera.fujix.cameraproperty.FujiXCameraStatusDialog;
 import net.osdn.gokigen.a01d.camera.olympus.cameraproperty.OlyCameraPropertyListFragment;
 import net.osdn.gokigen.a01d.camera.ICameraStatusReceiver;
 import net.osdn.gokigen.a01d.camera.ICameraConnection;
@@ -109,7 +110,7 @@ public class A01dMain extends AppCompatActivity implements ICameraStatusReceiver
      *
      */
     @Override
-    public void onRequestPermissionsResult(int requestCode, @NonNull String  permissions[], @NonNull int[] grantResults)
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[]  permissions, @NonNull int[] grantResults)
     {
         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
         onReadyClass();
@@ -224,8 +225,15 @@ public class A01dMain extends AppCompatActivity implements ICameraStatusReceiver
             }
             else if (method == ICameraConnection.CameraConnectionMethod.FUJI_X)
             {
-                // OPCカメラでない場合には、「OPCカメラのみ有効です」表示をして画面遷移させない
-                Toast.makeText(getApplicationContext(), getText(R.string.only_opc_feature), Toast.LENGTH_SHORT).show();
+                try
+                {
+                    // FUJI X Seriesの場合は、ステータス表示ダイアログを表示する
+                    FujiXCameraStatusDialog.newInstance(interfaceProvider.getFujiXInterface()).show(getSupportFragmentManager(), "statusDialog");
+                }
+                catch (Exception e)
+                {
+                    e.printStackTrace();
+                }
             }
             else
             {
index c20624d..be07ec2 100644 (file)
@@ -5,6 +5,7 @@ import androidx.annotation.NonNull;
 import net.osdn.gokigen.a01d.camera.CameraStatusListener;
 import net.osdn.gokigen.a01d.camera.ICameraConnection;
 import net.osdn.gokigen.a01d.camera.ICameraInformation;
+import net.osdn.gokigen.a01d.camera.ICameraStatus;
 import net.osdn.gokigen.a01d.camera.ICameraStatusWatcher;
 import net.osdn.gokigen.a01d.camera.ICaptureControl;
 import net.osdn.gokigen.a01d.camera.IDisplayInjector;
@@ -35,5 +36,6 @@ public interface IFujiXInterfaceProvider
     IFujiXCommunication getCommandCommunication();
     ICameraStatusWatcher getStatusWatcher();
     ICameraStatusUpdateNotify getStatusListener();
+    ICameraStatus getCameraStatus();
     void setAsyncEventReceiver(@NonNull IFujiXCommandCallback receiver);
 }
diff --git a/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/cameraproperty/FujiXCameraStatusDialog.java b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/cameraproperty/FujiXCameraStatusDialog.java
new file mode 100644 (file)
index 0000000..8f56232
--- /dev/null
@@ -0,0 +1,160 @@
+package net.osdn.gokigen.a01d.camera.fujix.cameraproperty;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+
+import net.osdn.gokigen.a01d.R;
+import net.osdn.gokigen.a01d.camera.ICameraStatus;
+import net.osdn.gokigen.a01d.camera.fujix.IFujiXInterfaceProvider;
+
+import java.util.List;
+
+public class FujiXCameraStatusDialog extends DialogFragment
+{
+    private final String TAG = toString();
+    private ICameraStatus cameraStatus = null;
+    private Dialog myDialog = null;
+
+    public static FujiXCameraStatusDialog newInstance(@NonNull IFujiXInterfaceProvider interfaceProvider)
+    {
+        FujiXCameraStatusDialog instance = new FujiXCameraStatusDialog();
+        instance.prepare(interfaceProvider);
+
+        // パラメータはBundleにまとめておく
+        Bundle arguments = new Bundle();
+        //arguments.putString("method", method);
+        //arguments.putString("message", message);
+        instance.setArguments(arguments);
+
+        return (instance);
+    }
+
+    private void prepare(@NonNull IFujiXInterfaceProvider interfaceProvider)
+    {
+        this.cameraStatus = interfaceProvider.getCameraStatus();
+    }
+
+    /**
+     *
+     *
+     */
+    @Override
+    public @NonNull Dialog onCreateDialog(Bundle savedInstanceState)
+    {
+        final Activity activity = getActivity();
+        final AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
+
+        // Get the layout inflater
+        LayoutInflater inflater = activity.getLayoutInflater();
+        final View alertView = inflater.inflate(R.layout.dialog_status_show, null, false);
+        alertDialog.setView(alertView);
+
+        alertDialog.setIcon(R.drawable.ic_linked_camera_black_24dp);
+        alertDialog.setTitle(getString(R.string.camera_status_title));
+        final Button updateButton = alertView.findViewById(R.id.status_update_button);
+        final TextView statusTextView = alertView.findViewById(R.id.status_text_view);
+        try
+        {
+            if (updateButton != null)
+            {
+                updateButton.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v)
+                    {
+                        try
+                        {
+                            updateStatus(statusTextView);
+                        }
+                        catch (Exception e)
+                        {
+                            e.printStackTrace();
+                        }
+                    }
+                });
+            }
+            updateStatus(statusTextView);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        alertDialog.setCancelable(true);
+
+        // ボタンを設定する(実行ボタン)
+        alertDialog.setPositiveButton(activity.getString(R.string.dialog_positive_execute),
+                new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which)
+                    {
+                        dialog.dismiss();
+                    }
+                });
+
+        // ボタンを設定する (キャンセルボタン)
+        alertDialog.setNegativeButton(activity.getString(R.string.dialog_negative_cancel),
+                new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                        dialog.cancel();
+                    }
+                });
+
+        // 確認ダイアログを応答する
+        myDialog = alertDialog.create();
+        return (myDialog);
+    }
+
+    @Override
+    public void onPause()
+    {
+        super.onPause();
+        Log.v(TAG, "AlertDialog::onPause()");
+        if (myDialog != null)
+        {
+            myDialog.cancel();
+        }
+    }
+
+    private void updateStatus(TextView statusTextView)
+    {
+        try
+        {
+            String message = "";
+            if (cameraStatus == null)
+            {
+                Log.v(TAG, "STATUS HOLDER IS NULL..");
+                return;
+            }
+            List<String> statusList = cameraStatus.getStatusList(null);
+            if (statusList == null)
+            {
+                return;
+            }
+            for (String statusName : statusList)
+            {
+                if (statusName != null)
+                {
+                    message = message.concat(statusName);
+                    message = message + " : " + cameraStatus.getStatus(statusName) + "\n";
+                }
+            }
+            if (statusTextView != null)
+            {
+                statusTextView.setText(message);
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+}
index 13078c1..4cf3777 100644 (file)
@@ -8,6 +8,7 @@ import androidx.annotation.NonNull;
 import net.osdn.gokigen.a01d.camera.CameraStatusListener;
 import net.osdn.gokigen.a01d.camera.ICameraConnection;
 import net.osdn.gokigen.a01d.camera.ICameraInformation;
+import net.osdn.gokigen.a01d.camera.ICameraStatus;
 import net.osdn.gokigen.a01d.camera.ICameraStatusReceiver;
 import net.osdn.gokigen.a01d.camera.ICameraStatusWatcher;
 import net.osdn.gokigen.a01d.camera.ICaptureControl;
@@ -160,6 +161,12 @@ public class FujiXInterfaceProvider implements IFujiXInterfaceProvider, IDisplay
     }
 
     @Override
+    public ICameraStatus getCameraStatus()
+    {
+        return (statusChecker);
+    }
+
+    @Override
     public void setAsyncEventReceiver(@NonNull IFujiXCommandCallback receiver)
     {
         asyncReceiver.setEventSubscriber(receiver);
index 0f480ed..f74c6bc 100644 (file)
@@ -10,6 +10,7 @@ import net.osdn.gokigen.a01d.liveview.ICameraStatusUpdateNotify;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 
 class FujiXStatusHolder implements IFujiXCameraProperties
 {
@@ -104,12 +105,40 @@ class FujiXStatusHolder implements IFujiXCameraProperties
         }
     }
 
+    /**
+     *   認識したカメラのステータス名称のリストを応答する
+     *
+     */
+    private List<String> getAvailableStatusNameList()
+    {
+        ArrayList<String> selection = new ArrayList<>();
+        try
+        {
+            for (int index = 0; index < statusHolder.size(); index++)
+            {
+                int key = statusHolder.keyAt(index);
+                selection.add(statusNameArray.get(key));
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return (selection);
+
+    }
+
+
 
     List<String> getAvailableItemList(String listKey)
     {
-        ArrayList<String> selection = new ArrayList<>();
+        if (listKey == null)
+        {
+            // アイテム名の一覧を応答する
+            return (getAvailableStatusNameList());
+        }
 
-        // これ違う...これだと認識したステータスの一覧だ...
+        ArrayList<String> selection = new ArrayList<>();
         try
         {
             for (int index = 0; index < statusHolder.size(); index++)
@@ -135,7 +164,8 @@ class FujiXStatusHolder implements IFujiXCameraProperties
                 String strKey = statusNameArray.valueAt(index);
                 if (key.contentEquals(strKey))
                 {
-                    return (statusHolder.get(id) + "");
+                    int value = statusHolder.get(id);
+                    return (String.format(Locale.US,"0x%08x (%d)", value, value));
                 }
             }
         }
index 72f388d..91a0e6d 100644 (file)
@@ -184,24 +184,24 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
                 // お気に入りボタン(とMFボタン)は、SONYモード, RICOH GR2モードのときには表示しない
                 final View favoriteButton = view.findViewById(R.id.show_favorite_settings_button);
                 final View propertyButton = view.findViewById(R.id.camera_property_settings_button);
-                if ((favoriteButton != null)&&(manualFocus != null))
+                if (connectionMethod == ICameraConnection.CameraConnectionMethod.SONY)
                 {
-                    runOnUiThread(new Runnable()
+                    if ((favoriteButton != null)&&(manualFocus != null))
                     {
-                        @Override
-                        public void run()
+                        runOnUiThread(new Runnable()
                         {
-                            favoriteButton.setVisibility(View.INVISIBLE);
-                            if (manualFocus != null)
+                            @Override
+                            public void run()
                             {
-                                manualFocus.setVisibility(View.INVISIBLE);
+                                favoriteButton.setVisibility(View.INVISIBLE);
+                                if (manualFocus != null)
+                                {
+                                    manualFocus.setVisibility(View.INVISIBLE);
+                                }
+                                propertyButton.setVisibility(View.INVISIBLE);
                             }
-                            propertyButton.setVisibility(View.INVISIBLE);
-                        }
-                    });
-                }
-                if (connectionMethod == ICameraConnection.CameraConnectionMethod.SONY)
-                {
+                        });
+                    }
                     if (changeLiveViewScale != null)
                     {
                         changeLiveViewScale.setVisibility(View.INVISIBLE);
@@ -213,6 +213,22 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
                 }
                 else if (connectionMethod == ICameraConnection.CameraConnectionMethod.RICOH_GR2)
                 {
+                    if ((favoriteButton != null)&&(manualFocus != null))
+                    {
+                        runOnUiThread(new Runnable()
+                        {
+                            @Override
+                            public void run()
+                            {
+                                favoriteButton.setVisibility(View.INVISIBLE);
+                                if (manualFocus != null)
+                                {
+                                    manualFocus.setVisibility(View.INVISIBLE);
+                                }
+                                propertyButton.setVisibility(View.INVISIBLE);
+                            }
+                        });
+                    }
                     if (changeLiveViewScale != null)
                     {
                         changeLiveViewScale.setVisibility(View.VISIBLE);
@@ -224,6 +240,14 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
                 }
                 else if (connectionMethod == ICameraConnection.CameraConnectionMethod.FUJI_X)
                 {
+                    if (favoriteButton != null)
+                    {
+                        favoriteButton.setVisibility(View.INVISIBLE);
+                    }
+                    if (manualFocus != null)
+                    {
+                        manualFocus.setVisibility(View.INVISIBLE);
+                    }
                     if (changeLiveViewScale != null)
                     {
                         changeLiveViewScale.setVisibility(View.INVISIBLE);
@@ -232,9 +256,12 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
                     {
                         focusIndicator.setVisibility(View.VISIBLE);
                     }
+                    if (propertyButton != null)
+                    {
+                        propertyButton.setOnClickListener(onClickTouchListener);
+                    }
                 }
             }
-
             if (manualFocus != null)
             {
                 manualFocus.setOnClickListener(onClickTouchListener);
diff --git a/app/src/main/res/layout-land/dialog_status_show.xml b/app/src/main/res/layout-land/dialog_status_show.xml
new file mode 100644 (file)
index 0000000..5973d6d
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <ScrollView
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content">
+        <LinearLayout
+            android:id="@+id/info_edit_data"
+            android:orientation="vertical"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:padding="6dp"
+            >
+            <TextView
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:id="@+id/status_text_view"
+                android:tag="status_text"
+                android:textSize="8pt"
+                android:layout_gravity="start">
+            </TextView>
+
+            <Button
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:tag="button"
+                android:id="@+id/status_update_button"
+                android:text="@string/update_status"
+                android:layout_gravity="center"
+                android:textSize="6pt" />
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>
diff --git a/app/src/main/res/layout/dialog_status_show.xml b/app/src/main/res/layout/dialog_status_show.xml
new file mode 100644 (file)
index 0000000..5973d6d
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <ScrollView
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content">
+        <LinearLayout
+            android:id="@+id/info_edit_data"
+            android:orientation="vertical"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:padding="6dp"
+            >
+            <TextView
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:id="@+id/status_text_view"
+                android:tag="status_text"
+                android:textSize="8pt"
+                android:layout_gravity="start">
+            </TextView>
+
+            <Button
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:tag="button"
+                android:id="@+id/status_update_button"
+                android:text="@string/update_status"
+                android:layout_gravity="center"
+                android:textSize="6pt" />
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>
index fac3a8c..d497dfe 100644 (file)
@@ -74,6 +74,9 @@
     <string name="data_saving">保存中、お待ちください&#8230;</string>
     <string name="save_image_failure">画像保存に失敗しました。</string>
 
+    <string name="camera_status_title">カメラ状態</string>
+    <string name="update_status">更新</string>
+
     <string name="live_view_scale_default">LV : </string>
     <string name="focal_length_with_digital_zoom_view_default"> </string>
 
index 224d851..69b57ce 100644 (file)
@@ -79,6 +79,9 @@
     <string name="data_saving">Saving&#8230;</string>
     <string name="save_image_failure">Save image is failed.</string>
 
+    <string name="camera_status_title">Camera Status</string>
+    <string name="update_status">Update</string>
+
     <string name="live_view_scale_default">LV : </string>
     <string name="focal_length_with_digital_zoom_view_default"> </string>