package com.ghostsq.commander; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.SeekBar; import android.widget.CompoundButton.OnCheckedChangeListener; public class RGBPickerDialog extends AlertDialog implements DialogInterface.OnClickListener, OnCheckedChangeListener, SeekBar.OnSeekBarChangeListener { public interface ResultSink { void colorChanged(int color); } private final static String TAG = "RGB"; private ResultSink colorChangeSink; private int curColor, defColor; private CheckBox dccb; private View sliders; private SeekBar r_seek; private SeekBar g_seek; private SeekBar b_seek; private View preview; RGBPickerDialog( Context context, ResultSink sink, int color, int def_color ) { super(context); colorChangeSink = sink; curColor = color; defColor = def_color; Context c = getContext(); setTitle( c.getString( R.string.pick_color ) ); LayoutInflater factory = LayoutInflater.from( c ); setView( factory.inflate( R.layout.rgb, null ) ); setButton( BUTTON_POSITIVE, c.getString( R.string.dialog_ok ), this); setButton( BUTTON_NEGATIVE, c.getString( R.string.dialog_cancel ), this ); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sliders = findViewById( R.id.rgb_sliders ); r_seek = (SeekBar)findViewById( R.id.r_seek ); r_seek = (SeekBar)findViewById( R.id.r_seek ); g_seek = (SeekBar)findViewById( R.id.g_seek ); b_seek = (SeekBar)findViewById( R.id.b_seek ); if( r_seek != null ) { r_seek.setOnSeekBarChangeListener( this ); r_seek.setProgress( Color.red( curColor ) ); } if( g_seek != null ) { g_seek.setOnSeekBarChangeListener( this ); g_seek.setProgress( Color.green( curColor ) ); } if( b_seek != null ) { b_seek.setOnSeekBarChangeListener( this ); b_seek.setProgress( Color.blue( curColor ) ); } preview = findViewById(R.id.preview); if( preview != null ) preview.setBackgroundColor( curColor ); if( defColor != 0 ) { View dcv = findViewById( R.id.default_color ); if( dcv != null ) { dcv.setVisibility( View.VISIBLE ); dccb = (CheckBox)dcv; dccb.setOnCheckedChangeListener( this ); dccb.setChecked( curColor == 0 ); } } } @Override public void onCheckedChanged( CompoundButton buttonView, boolean isChecked ) { if( isChecked ) { curColor = 0; sliders.setVisibility( View.GONE ); } else { if( curColor == 0 ) { curColor = defColor; r_seek.setProgress( Color.red( curColor ) ); g_seek.setProgress( Color.green( curColor ) ); b_seek.setProgress( Color.blue( curColor ) ); } preview.setBackgroundColor( curColor ); sliders.setVisibility( View.VISIBLE ); } } // SeekBar.OnSeekBarChangeListener methods @Override public void onProgressChanged( SeekBar seekBar, int progress, boolean fromUser ) { if( !fromUser ) return; int id = seekBar.getId(); switch( id ) { case R.id.r_seek: curColor = Color.rgb( progress, Color.green( curColor ), Color.blue( curColor ) ); break; case R.id.g_seek: curColor = Color.rgb( Color.red( curColor ), progress, Color.blue( curColor ) ); break; case R.id.b_seek: curColor = Color.rgb( Color.red( curColor ), Color.green( curColor ), progress ); break; } preview.setBackgroundColor( curColor ); } @Override public void onStartTrackingTouch( SeekBar seekBar ) { // TODO Auto-generated method stub } @Override public void onStopTrackingTouch( SeekBar seekBar ) { // TODO Auto-generated method stub } @Override // DialogInterface.OnClickListener public void onClick( DialogInterface dialog, int which ) { if( which == BUTTON_POSITIVE && colorChangeSink != null ) colorChangeSink.colorChanged( curColor ); dismiss(); } }