
package com.algobase.share.dialog;
import android.os.CountDownTimer;

import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;

import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Typeface;
import android.graphics.drawable.GradientDrawable;

import android.view.Gravity;
import android.view.Display;
import android.view.WindowManager;

import android.content.Context;


public class MyToast
{
  Context context;
  LinearLayout layout;
  TextView tv;

  String msg = "";

  int txt_size = 18;
  int txt_style = Typeface.NORMAL;
  int txt_clr = 0xff000000; // black

  int bg_clr1 = 0xffffffee; // ivory
  int bg_clr2 = bg_clr1;
  int bg_res = 0;

  int corner_radius = 12;
  int border_width = 1;
  int border_clr = 0xff333333;
  int padding = 5;

  //float offset_f = 0.73f;
  float offset_f = 0.65f;

  int DipToPixels(float dp)
  { float dpi = context.getResources().getDisplayMetrics().densityDpi;
    return (int)(0.5 + dp * (dpi/160f));
   }


  Toast create()
  {
    Toast toast = new Toast(context);

    WindowManager wm = 
              (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);

    Display dsp = wm.getDefaultDisplay(); 

    Point pt = new Point();
    dsp.getSize(pt);

    int screen_width = pt.x;
    int screen_height = pt.y;

    layout = new LinearLayout(context);

    tv = new TextView(context);

    int dp = DipToPixels(1);
    int pad = padding*dp;

    tv.setPadding(2*pad,pad-dp,2*pad,pad+dp);

    tv.setTextColor(txt_clr);
    tv.setTextSize(txt_size);
    tv.setTypeface(null,txt_style);
    tv.setText(msg);

    GradientDrawable d = null;

    if (bg_res != 0)
      d = (GradientDrawable)context.getDrawable(bg_res);
    else
    { int[] clrs = new int[]{ bg_clr1, bg_clr2 };
      d = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM,clrs);
      d.setCornerRadius(DipToPixels(corner_radius));
      d.setStroke(border_width,border_clr);
     }

    tv.setBackground(d);

    layout.addView(tv);
    tv.getLayoutParams().width = LayoutParams.MATCH_PARENT;
    tv.getLayoutParams().height = LayoutParams.WRAP_CONTENT;

    toast.setView(layout);

    toast.setGravity(Gravity.TOP,0,(int)(offset_f*screen_height));

    return toast;
  }


  public MyToast(Context ctxt) {
    context = ctxt;
    msg = "";
  }


  public MyToast(Context ctxt, String txt) {
    context = ctxt;
    msg = txt;
  }



  public void setText(String txt) {
     msg = txt;
  }

  public void setTextColor(int clr) {
     txt_clr = clr;
  }

  public void setTextSize(int sz) {
     txt_size = sz;
  }

  public void setTextStyle(int style) {
     txt_style = style;
  }

  public void setPadding(int p) { 
     padding = p;
  }

  public void setBackground(int res) { 
     bg_res = res;
  }

  public void setCornerRadius(int r) { 
     corner_radius = r;
  }

  public void setBorderColor(int clr) { 
     border_clr = clr;
  }

  public void setBorderWidth(int pix) { 
     border_width = pix;
  }

  public void setBackgroundColor(int clr) { 
     bg_clr1 = clr;
     bg_clr2 = clr;
     bg_res = 0;
  }

  public void setBackgroundColors(int clr1, int clr2) { 
     bg_clr1 = clr1;
     bg_clr2 = clr2;
     bg_res = 0;
  }

  public void setOffset(float f) {
    offset_f = f;
  }

  public void show()
  { Toast toast = create();
    toast.setDuration(Toast.LENGTH_SHORT);
    toast.show();
   }

  public void show_long()
  { Toast toast = create();
    toast.setDuration(Toast.LENGTH_LONG);
    toast.show();
   }

/*
  public void show_sec(int sec)
  { show();
    new CountDownTimer(1000*(sec-2), 1000)
    { public void onTick(long millisUntilFinished) { show(); }
      public void onFinish() { show(); }
     }.start();
  }
*/

}

