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.os.Build;
12 import android.os.Bundle;
13 import android.util.Log;
14 import android.view.LayoutInflater;
15 import android.view.View;
16 import android.view.ViewGroup;
17 import android.widget.AdapterView;
18 import android.widget.ArrayAdapter;
19 import android.widget.EditText;
20 import android.widget.Spinner;
21 import android.widget.TextView;
23 import androidx.annotation.NonNull;
25 import net.osdn.gokigen.joggingtimer.R;
31 public class DataEditDialog extends DialogFragment
33 private final String TAG = toString();
34 private int iconResId = 0;
35 private String title = "";
36 private int selectedPosition = 0;
37 private DataEditDialog.Callback callback = null;
38 Dialog myDialog = null;
44 public static DataEditDialog newInstance(int iconResId, String title, @NonNull DataEditDialog.Callback callback)
46 DataEditDialog instance = new DataEditDialog();
47 instance.prepare(iconResId, title, callback);
49 // パラメータはBundleにまとめておく
50 Bundle arguments = new Bundle();
51 arguments.putString("title", title);
52 //arguments.putString("message", message);
53 instance.setArguments(arguments);
62 private void prepare(int iconResId, String title, @NonNull DataEditDialog.Callback callback)
64 this.iconResId = iconResId;
66 this.callback = callback;
74 public @NonNull Dialog onCreateDialog(Bundle savedInstanceState)
76 Activity activity = getActivity();
79 //final AlertDialog.Builder alertDialog = new AlertDialog.Builder(new ContextThemeWrapper(activity, R.style.wear2_dialog_theme));
80 final AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
83 // Get the layout inflater
84 LayoutInflater inflater = activity.getLayoutInflater();
85 final View alertView = inflater.inflate(R.layout.information_dialog, null, false);
86 alertDialog.setView(alertView);
88 final String[] objects = activity.getResources().getStringArray(R.array.icon_selection_id);
89 final Spinner spinner = alertView.findViewById(R.id.spinner_selection);
90 final EditText titleText = alertView.findViewById(R.id.edit_title);
93 if (Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.M)
95 titleText.setTextColor(Color.BLACK);
100 titleText.setText(title);
101 IconListAdapter adapter = new IconListAdapter(activity, R.layout.icon_list, objects);
102 spinner.setAdapter(adapter);
103 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
105 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
106 Log.v(TAG, "onItemSelected : " + position + " (" + id + ")");
107 selectedPosition = position;
111 public void onNothingSelected(AdapterView<?> parent) {
112 Log.v(TAG, "onNothingSelected");
120 alertDialog.setIcon(iconResId);
121 alertDialog.setMessage(activity.getString(R.string.dialog_message_data_edit));
122 alertDialog.setCancelable(true);
125 alertDialog.setPositiveButton(activity.getString(R.string.dialog_positive_execute),
126 new DialogInterface.OnClickListener() {
127 public void onClick(DialogInterface dialog, int which)
131 Activity activity = getActivity();
132 if (activity != null)
134 String array[] = activity.getResources().getStringArray(R.array.icon_selection_id);
135 if (callback != null)
137 callback.dataEdited(Integer.parseInt(array[selectedPosition]), titleText.getText().toString());
144 if (callback != null)
146 callback.cancelled();
153 // ボタンを設定する (キャンセルボタン)
154 alertDialog.setNegativeButton(activity.getString(R.string.dialog_negative_cancel),
155 new DialogInterface.OnClickListener() {
156 public void onClick(DialogInterface dialog, int which) {
157 if (callback != null)
159 callback.cancelled();
166 myDialog = alertDialog.create();
172 public void onPause()
175 Log.v(TAG, "AlertDialog::onPause()");
176 if (myDialog != null)
186 public interface Callback
188 void dataEdited(int iconId, String title); // OKを選択したとき
189 void cancelled(); // キャンセルしたとき
192 public class IconListAdapter extends ArrayAdapter<String>
194 private final LayoutInflater inflater;
195 private final int layoutResourceId;
196 private final String[] stringList;
198 private IconListAdapter(Activity activity, int layoutResourceId, String[] strings)
200 super(activity, layoutResourceId, strings);
201 inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
202 stringList = strings;
203 this.layoutResourceId = layoutResourceId;
207 public int getCount()
209 return stringList.length;
213 public String getItem(int position)
215 return stringList[position];
219 public long getItemId(int position)
225 public @NonNull View getView(int position, View convertView, @NonNull ViewGroup parent)
227 View row = inflater.inflate(layoutResourceId, parent, false);
230 TextView target = row.findViewById(R.id.selection_icon);
231 TypedArray imgs = getActivity().getResources().obtainTypedArray(R.array.icon_selection);
232 int rscId = imgs.getResourceId(position, R.drawable.ic_label_outline_black_24dp);
233 target.setCompoundDrawablesWithIntrinsicBounds(rscId, 0, 0, 0);
244 public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent)
246 return (getView(position, convertView, parent));