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 }