SeekbarFactory.java :  » Weather » hkowidget » com » tako » hko » Android Open Source

Android Open Source » Weather » hkowidget 
hkowidget » com » tako » hko » SeekbarFactory.java
package com.tako.hko;

import com.tako.hko.R;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class SeekbarFactory {
  public static final int FONT_OPTION = 74;
  public static final int BACK_OPTION = 87;
  private static final String PREFS_NAME = "HKOPrefs";
  private static final String TAG = "SeekbarFactory";
  private static boolean greyScale = false;

  public static View getInstance(Context context, int layoutId, Activity activity, int language, int option) {
    SeekbarFactory sb = new SeekbarFactory();
    return sb.makeSeekbar(context, layoutId, activity, language, option);
  }
  
  protected SeekbarFactory() {}
  
  protected View makeSeekbar(Context context, int layoutId, Activity activity, int language, int option) {
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    View layout = inflater.inflate(layoutId, (ViewGroup) activity.findViewById(R.id.layout_root));

    SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0);
    int color = -1, redValue = -1, greenValue = -1, blueValue = -1, alphaValue = -1;
    boolean greyValue = false;
    if (option == SeekbarFactory.FONT_OPTION) {
      color = settings.getInt("fontColor", 0xffd3d3d9);
      redValue = settings.getInt("fontRed", 211);
      greenValue = settings.getInt("fontGreen", 211);
      blueValue = settings.getInt("fontBlue", 211);
      alphaValue = settings.getInt("fontAlpha", 255);
      greyValue = settings.getBoolean("fontGreyScale", false);
    } else {
      color = settings.getInt("backColor", 0xffd3d3d9);
      redValue = settings.getInt("backRed", 211);
      greenValue = settings.getInt("backGreen", 211);
      blueValue = settings.getInt("backBlue", 211);
      alphaValue = settings.getInt("backAlpha", 255);
      greyValue = settings.getBoolean("backGreyScale", false);
    }
    
    String redLabel = null, greenLabel = null, blueLabel = null, alphaLabel = null, greyLabel = null;
    if (language == Misc.CHINESE) {
      redLabel = context.getString(R.string.red_chi);
      greenLabel = context.getString(R.string.green_chi);
      blueLabel = context.getString(R.string.blue_chi);
      alphaLabel = context.getString(R.string.alpha_chi);
      if (option == SeekbarFactory.BACK_OPTION)
        greyLabel = context.getString(R.string.shadow_chi);
      else
        greyLabel = context.getString(R.string.grey_chi);
    } else {
      redLabel = context.getString(R.string.red_eng);
      greenLabel = context.getString(R.string.green_eng);
      blueLabel = context.getString(R.string.blue_eng);
      alphaLabel = context.getString(R.string.alpha_eng);
      if (option == SeekbarFactory.BACK_OPTION)
        greyLabel = context.getString(R.string.shadow_eng);
      else
        greyLabel = context.getString(R.string.grey_eng);
    }
    
    OnSeekBarChangeListener fontSeekBarListener = new OnSeekBarChangeListener() {
      @Override
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
        showFontColor(seekBar);
      }
      @Override
      public void onStartTrackingTouch(SeekBar seekBar) {
        showFontColor(seekBar);
      }
      @Override
      public void onStopTrackingTouch(SeekBar seekBar) {
        showFontColor(seekBar);
      }
    };
    
    OnSeekBarChangeListener backSeekBarListener = new OnSeekBarChangeListener() {
      @Override
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
        showBackColor(seekBar);
      }
      @Override
      public void onStartTrackingTouch(SeekBar seekBar) {
        showBackColor(seekBar);
      }
      @Override
      public void onStopTrackingTouch(SeekBar seekBar) {
        showBackColor(seekBar);
      }
    };
    
    TextView redText = (TextView) layout.findViewById(R.id.redLabel);
    redText.setText(redLabel);
    TextView greenText = (TextView) layout.findViewById(R.id.greenLabel);
    greenText.setText(greenLabel);
    TextView blueText = (TextView) layout.findViewById(R.id.blueLabel);
    blueText.setText(blueLabel);
    TextView alphaText = (TextView) layout.findViewById(R.id.alphaLabel);
    alphaText.setText(alphaLabel);
    TextView sample = (TextView) layout.findViewById(R.id.sample);
    ImageView sampleBack = (ImageView) layout.findViewById(R.id.sample_back);
    if (option == SeekbarFactory.FONT_OPTION)
      sampleBack.setVisibility(View.GONE);
    else
      sample.setVisibility(View.GONE);
    
    SeekBar red = (SeekBar) layout.findViewById(R.id.red);
    red.setMax(255);
    red.setProgress(redValue);

    SeekBar green = (SeekBar) layout.findViewById(R.id.green);
    green.setMax(255);
    green.setProgress(greenValue);
    SeekBar blue = (SeekBar) layout.findViewById(R.id.blue);
    blue.setMax(255);
    blue.setProgress(blueValue);
    SeekBar alpha = (SeekBar) layout.findViewById(R.id.alpha);
    alpha.setMax(255);
    alpha.setProgress(alphaValue);

    if (option == SeekbarFactory.FONT_OPTION) {
      red.setOnSeekBarChangeListener(fontSeekBarListener);
      green.setOnSeekBarChangeListener(fontSeekBarListener);
      blue.setOnSeekBarChangeListener(fontSeekBarListener);
      alpha.setOnSeekBarChangeListener(fontSeekBarListener);
    } else {
      red.setOnSeekBarChangeListener(backSeekBarListener);
      green.setOnSeekBarChangeListener(backSeekBarListener);
      blue.setOnSeekBarChangeListener(backSeekBarListener);
      alpha.setOnSeekBarChangeListener(backSeekBarListener);
    }
    
    CheckBox grey = (CheckBox) layout.findViewById(R.id.grey);
    grey.setChecked(greyValue);
    grey.setText(greyLabel);
    grey.setOnCheckedChangeListener(new OnCheckedChangeListener() {
      public void onCheckedChanged(CompoundButton button, boolean isChecked) {
        Log.e(TAG, "Clicked : " + greyScale);
        greyScale = isChecked;          
      }
    });
    

    if (option == SeekbarFactory.BACK_OPTION) {
      ColorMatrix cm = new ColorMatrix(new float[] {  
          redValue / 255f , 0f, 0f, 0f, 0f,  
          0f, greenValue / 255f, 0f, 0f, 0f,  
          0f, 0f, blueValue / 255f, 0f, 0f,  
          0f, 0f, 0f, alphaValue / 255f, 0f});
      
      sampleBack.setColorFilter(new ColorMatrixColorFilter(cm));
    } else
      sample.setTextColor(color);
    
    return layout;
  }
  
  private void showFontColor(SeekBar seekBar) {
    LinearLayout layout = (LinearLayout) seekBar.getParent();
    SeekBar blue = (SeekBar) layout.findViewById(R.id.blue);
    SeekBar green = (SeekBar) layout.findViewById(R.id.green);
    SeekBar red = (SeekBar) layout.findViewById(R.id.red);
    SeekBar alpha = (SeekBar) layout.findViewById(R.id.alpha);
    TextView sample = (TextView) layout.findViewById(R.id.sample);
    
    //Log.e(TAG, "GreyScale : " + greyScale);
    if (greyScale && seekBar.getId() != R.id.alpha) {
      int greyValue = seekBar.getProgress();
      blue.setProgress(greyValue);
      red.setProgress(greyValue);
      green.setProgress(greyValue);
    }
    int color = alpha.getProgress() << 24 | red.getProgress() << 16 | green.getProgress() << 8 | blue.getProgress();
    sample.setTextColor(color);
    
  }
  
  private void showBackColor(SeekBar seekBar) {
    LinearLayout layout = (LinearLayout) seekBar.getParent();
    SeekBar blue = (SeekBar) layout.findViewById(R.id.blue);
    SeekBar green = (SeekBar) layout.findViewById(R.id.green);
    SeekBar red = (SeekBar) layout.findViewById(R.id.red);
    SeekBar alpha = (SeekBar) layout.findViewById(R.id.alpha);
    ImageView sample = (ImageView) layout.findViewById(R.id.sample_back);
    
    //Log.e(TAG, "GreyScale : " + greyScale);
//    if (greyScale && seekBar.getId() != R.id.alpha) {
//      int greyValue = seekBar.getProgress();
//      blue.setProgress(greyValue);
//      red.setProgress(greyValue);
//      green.setProgress(greyValue);
//    }
    //int color = alpha.getProgress() << 24 | red.getProgress() << 16 | green.getProgress() << 8 | blue.getProgress();
    float a = alpha.getProgress() / 255f;
    float r = red.getProgress() / 255f;
    float g = green.getProgress() / 255f;
    float b = blue.getProgress() / 255f;
  //  BitmapDrawable
    ColorMatrix cm = new ColorMatrix(new float[] {  
        r , 0f, 0f, 0f, 0f,  
        0f, g , 0f, 0f, 0f,  
        0f, 0f, b , 0f, 0f,  
        0f, 0f, 0f, a , 0f});
    
    sample.setColorFilter(new ColorMatrixColorFilter(cm));
    //sample.setTextColor(color);
    
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.