OSDN Git Service

Panasonic用のコマンド個別送信用ダイアログを作成。
authorMRSa <mrsa@myad.jp>
Tue, 23 Jul 2019 16:12:46 +0000 (01:12 +0900)
committerMRSa <mrsa@myad.jp>
Tue, 23 Jul 2019 16:12:46 +0000 (01:12 +0900)
app/src/main/java/net/osdn/gokigen/a01d/A01dMain.java
app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/IPanasonicInterfaceProvider.java
app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/operation/PanasonicSendCommandDialog.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/wrapper/PanasonicCameraWrapper.java
app/src/main/java/net/osdn/gokigen/a01d/liveview/LiveViewFragment.java
app/src/main/res/layout-land/panasonic_request_layout.xml [new file with mode: 0644]
app/src/main/res/layout/panasonic_request_layout.xml [new file with mode: 0644]
app/src/main/res/values-ja/strings.xml
app/src/main/res/values/strings.xml

index 2c53c5d..d0e7eb6 100644 (file)
@@ -15,6 +15,7 @@ package net.osdn.gokigen.a01d;
         import net.osdn.gokigen.a01d.camera.ICameraStatusReceiver;
         import net.osdn.gokigen.a01d.camera.ICameraConnection;
         import net.osdn.gokigen.a01d.camera.olympus.wrapper.connection.ble.ICameraPowerOn;
+        import net.osdn.gokigen.a01d.camera.panasonic.operation.PanasonicSendCommandDialog;
         import net.osdn.gokigen.a01d.camera.sony.cameraproperty.SonyCameraApiListFragment;
         import net.osdn.gokigen.a01d.liveview.IStatusViewDrawer;
         import net.osdn.gokigen.a01d.liveview.LiveViewFragment;
@@ -230,8 +231,15 @@ public class A01dMain extends AppCompatActivity implements ICameraStatusReceiver
             }
             else if (method == ICameraConnection.CameraConnectionMethod.PANASONIC)
             {
-                // OPCカメラでない場合には、「OPCカメラのみ有効です」表示をして画面遷移させない
-                Toast.makeText(getApplicationContext(), getText(R.string.only_opc_feature), Toast.LENGTH_SHORT).show();
+                try
+                {
+                    // Panasonicの場合は、コマンド送信ダイアログを表示する
+                    PanasonicSendCommandDialog.newInstance(interfaceProvider.getPanasonicInterface().getSendCommandCallback()).show(getSupportFragmentManager(), "panasonicSendCommandDialog");
+                }
+                catch (Exception e)
+                {
+                    e.printStackTrace();
+                }
             }
             else if (method == ICameraConnection.CameraConnectionMethod.FUJI_X)
             {
index dec6a40..d5727da 100644 (file)
@@ -7,6 +7,7 @@ import net.osdn.gokigen.a01d.camera.IFocusingControl;
 import net.osdn.gokigen.a01d.camera.ILiveViewControl;
 import net.osdn.gokigen.a01d.camera.IZoomLensControl;
 import net.osdn.gokigen.a01d.camera.IDisplayInjector;
+import net.osdn.gokigen.a01d.camera.panasonic.operation.PanasonicSendCommandDialog;
 import net.osdn.gokigen.a01d.camera.panasonic.wrapper.IPanasonicCamera;
 import net.osdn.gokigen.a01d.liveview.liveviewlistener.ILiveViewListener;
 
@@ -23,5 +24,7 @@ public interface IPanasonicInterfaceProvider
     ICaptureControl getCaptureControl();
     IDisplayInjector getDisplayInjector();
 
+    PanasonicSendCommandDialog.Callback getSendCommandCallback();
+
     IPanasonicCamera getPanasonicCamera();
 }
diff --git a/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/operation/PanasonicSendCommandDialog.java b/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/operation/PanasonicSendCommandDialog.java
new file mode 100644 (file)
index 0000000..1600feb
--- /dev/null
@@ -0,0 +1,155 @@
+package net.osdn.gokigen.a01d.camera.panasonic.operation;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+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.EditText;
+
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.DialogFragment;
+
+import net.osdn.gokigen.a01d.R;
+
+public class PanasonicSendCommandDialog  extends DialogFragment
+{
+    private final String TAG = toString();
+    private PanasonicSendCommandDialog.Callback callback;
+    Dialog myDialog = null;
+
+    /**
+     *
+     *
+     */
+    public static PanasonicSendCommandDialog newInstance(@Nullable PanasonicSendCommandDialog.Callback callback)
+    {
+        PanasonicSendCommandDialog instance = new PanasonicSendCommandDialog();
+        instance.prepare(callback);
+
+        // パラメータはBundleにまとめておく
+        Bundle arguments = new Bundle();
+        //arguments.putString("method", method);
+        //arguments.putString("message", message);
+        instance.setArguments(arguments);
+
+        return (instance);
+    }
+
+    /**
+     *
+     *
+     */
+    private void prepare(@Nullable PanasonicSendCommandDialog.Callback callback)
+    {
+        this.callback = callback;
+    }
+
+    @Override
+    public void onPause()
+    {
+        super.onPause();
+        Log.v(TAG, "AlertDialog::onPause()");
+        if (myDialog != null)
+        {
+            myDialog.cancel();
+        }
+    }
+
+    /**
+     *
+     *
+     */
+    @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.panasonic_request_layout, null, false);
+        alertDialog.setView(alertView);
+
+        alertDialog.setIcon(R.drawable.ic_linked_camera_black_24dp);
+        alertDialog.setTitle(activity.getString(R.string.dialog_fujix_command_title_command));
+        //final TextView titleName = alertView.findViewById(R.id.method_name);
+        final EditText service = alertView.findViewById(R.id.edit_service);
+        final EditText parameter = alertView.findViewById(R.id.edit_parameter);
+        final EditText command = alertView.findViewById(R.id.edit_command);
+        alertDialog.setCancelable(true);
+
+        try
+        {
+            if (service != null)
+            {
+                service.setText(activity.getText(R.string.panasonic_service_string));
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+
+        // ボタンを設定する(実行ボタン)
+        alertDialog.setPositiveButton(activity.getString(R.string.dialog_positive_execute),
+                new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which)
+                    {
+                        try
+                        {
+                            Activity activity = getActivity();
+                            if (activity != null)
+                            {
+                                if (callback != null)
+                                {
+                                    callback.sendPanasonicCommandRequest(service.getText().toString(), command.getText().toString(), parameter.getText().toString());
+                                }
+                            }
+                        }
+                        catch (Exception e)
+                        {
+                            e.printStackTrace();
+                            if (callback != null)
+                            {
+                                callback.cancelledPanasonicCommandRequest();
+                            }
+                        }
+                        dialog.dismiss();
+                    }
+                });
+
+        // ボタンを設定する (キャンセルボタン)
+        alertDialog.setNegativeButton(activity.getString(R.string.dialog_negative_cancel),
+                new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                        if (callback != null)
+                        {
+                            callback.cancelledPanasonicCommandRequest();
+                        }
+                        dialog.cancel();
+                    }
+                });
+
+        // 確認ダイアログを応答する
+        myDialog = alertDialog.create();
+        return (myDialog);
+    }
+
+    /**
+     * コールバックインタフェース
+     *
+     */
+    public interface Callback
+    {
+        void sendPanasonicCommandRequest(String service, String command, String parameter); // OKを選択したとき
+        void cancelledPanasonicCommandRequest();   // キャンセルしたとき
+    }
+}
index bf73062..7f817b8 100644 (file)
@@ -17,6 +17,7 @@ import net.osdn.gokigen.a01d.camera.panasonic.IPanasonicInterfaceProvider;
 import net.osdn.gokigen.a01d.camera.panasonic.operation.PanasonicCameraCaptureControl;
 import net.osdn.gokigen.a01d.camera.panasonic.operation.PanasonicCameraFocusControl;
 import net.osdn.gokigen.a01d.camera.panasonic.operation.PanasonicCameraZoomLensControl;
+import net.osdn.gokigen.a01d.camera.panasonic.operation.PanasonicSendCommandDialog;
 import net.osdn.gokigen.a01d.camera.panasonic.wrapper.connection.PanasonicCameraConnection;
 import net.osdn.gokigen.a01d.camera.panasonic.wrapper.eventlistener.CameraEventObserver;
 import net.osdn.gokigen.a01d.camera.panasonic.wrapper.eventlistener.ICameraEventObserver;
@@ -189,6 +190,12 @@ public class PanasonicCameraWrapper implements IPanasonicCameraHolder, IPanasoni
     }
 
     @Override
+    public PanasonicSendCommandDialog.Callback getSendCommandCallback()
+    {
+        return (null);
+    }
+
+    @Override
     public IPanasonicCamera getPanasonicCamera()
     {
         return (panasonicCamera);
index 8b38cc5..3025ae0 100644 (file)
@@ -253,7 +253,7 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
                                 {
                                     manualFocus.setVisibility(View.INVISIBLE);
                                 }
-                                propertyButton.setVisibility(View.INVISIBLE);  // 押すとAPI一覧に遷移
+                                propertyButton.setVisibility(View.VISIBLE);  // 押すとAPI一覧に遷移
                             }
                         });
                     }
diff --git a/app/src/main/res/layout-land/panasonic_request_layout.xml b/app/src/main/res/layout-land/panasonic_request_layout.xml
new file mode 100644 (file)
index 0000000..ac3d911
--- /dev/null
@@ -0,0 +1,54 @@
+<?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="match_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/method_name"
+                android:tag="title"
+                android:maxWidth="130dp"
+                android:minWidth="130dp"
+                android:layout_gravity="start">
+            </TextView>
+
+
+            <EditText android:id="@+id/edit_service"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:autoLink="all"
+                android:linksClickable="true"
+                android:inputType="text"
+                android:hint="@string/dialog_service_hint"
+                />
+
+            <EditText android:id="@+id/edit_command"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:autoLink="all"
+                android:linksClickable="true"
+                android:inputType="text"
+                android:hint="@string/dialog_command_hint"
+                />
+
+            <EditText android:id="@+id/edit_parameter"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:autoLink="all"
+                android:linksClickable="true"
+                android:inputType="text"
+                android:hint="@string/dialog_parameter_hint"
+                />
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>
diff --git a/app/src/main/res/layout/panasonic_request_layout.xml b/app/src/main/res/layout/panasonic_request_layout.xml
new file mode 100644 (file)
index 0000000..8da4952
--- /dev/null
@@ -0,0 +1,53 @@
+<?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="match_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/method_name"
+                android:tag="title"
+                android:maxWidth="130dp"
+                android:minWidth="130dp"
+                android:layout_gravity="start">
+            </TextView>
+
+
+            <EditText android:id="@+id/edit_service"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:autoLink="all"
+                android:linksClickable="true"
+                android:inputType="text"
+                android:hint="@string/dialog_service_hint"
+                />
+            <EditText android:id="@+id/edit_command"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:autoLink="all"
+                android:linksClickable="true"
+                android:inputType="text"
+                android:hint="@string/dialog_command_hint"
+                />
+
+            <EditText android:id="@+id/edit_parameter"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:autoLink="all"
+                android:linksClickable="true"
+                android:inputType="text"
+                android:hint="@string/dialog_parameter_hint"
+                />
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>
index c5f7422..b627fb8 100644 (file)
     <string name="dialog_send_message">送信</string>
     <string name="dialog_button_liveview">ライブビュー</string>
     <string name="dialog_button_playback">画像参照</string>
+    <string name="dialog_command_hint">(command)</string>
+    <string name="dialog_service_hint">(service)</string>
+    <string name="panasonic_service_string">cam.cgi</string>
 
 </resources>
index 6a5091d..edf3b55 100644 (file)
     <string name="dialog_send_message">Send</string>
     <string name="dialog_button_liveview">to LiveView</string>
     <string name="dialog_button_playback">to Playback</string>
+    <string name="dialog_command_hint">(command)</string>
+    <string name="dialog_service_hint">(service)</string>
+    <string name="panasonic_service_string">cam.cgi</string>
 
 </resources>