1 package skyseraph.android.util;
2
3 import skyseraph.easytagwrite.R;
4 import android.app.Dialog;
5 import android.content.Context;
6 import android.content.DialogInterface;
7 import android.graphics.drawable.Drawable;
8 import android.view.LayoutInflater;
9 import android.view.View;
10 import android.view.ViewGroup.LayoutParams;
11 import android.widget.Button;
12 import android.widget.ImageView;
13 import android.widget.LinearLayout;
14 import android.widget.TextView;
15
16 public class CustomDialog extends Dialog {
17 public CustomDialog(Context context, int theme) {
18 super(context, theme);
19 }
20
21 public CustomDialog(Context context) {
22 super(context);
23 }
24
25 /**
26 * Helper class for creating a custom dialog
27 */
28 public static class Builder {
29
30 private Context context;
31
32 private String title;
33
34 private String message;
35
36 private String positiveButtonText;
37
38 private String negativeButtonText;
39
40 private View contentView;
41
42 private Drawable drawable;
43
44 private DialogInterface.OnClickListener positiveButtonClickListener,
45 negativeButtonClickListener;
46
47 public Builder(Context context) {
48 this.context = context;
49 }
50
51 /**
52 * Set the Dialog message from String
53 *
54 * @param title
55 * @return
56 */
57 public Builder setMessage(String message) {
58 this.message = message;
59 return this;
60 }
61
62 /**
63 * Set the Dialog message from resource
64 *
65 * @param title
66 * @return
67 */
68 public Builder setMessage(int message) {
69 this.message = (String)context.getText(message);
70 return this;
71 }
72
73 /**
74 * Set the Dialog title from resource
75 *
76 * @param title
77 * @return
78 */
79 public Builder setTitle(int title) {
80 this.title = (String)context.getText(title);
81 return this;
82 }
83
84 /**
85 * Set the Dialog title from String
86 *
87 * @param title
88 * @return
89 */
90 public Builder setTitle(String title) {
91 this.title = title;
92 return this;
93 }
94
95 /***
96 * Set the Dialog Icon from resource
97 *
98 * @param imageres
99 * @return
100 */
101 public Builder setIcon(int imageres) {
102
103 this.drawable = context.getResources().getDrawable(imageres);
104
105 return this;
106 }
107
108 /***
109 * Set the Dialog Icon from Drawable
110 *
111 * @param drawable
112 * @return
113 */
114 public Builder setIcon(Drawable drawable) {
115 this.drawable = drawable;
116 return this;
117 }
118
119 /**
120 * Set a custom content view for the Dialog. If a message is set, the
121 * contentView is not added to the Dialog...
122 *
123 * @param v
124 * @return
125 */
126 public Builder setContentView(View v) {
127 this.contentView = v;
128 return this;
129 }
130
131 /**
132 * Set the positive button resource and it's listener
133 *
134 * @param positiveButtonText
135 * @param listener
136 * @return
137 */
138 public Builder setPositiveButton(int positiveButtonText,
139 DialogInterface.OnClickListener listener) {
140 this.positiveButtonText = (String)context.getText(positiveButtonText);
141 this.positiveButtonClickListener = listener;
142 return this;
143 }
144
145 /**
146 * Set the positive button text and it's listener
147 *
148 * @param positiveButtonText
149 * @param listener
150 * @return
151 */
152 public Builder setPositiveButton(String positiveButtonText,
153 DialogInterface.OnClickListener listener) {
154 this.positiveButtonText = positiveButtonText;
155 this.positiveButtonClickListener = listener;
156 return this;
157 }
158
159 /**
160 * Set the negative button resource and it's listener
161 *
162 * @param negativeButtonText
163 * @param listener
164 * @return
165 */
166 public Builder setNegativeButton(int negativeButtonText,
167 DialogInterface.OnClickListener listener) {
168 this.negativeButtonText = (String)context.getText(negativeButtonText);
169 this.negativeButtonClickListener = listener;
170 return this;
171 }
172
173 /**
174 * Set the negative button text and it's listener
175 *
176 * @param negativeButtonText
177 * @param listener
178 * @return
179 */
180 public Builder setNegativeButton(String negativeButtonText,
181 DialogInterface.OnClickListener listener) {
182 this.negativeButtonText = negativeButtonText;
183 this.negativeButtonClickListener = listener;
184 return this;
185 }
186
187 /**
188 * Create the custom dialog
189 */
190 public CustomDialog create() {
191 LayoutInflater inflater = (LayoutInflater)context
192 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
193 // instantiate the dialog with the custom Theme
194 final CustomDialog dialog = new CustomDialog(context, R.style.Dialog);
195 View layout = inflater.inflate(R.layout.dialog, null);
196 dialog.addContentView(layout, new LayoutParams(LayoutParams.MATCH_PARENT,
197 LayoutParams.WRAP_CONTENT));
198 // set the dialog title
199 ((TextView)layout.findViewById(R.id.title)).setText(title);
200 if (drawable != null) {
201 ((ImageView)layout.findViewById(R.id.imageView1)).setImageDrawable(drawable);
202 } else {
203 ((ImageView)layout.findViewById(R.id.imageView1)).setVisibility(View.GONE);
204 }
205 // set the confirm button
206 if (positiveButtonText != null) {
207 ((Button)layout.findViewById(R.id.positiveButton)).setText(positiveButtonText);
208 if (positiveButtonClickListener != null) {
209 ((Button)layout.findViewById(R.id.positiveButton))
210 .setOnClickListener(new View.OnClickListener() {
211 public void onClick(View v) {
212 positiveButtonClickListener.onClick(dialog,
213 DialogInterface.BUTTON_POSITIVE);
214 }
215 });
216 }
217 } else {
218 // if no confirm button just set the visibility to GONE
219 layout.findViewById(R.id.positiveButton).setVisibility(View.GONE);
220 }
221 // set the cancel button
222 if (negativeButtonText != null) {
223 ((Button)layout.findViewById(R.id.negativeButton)).setText(negativeButtonText);
224 if (negativeButtonClickListener != null) {
225 ((Button)layout.findViewById(R.id.negativeButton))
226 .setOnClickListener(new View.OnClickListener() {
227 public void onClick(View v) {
228 negativeButtonClickListener.onClick(dialog,
229 DialogInterface.BUTTON_NEGATIVE);
230 }
231 });
232 }
233 } else {
234 // if no confirm button just set the visibility to GONE
235 layout.findViewById(R.id.negativeButton).setVisibility(View.GONE);
236 }
237 // set the content message
238 if (message != null) {
239 ((TextView)layout.findViewById(R.id.message)).setText(message);
240 } else if (contentView != null) {
241 // if no message set
242 // add the contentView to the dialog body
243 ((LinearLayout)layout.findViewById(R.id.content)).removeAllViews();
244 ((LinearLayout)layout.findViewById(R.id.content)).addView(contentView,
245 new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
246 }
247 dialog.setContentView(layout);
248
249 return dialog;
250 }
251
252 }
253
254 }