/* * Copyright (C) Winson Chiu * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cw.kop.autobackground; import android.app.Dialog; import android.app.TimePickerDialog; import android.content.Context; import android.content.DialogInterface; import android.text.format.DateFormat; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.SeekBar; import android.widget.TextView; import android.widget.TimePicker; import java.util.Calendar; import afzkl.development.colorpickerview.view.ColorPickerView; import cw.kop.autobackground.settings.AppSettings; /** * Created by TheKeeperOfPie on 11/1/2014. */ public class DialogFactory { private static final String TAG = DialogFactory.class.getCanonicalName(); /** * Provides Dialog object, mainly used to allow additional themes to be added * * @param context Context to create Dialogs with * @return Dialog with correct theme */ public static Dialog getDialog(Context context) { return new Dialog(context, AppSettings.getDialogThemeResource()); } /** * Show a Dialog constructed from R.layout.action_dialog, allows resource IDs to set as button text. * Pass in -1 for text parameter to disable button. * * @param context * @param title * @param summary * @param listener * @param textOneResource * @param textTwoResource * @param textThreeResource */ public static void showActionDialog(Context context, String title, String summary, final ActionDialogListener listener, int textOneResource, int textTwoResource, int textThreeResource) { Dialog dialog = getDialog(context); listener.setDialog(dialog); View dialogView = View.inflate(context, R.layout.action_dialog, null); dialog.setContentView(dialogView); if (title.length() > 0) { TextView dialogTitle = (TextView) dialogView.findViewById(R.id.dialog_title); dialogTitle.setVisibility(View.VISIBLE); dialogTitle.setText(title); View titleUnderline = dialogView.findViewById(R.id.dialog_underline); titleUnderline.setVisibility(View.VISIBLE); } if (summary.length() > 0) { TextView dialogSummary = (TextView) dialogView.findViewById(R.id.dialog_summary); dialogSummary.setText(summary); dialogSummary.setVisibility(View.VISIBLE); } int textColorInt = context.getResources().getColor(R.color.ACCENT_OPAQUE); if (textOneResource > 0) { Button buttonOne = (Button) dialogView.findViewById(R.id.action_button_1); buttonOne.setText(context.getResources().getString(textOneResource)); buttonOne.setTextColor(textColorInt); buttonOne.setVisibility(View.VISIBLE); buttonOne.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickLeft(v); } }); } if (textTwoResource > 0) { Button buttonTwo = (Button) dialogView.findViewById(R.id.action_button_2); buttonTwo.setText(context.getResources().getString(textTwoResource)); buttonTwo.setTextColor(textColorInt); buttonTwo.setVisibility(View.VISIBLE); buttonTwo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickMiddle(v); } }); } if (textThreeResource > 0) { Button buttonThree = (Button) dialogView.findViewById(R.id.action_button_3); buttonThree.setText(context.getResources().getString(textThreeResource)); buttonThree.setTextColor(textColorInt); buttonThree.setVisibility(View.VISIBLE); buttonThree.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickRight(v); } }); } dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { listener.onDismiss(); } }); dialog.show(); } public static void showListDialog(Context context, String title, final ListDialogListener clickListener, int listArrayResource) { Dialog dialog = getDialog(context); clickListener.setDialog(dialog); View dialogView = View.inflate(context, R.layout.list_dialog, null); dialog.setContentView(dialogView); if (title.length() > 0) { TextView dialogTitle = (TextView) dialogView.findViewById(R.id.dialog_title); dialogTitle.setVisibility(View.VISIBLE); dialogTitle.setText(title); View dialogUnderline = dialogView.findViewById(R.id.dialog_underline); dialogUnderline.setVisibility(View.VISIBLE); } ListView dialogList = (ListView) dialogView.findViewById(R.id.dialog_list); dialogList.setAdapter(new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, android.R.id.text1, context.getResources().getStringArray( listArrayResource))); dialogList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { clickListener.onItemClick(parent, view, position, id); } }); dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { clickListener.onDismiss(); } }); dialog.show(); } public static void showInputDialog(Context context, String title, String hint, String defaultText, final InputDialogListener listener, int textOneResource, int textTwoResource, int textThreeResource, int inputType) { Dialog dialog = getDialog(context); listener.setDialog(dialog); View dialogView = View.inflate(context, R.layout.input_dialog, null); dialog.setContentView(dialogView); if (title.length() > 0) { TextView dialogTitle = (TextView) dialogView.findViewById(R.id.dialog_title); dialogTitle.setVisibility(View.VISIBLE); dialogTitle.setText(title); View titleUnderline = dialogView.findViewById(R.id.dialog_underline); titleUnderline.setVisibility(View.VISIBLE); } EditText inputField = (EditText) dialogView.findViewById(R.id.input_field); inputField.setInputType(inputType); if (hint.length() > 0) { inputField.setHint(hint); } if (defaultText.length() > 0) { inputField.setText(defaultText); } listener.setEditText(inputField); int textColorInt = context.getResources().getColor(R.color.ACCENT_OPAQUE); if (textOneResource > 0) { Button buttonOne = (Button) dialogView.findViewById(R.id.action_button_1); buttonOne.setText(context.getResources().getString(textOneResource)); buttonOne.setTextColor(textColorInt); buttonOne.setVisibility(View.VISIBLE); buttonOne.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickLeft(v); } }); } if (textTwoResource > 0) { Button buttonTwo = (Button) dialogView.findViewById(R.id.action_button_2); buttonTwo.setText(context.getResources().getString(textTwoResource)); buttonTwo.setTextColor(textColorInt); buttonTwo.setVisibility(View.VISIBLE); buttonTwo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickMiddle(v); } }); } if (textThreeResource > 0) { Button buttonThree = (Button) dialogView.findViewById(R.id.action_button_3); buttonThree.setText(context.getResources().getString(textThreeResource)); buttonThree.setTextColor(textColorInt); buttonThree.setVisibility(View.VISIBLE); buttonThree.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickRight(v); } }); } dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { listener.onDismiss(); } }); dialog.show(); } public static void showSeekBarDialog(Context context, String title, String suffix, final SeekBarDialogListener listener, int max, int defaultValue, int textOneResource, int textTwoResource, int textThreeResource) { Dialog dialog = getDialog(context); listener.setDialog(dialog); View dialogView = View.inflate(context, R.layout.seek_bar_dialog, null); dialog.setContentView(dialogView); if (title.length() > 0) { TextView dialogTitle = (TextView) dialogView.findViewById(R.id.dialog_title); dialogTitle.setVisibility(View.VISIBLE); dialogTitle.setText(title); View titleUnderline = dialogView.findViewById(R.id.dialog_underline); titleUnderline.setVisibility(View.VISIBLE); } if (suffix.length() > 0) { TextView suffixText = (TextView) dialogView.findViewById(R.id.dialog_suffix_text); suffixText.setVisibility(View.VISIBLE); suffixText.setText(suffix); } TextView valueText = (TextView) dialogView.findViewById(R.id.value_text); listener.setValueTextView(valueText); SeekBar dialogSeekBar = (SeekBar) dialogView.findViewById(R.id.dialog_seek_bar); dialogSeekBar.setMax(max); dialogSeekBar.setProgress(defaultValue); dialogSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { listener.onValueChanged(seekBar, progress, fromUser); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); listener.setSeekBar(dialogSeekBar); listener.onValueChanged(dialogSeekBar, defaultValue, false); int textColorInt = context.getResources().getColor(R.color.ACCENT_OPAQUE); if (textOneResource > 0) { Button buttonOne = (Button) dialogView.findViewById(R.id.action_button_1); buttonOne.setText(context.getResources().getString(textOneResource)); buttonOne.setTextColor(textColorInt); buttonOne.setVisibility(View.VISIBLE); buttonOne.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickLeft(v); } }); } if (textTwoResource > 0) { Button buttonTwo = (Button) dialogView.findViewById(R.id.action_button_2); buttonTwo.setText(context.getResources().getString(textTwoResource)); buttonTwo.setTextColor(textColorInt); buttonTwo.setVisibility(View.VISIBLE); buttonTwo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickMiddle(v); } }); } if (textThreeResource > 0) { Button buttonThree = (Button) dialogView.findViewById(R.id.action_button_3); buttonThree.setText(context.getResources().getString(textThreeResource)); buttonThree.setTextColor(textColorInt); buttonThree.setVisibility(View.VISIBLE); buttonThree.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickRight(v); } }); } dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { listener.onDismiss(); } }); dialog.show(); } public static void showTimeDialog(Context context, String title, final TimeDialogListener listener, int defaultHour, int defaultMinute) { Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); TimePickerDialog dialog = new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { listener.onTimeSet(view, hourOfDay, minute); } }, defaultHour >= 0 ? defaultHour : hour, defaultMinute >= 0 ? defaultMinute : minute, DateFormat.is24HourFormat(context)); listener.setDialog(dialog); if (title.length() > 0) { dialog.setTitle(title); } dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { listener.onDismiss(); } }); dialog.show(); } public static void showColorPickerDialog(Context context, String title, final ColorDialogListener listener, int textOneResource, int textTwoResource, int textThreeResource, int defaultColor) { Log.d(TAG, "Loading ColorPicker Dialog"); Dialog dialog = getDialog(context); listener.setDialog(dialog); View dialogView = View.inflate(context, R.layout.color_picker_dialog, null); dialog.setContentView(dialogView); if (title.length() > 0) { TextView dialogTitle = (TextView) dialogView.findViewById(R.id.dialog_title); dialogTitle.setVisibility(View.VISIBLE); dialogTitle.setText(title); View titleUnderline = dialogView.findViewById(R.id.dialog_underline); titleUnderline.setVisibility(View.VISIBLE); } final ColorPickerView colorPickerView = (ColorPickerView) dialogView.findViewById(R.id.dialog_color_picker); colorPickerView.setAlphaSliderVisible(true); colorPickerView.setColor(defaultColor); listener.setColorPickerView(colorPickerView); int textColorInt = context.getResources().getColor(R.color.ACCENT_OPAQUE); if (textOneResource > 0) { Button buttonOne = (Button) dialogView.findViewById(R.id.action_button_1); buttonOne.setText(context.getResources().getString(textOneResource)); buttonOne.setTextColor(textColorInt); buttonOne.setVisibility(View.VISIBLE); buttonOne.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickLeft(v); } }); } if (textTwoResource > 0) { Button buttonTwo = (Button) dialogView.findViewById(R.id.action_button_2); buttonTwo.setText(context.getResources().getString(textTwoResource)); buttonTwo.setTextColor(textColorInt); buttonTwo.setVisibility(View.VISIBLE); buttonTwo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickMiddle(v); } }); } if (textThreeResource > 0) { Button buttonThree = (Button) dialogView.findViewById(R.id.action_button_3); buttonThree.setText(context.getResources().getString(textThreeResource)); buttonThree.setTextColor(textColorInt); buttonThree.setVisibility(View.VISIBLE); buttonThree.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClickRight(v); } }); } dialog.show(); } public abstract static class DialogClickListener { private Dialog dialog; public void setDialog(Dialog dialog) { this.dialog = dialog; } public void dismissDialog() { dialog.dismiss(); } public void onDismiss() { this.dismissDialog(); } } public abstract static class ActionDialogListener extends DialogClickListener { public void onClickLeft(View v) { this.dismissDialog(); } public void onClickMiddle(View v) { this.dismissDialog(); } public void onClickRight(View v) { this.dismissDialog(); } } public abstract static class ListDialogListener extends DialogClickListener { private boolean itemSelected = false; public void onItemClick(AdapterView<?> parent, View view, int position, long id) { this.dismissDialog(); } public void onDismiss() { this.dismissDialog(); } public boolean getItemSelected() { return itemSelected; } public void setItemSelected(boolean selected) { itemSelected = selected; } } public abstract static class InputDialogListener extends ActionDialogListener { private EditText editText; public void setEditText(EditText editText) { this.editText = editText; } public String getEditTextString() { return editText.getText().toString(); } } public abstract static class SeekBarDialogListener extends ActionDialogListener { private TextView valueText; private SeekBar seekBar; public void setValueTextView(TextView valueText) { this.valueText = valueText; } public String getValueText() { return valueText.getText().toString(); } public void setValueText(String text) { valueText.setText(text); } public void setSeekBar(SeekBar seekBar) { this.seekBar = seekBar; } public int getValue() { return seekBar.getProgress(); } public abstract void onValueChanged(SeekBar seekBar, int progress, boolean fromUser); } public abstract static class TimeDialogListener extends ActionDialogListener { public abstract void onTimeSet(TimePicker view, int hour, int minute); } public abstract static class ColorDialogListener extends ActionDialogListener { private ColorPickerView colorPickerView; public ColorPickerView getColorPickerView() { return colorPickerView; } public void setColorPickerView(ColorPickerView colorPickerView) { this.colorPickerView = colorPickerView; } } }