@Override protected Dialog onCreateDialog(int ignore, Bundle args) { // TODO set values from "flags" to messagebox dialog // get colors int[] colors = args.getIntArray("colors"); int backgroundColor; int textColor; int buttonBorderColor; int buttonBackgroundColor; int buttonSelectedColor; if (colors != null) { int i = -1; backgroundColor = colors[++i]; textColor = colors[++i]; buttonBorderColor = colors[++i]; buttonBackgroundColor = colors[++i]; buttonSelectedColor = colors[++i]; } else { backgroundColor = Color.TRANSPARENT; textColor = Color.TRANSPARENT; buttonBorderColor = Color.TRANSPARENT; buttonBackgroundColor = Color.TRANSPARENT; buttonSelectedColor = Color.TRANSPARENT; } // create dialog with title and a listener to wake up calling thread final Dialog dialog = new Dialog(this); dialog.setTitle(args.getString("title")); dialog.setCancelable(false); dialog.setOnDismissListener( new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface unused) { synchronized (messageboxSelection) { messageboxSelection.notify(); } } }); // create text TextView message = new TextView(this); message.setGravity(Gravity.CENTER); message.setText(args.getString("message")); if (textColor != Color.TRANSPARENT) { message.setTextColor(textColor); } // create buttons int[] buttonFlags = args.getIntArray("buttonFlags"); int[] buttonIds = args.getIntArray("buttonIds"); String[] buttonTexts = args.getStringArray("buttonTexts"); final SparseArray<Button> mapping = new SparseArray<Button>(); LinearLayout buttons = new LinearLayout(this); buttons.setOrientation(LinearLayout.HORIZONTAL); buttons.setGravity(Gravity.CENTER); for (int i = 0; i < buttonTexts.length; ++i) { Button button = new Button(this); final int id = buttonIds[i]; button.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { messageboxSelection[0] = id; dialog.dismiss(); } }); if (buttonFlags[i] != 0) { // see SDL_messagebox.h if ((buttonFlags[i] & 0x00000001) != 0) { mapping.put(KeyEvent.KEYCODE_ENTER, button); } if ((buttonFlags[i] & 0x00000002) != 0) { mapping.put(111, button); /* API 11: KeyEvent.KEYCODE_ESCAPE */ } } button.setText(buttonTexts[i]); if (textColor != Color.TRANSPARENT) { button.setTextColor(textColor); } if (buttonBorderColor != Color.TRANSPARENT) { // TODO set color for border of messagebox button } if (buttonBackgroundColor != Color.TRANSPARENT) { Drawable drawable = button.getBackground(); if (drawable == null) { // setting the color this way removes the style button.setBackgroundColor(buttonBackgroundColor); } else { // setting the color this way keeps the style (gradient, padding, etc.) drawable.setColorFilter(buttonBackgroundColor, PorterDuff.Mode.MULTIPLY); } } if (buttonSelectedColor != Color.TRANSPARENT) { // TODO set color for selected messagebox button } buttons.addView(button); } // create content LinearLayout content = new LinearLayout(this); content.setOrientation(LinearLayout.VERTICAL); content.addView(message); content.addView(buttons); if (backgroundColor != Color.TRANSPARENT) { content.setBackgroundColor(backgroundColor); } // add content to dialog and return dialog.setContentView(content); dialog.setOnKeyListener( new Dialog.OnKeyListener() { @Override public boolean onKey(DialogInterface d, int keyCode, KeyEvent event) { Button button = mapping.get(keyCode); if (button != null) { if (event.getAction() == KeyEvent.ACTION_UP) { button.performClick(); } return true; // also for ignored actions } return false; } }); return dialog; }
@Override public void onClick(View view) { if (view.getId() == R.id.draw_btn) { if (!drawView.getErase()) { final Dialog brushDialog = new Dialog(this); brushDialog.setTitle("Brush size:"); brushDialog.setContentView(R.layout.brush_chooser); ImageButton smallBtn = (ImageButton) brushDialog.findViewById(R.id.small_brush); smallBtn.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { drawView.setBrushSize(smallBrush); drawView.setLastBrushSize(smallBrush); brushDialog.dismiss(); } }); ImageButton mediumBtn = (ImageButton) brushDialog.findViewById(R.id.medium_brush); mediumBtn.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { drawView.setBrushSize(mediumBrush); drawView.setLastBrushSize(mediumBrush); brushDialog.dismiss(); } }); ImageButton largeBtn = (ImageButton) brushDialog.findViewById(R.id.large_brush); largeBtn.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { drawView.setBrushSize(largeBrush); drawView.setLastBrushSize(largeBrush); brushDialog.dismiss(); } }); brushDialog.show(); } drawView.setErase(false); } else if (view.getId() == R.id.erase_btn) { if (drawView.getErase()) { final Dialog brushDialog = new Dialog(this); brushDialog.setTitle("Eraser size:"); brushDialog.setContentView(R.layout.brush_chooser); ImageButton smallBtn = (ImageButton) brushDialog.findViewById(R.id.small_brush); smallBtn.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { drawView.setBrushSize(smallBrush); brushDialog.dismiss(); } }); ImageButton mediumBtn = (ImageButton) brushDialog.findViewById(R.id.medium_brush); mediumBtn.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { drawView.setBrushSize(mediumBrush); brushDialog.dismiss(); } }); ImageButton largeBtn = (ImageButton) brushDialog.findViewById(R.id.large_brush); largeBtn.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { drawView.setBrushSize(largeBrush); brushDialog.dismiss(); } }); brushDialog.show(); } drawView.setErase(true); } else if (view.getId() == R.id.new_btn) { AlertDialog.Builder newDialog = new AlertDialog.Builder(this); newDialog.setTitle("New equation"); newDialog.setMessage("Start new equation?"); newDialog.setPositiveButton( "Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { drawView.startNew(); dialog.dismiss(); } }); newDialog.setNegativeButton( "Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); newDialog.show(); } else if (view.getId() == R.id.equals_btn) { // save drawing } }