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;
}
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)
{
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;
ICaptureControl getCaptureControl();
IDisplayInjector getDisplayInjector();
+ PanasonicSendCommandDialog.Callback getSendCommandCallback();
+
IPanasonicCamera getPanasonicCamera();
}
--- /dev/null
+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(); // キャンセルしたとき
+ }
+}
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;
}
@Override
+ public PanasonicSendCommandDialog.Callback getSendCommandCallback()
+ {
+ return (null);
+ }
+
+ @Override
public IPanasonicCamera getPanasonicCamera()
{
return (panasonicCamera);
{
manualFocus.setVisibility(View.INVISIBLE);
}
- propertyButton.setVisibility(View.INVISIBLE); // 押すとAPI一覧に遷移
+ propertyButton.setVisibility(View.VISIBLE); // 押すとAPI一覧に遷移
}
});
}
--- /dev/null
+<?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>
--- /dev/null
+<?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>
<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>
<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>