package com.marshalchen.common.uimodule.materialdesign.widgets;
import com.marshalchen.common.uimodule.R;
import com.marshalchen.common.uimodule.materialdesign.views.ButtonFlat;
import android.app.Activity;
import android.app.Dialog;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.TextView;
public class SnackBar extends Dialog{
String text;
String buttonText;
View.OnClickListener onClickListener;
Activity activity;
View view;
ButtonFlat button;
int backgroundSnackBar = Color.parseColor("#333");
int backgroundButton = Color.parseColor("#1E88E5");
OnHideListener onHideListener;
// Timer
private boolean mIndeterminate = false;
private int mTimer = 4 * 1000;
// With action button
public SnackBar(Activity activity, String text, String buttonText, View.OnClickListener onClickListener) {
super(activity, android.R.style.Theme_Translucent);
this.activity = activity;
this.text = text;
this.buttonText = buttonText;
this.onClickListener = onClickListener;
}
// Only text
public SnackBar(Activity activity, String text) {
super(activity, android.R.style.Theme_Translucent);
this.activity = activity;
this.text = text;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.material_design_snackbar);
setCanceledOnTouchOutside(false);
((TextView)findViewById(R.id.text)).setText(text);
button = (ButtonFlat) findViewById(R.id.buttonflat);
if(text == null || onClickListener == null){
button.setVisibility(View.GONE);
}else{
button.setText(buttonText);
button.setBackgroundColor(backgroundButton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
onClickListener.onClick(v);
}
});
}
view = findViewById(R.id.snackbar);
view.setBackgroundColor(backgroundSnackBar);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return activity.dispatchTouchEvent(event);
}
@Override
public void onBackPressed() {
}
@Override
public void show() {
super.show();
view.setVisibility(View.VISIBLE);
view.startAnimation(AnimationUtils.loadAnimation(activity, R.anim.material_design_snackbar_show_animation));
if (!mIndeterminate) {
dismissTimer.start();
}
}
// Dismiss timer
Thread dismissTimer = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(mTimer);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendMessage(new Message());
}
});
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if(onHideListener != null)
onHideListener.onHide();
dismiss();
return false;
}
});
@Override
public void dismiss() {
Animation anim = AnimationUtils.loadAnimation(activity, R.anim.material_design_snackbar_hide_animation);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
SnackBar.super.dismiss();
}
});
view.startAnimation(anim);
}
public void setIndeterminate(boolean indeterminate) {
mIndeterminate = indeterminate;
}
public boolean isIndeterminate() {
return mIndeterminate;
}
public void setDismissTimer(int time) {
mTimer = time;
}
public int getDismissTimer() {
return mTimer;
}
/**
* Change background color of SnackBar
* @param color
*/
public void setBackgroundSnackBar(int color){
backgroundSnackBar = color;
if(view != null)
view.setBackgroundColor(color);
}
/**
* Chage color of FlatButton in Snackbar
* @param color
*/
public void setColorButton(int color){
backgroundButton = color;
if(button != null)
button.setBackgroundColor(color);
}
/**
* This event start when snackbar dismish without push the button
* @author Navas
*
*/
public interface OnHideListener{
public void onHide();
}
public void setOnhideListener(OnHideListener onHideListener){
this.onHideListener = onHideListener;
}
}