OSDN Git Service

87cb67f9f45f181441d463c38cc392cbb26cfc2f
[gokigen/A01d.git] / app / src / main / java / net / osdn / gokigen / a01d / camera / sony / cameraproperty / SendRequestDialog.java
1 package net.osdn.gokigen.a01d.camera.sony.cameraproperty;
2
3 import android.app.Activity;
4 import android.app.AlertDialog;
5 import android.app.Dialog;
6 import android.support.v4.app.DialogFragment;
7 import android.content.DialogInterface;
8 import android.os.Bundle;
9 import android.support.annotation.NonNull;
10 import android.support.annotation.Nullable;
11 import android.util.Log;
12 import android.view.LayoutInflater;
13 import android.view.View;
14 import android.widget.AdapterView;
15 import android.widget.ArrayAdapter;
16 import android.widget.EditText;
17 import android.widget.Spinner;
18 import android.widget.TextView;
19
20 import net.osdn.gokigen.a01d.R;
21 import net.osdn.gokigen.a01d.camera.sony.wrapper.ISonyCameraApi;
22
23
24 /**
25  *
26  *
27  */
28 public class SendRequestDialog  extends DialogFragment
29 {
30     private final String TAG = toString();
31     private ISonyCameraApi cameraApi;
32     private String method = "";
33     private int selectedPosition = 0;
34     private SendRequestDialog.Callback callback = null;
35     Dialog myDialog = null;
36
37     /**
38      *
39      *
40      */
41     public static SendRequestDialog newInstance(@NonNull ISonyCameraApi cameraApi, @NonNull  String method, @Nullable SendRequestDialog.Callback callback)
42     {
43         SendRequestDialog instance = new SendRequestDialog();
44         instance.prepare(cameraApi, method, callback);
45
46         // パラメータはBundleにまとめておく
47         Bundle arguments = new Bundle();
48         arguments.putString("method", method);
49         //arguments.putString("message", message);
50         instance.setArguments(arguments);
51
52         return (instance);
53     }
54
55     /**
56      *
57      *
58      */
59     private void prepare(@NonNull ISonyCameraApi cameraApi,@NonNull  String method,  @Nullable SendRequestDialog.Callback callback)
60     {
61         this.cameraApi = cameraApi;
62         this.method = method;
63         this.callback = callback;
64     }
65
66     /**
67      *
68      *
69      */
70     @Override
71     public @NonNull Dialog onCreateDialog(Bundle savedInstanceState)
72     {
73         final Activity activity = getActivity();
74
75         // 確認ダイアログの生成
76         //final AlertDialog.Builder alertDialog = new AlertDialog.Builder(new ContextThemeWrapper(activity, R.style.wear2_dialog_theme));
77         final AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
78
79         // Get the layout inflater
80         LayoutInflater inflater = activity.getLayoutInflater();
81         final View alertView = inflater.inflate(R.layout.request_edit_layout, null, false);
82         alertDialog.setView(alertView);
83
84         alertDialog.setIcon(R.drawable.ic_linked_camera_black_24dp);
85         alertDialog.setTitle("API : " + method);
86         final Spinner spinner = alertView.findViewById(R.id.spinner_selection_service);
87         final TextView methodName = alertView.findViewById(R.id.method_name);
88         final EditText parameter = alertView.findViewById(R.id.edit_parameter);
89         final EditText version = alertView.findViewById(R.id.edit_version);
90         try
91         {
92             methodName.setText("");
93             version.setText(activity.getString(R.string.dialog_version_hint));
94             ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item);
95             adapter.addAll(cameraApi.getSonyApiServiceList());
96             spinner.setAdapter(adapter);
97             spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
98             {
99                 @Override
100                 public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
101                 {
102                     Log.v(TAG, "onItemSelected : " + position + " (" + id + ")");
103                     selectedPosition = position;
104                 }
105
106                 @Override
107                 public void onNothingSelected(AdapterView<?> parent)
108                 {
109                     Log.v(TAG, "onNothingSelected");
110                 }
111             });
112         }
113         catch (Exception e)
114         {
115             e.printStackTrace();
116         }
117         alertDialog.setCancelable(true);
118
119         // ボタンを設定する(実行ボタン)
120         alertDialog.setPositiveButton(activity.getString(R.string.dialog_positive_execute),
121                 new DialogInterface.OnClickListener() {
122                     public void onClick(DialogInterface dialog, int which)
123                     {
124                         try
125                         {
126                             Activity activity = getActivity();
127                             if (activity != null)
128                             {
129                                 if (callback != null)
130                                 {
131                                     callback.sendRequest((String) spinner.getAdapter().getItem(selectedPosition), method, parameter.getText().toString(), version.getText().toString());
132                                 }
133                             }
134                         }
135                         catch (Exception e)
136                         {
137                             e.printStackTrace();
138                             if (callback != null)
139                             {
140                                 callback.cancelled();
141                             }
142                         }
143                         dialog.dismiss();
144                     }
145                 });
146
147         // ボタンを設定する (キャンセルボタン)
148         alertDialog.setNegativeButton(activity.getString(R.string.dialog_negative_cancel),
149                 new DialogInterface.OnClickListener() {
150                     public void onClick(DialogInterface dialog, int which) {
151                         if (callback != null)
152                         {
153                             callback.cancelled();
154                         }
155                         dialog.cancel();
156                     }
157                 });
158
159         // 確認ダイアログを応答する
160         myDialog = alertDialog.create();
161         return (myDialog);
162     }
163
164
165     @Override
166     public void onPause()
167     {
168         super.onPause();
169         Log.v(TAG, "AlertDialog::onPause()");
170         if (myDialog != null)
171         {
172             myDialog.cancel();
173         }
174     }
175
176     /**
177      * コールバックインタフェース
178      *
179      */
180     public interface Callback
181     {
182         void sendRequest(String service, String apiName, String parameter, String version); // OKを選択したとき
183         void cancelled();                                                                  // キャンセルしたとき
184     }
185 }