1 package net.osdn.gokigen.joggingtimer.utilities;
3 import android.app.Activity;
4 import android.app.AlertDialog;
5 import android.app.Dialog;
6 import android.app.DialogFragment;
7 import android.content.Context;
8 import android.content.DialogInterface;
9 import android.content.res.TypedArray;
10 import android.graphics.Color;
11 import android.graphics.drawable.Drawable;
12 import android.os.Build;
13 import android.os.Bundle;
14 import android.support.annotation.NonNull;
15 import android.util.Log;
16 import android.view.ContextThemeWrapper;
17 import android.view.LayoutInflater;
18 import android.view.View;
19 import android.view.ViewGroup;
20 import android.widget.AdapterView;
21 import android.widget.ArrayAdapter;
22 import android.widget.EditText;
23 import android.widget.LinearLayout;
24 import android.widget.Spinner;
25 import android.widget.TextView;
27 import net.osdn.gokigen.joggingtimer.R;
33 public class DataEditDialog extends DialogFragment
35 private final String TAG = toString();
36 private int iconResId = 0;
37 private String title = "";
38 private int selectedPosition = 0;
39 private DataEditDialog.Callback callback = null;
40 Dialog myDialog = null;
46 public static DataEditDialog newInstance(int iconResId, String title, @NonNull DataEditDialog.Callback callback)
48 DataEditDialog instance = new DataEditDialog();
49 instance.prepare(iconResId, title, callback);
51 // パラメータはBundleにまとめておく
52 Bundle arguments = new Bundle();
53 arguments.putString("title", title);
54 //arguments.putString("message", message);
55 instance.setArguments(arguments);
64 private void prepare(int iconResId, String title, @NonNull DataEditDialog.Callback callback)
66 this.iconResId = iconResId;
68 this.callback = callback;
76 public @NonNull Dialog onCreateDialog(Bundle savedInstanceState)
78 Activity activity = getActivity();
81 //final AlertDialog.Builder alertDialog = new AlertDialog.Builder(new ContextThemeWrapper(activity, R.style.wear2_dialog_theme));
82 final AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
85 // Get the layout inflater
86 LayoutInflater inflater = activity.getLayoutInflater();
87 final View alertView = inflater.inflate(R.layout.information_dialog, null, false);
88 alertDialog.setView(alertView);
90 final String[] objects = activity.getResources().getStringArray(R.array.icon_selection_id);
91 final Spinner spinner = alertView.findViewById(R.id.spinner_selection);
92 final EditText titleText = alertView.findViewById(R.id.edit_title);
95 if (Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.M)
97 titleText.setTextColor(Color.BLACK);
102 titleText.setText(title);
103 IconListAdapter adapter = new IconListAdapter(activity, R.layout.icon_list, objects);
104 spinner.setAdapter(adapter);
105 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
107 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
108 Log.v(TAG, "onItemSelected : " + position + " (" + id + ")");
109 selectedPosition = position;
113 public void onNothingSelected(AdapterView<?> parent) {
114 Log.v(TAG, "onNothingSelected");
122 alertDialog.setIcon(iconResId);
123 alertDialog.setMessage(activity.getString(R.string.dialog_message_data_edit));
124 alertDialog.setCancelable(true);
127 alertDialog.setPositiveButton(activity.getString(R.string.dialog_positive_execute),
128 new DialogInterface.OnClickListener() {
129 public void onClick(DialogInterface dialog, int which)
133 Activity activity = getActivity();
134 if (activity != null)
136 String array[] = activity.getResources().getStringArray(R.array.icon_selection_id);
137 if (callback != null)
139 callback.dataEdited(Integer.parseInt(array[selectedPosition]), titleText.getText().toString());
146 if (callback != null)
148 callback.cancelled();
155 // ボタンを設定する (キャンセルボタン)
156 alertDialog.setNegativeButton(activity.getString(R.string.dialog_negative_cancel),
157 new DialogInterface.OnClickListener() {
158 public void onClick(DialogInterface dialog, int which) {
159 if (callback != null)
161 callback.cancelled();
168 myDialog = alertDialog.create();
174 public void onPause()
177 Log.v(TAG, "AlertDialog::onPause()");
178 if (myDialog != null)
188 public interface Callback
190 void dataEdited(int iconId, String title); // OKを選択したとき
191 void cancelled(); // キャンセルしたとき
194 public class IconListAdapter extends ArrayAdapter<String>
196 private final LayoutInflater inflater;
197 private final int layoutResourceId;
198 private final String[] stringList;
200 private IconListAdapter(Activity activity, int layoutResourceId, String[] strings)
202 super(activity, layoutResourceId, strings);
203 inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
204 stringList = strings;
205 this.layoutResourceId = layoutResourceId;
209 public int getCount()
211 return stringList.length;
215 public String getItem(int position)
217 return stringList[position];
221 public long getItemId(int position)
227 public @NonNull View getView(int position, View convertView, @NonNull ViewGroup parent)
229 View row = inflater.inflate(layoutResourceId, parent, false);
232 TextView target = row.findViewById(R.id.selection_icon);
233 TypedArray imgs = getActivity().getResources().obtainTypedArray(R.array.icon_selection);
234 int rscId = imgs.getResourceId(position, R.drawable.ic_label_outline_black_24dp);
235 target.setCompoundDrawablesWithIntrinsicBounds(rscId, 0, 0, 0);
246 public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent)
248 return (getView(position, convertView, parent));