package com.reactnativenavigation.views;
import android.support.design.widget.Snackbar;
import android.text.Html;
import android.text.Spanned;
import android.view.View;
import com.reactnativenavigation.NavigationApplication;
import com.reactnativenavigation.params.SnackbarParams;
class Snakbar {
private final OnDismissListener parent;
private final String navigatorEventId;
private final SnackbarParams params;
private Snackbar snackbar;
interface OnDismissListener {
void onDismiss(Snakbar snakbar);
}
public void show() {
snackbar.show();
}
void dismiss() {
snackbar.dismiss();
}
public View getView() {
return snackbar.getView();
}
Snakbar(OnDismissListener parent, String navigatorEventId, SnackbarParams params) {
this.parent = parent;
this.navigatorEventId = navigatorEventId;
this.params = params;
create();
}
private void create() {
snackbar = Snackbar.make((View) parent, getStyledText(), params.duration);
setAction(navigatorEventId, params, snackbar);
setStyle(snackbar, params);
setOnDismissListener();
}
private Spanned getStyledText() {
String styledText = "<font color=\"" +
params.textColor.getHexColor() +
"\">" +
params.text +
"</font>";
return Html.fromHtml(styledText);
}
private void setAction(final String navigatorEventId, final SnackbarParams params, Snackbar snackbar) {
if (params.eventId != null) {
snackbar.setAction(params.buttonText, new View.OnClickListener() {
@Override
public void onClick(View v) {
NavigationApplication.instance.getEventEmitter().sendEvent(params.eventId);
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent(params.eventId, navigatorEventId);
}
});
}
}
private void setStyle(Snackbar snackbar, SnackbarParams params) {
if (params.buttonColor.hasColor()) {
snackbar.setActionTextColor(params.buttonColor.getColor());
}
if (params.backgroundColor.hasColor()) {
snackbar.getView().setBackgroundColor(params.backgroundColor.getColor());
}
}
private void setOnDismissListener() {
snackbar.getView().addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
}
@Override
public void onViewDetachedFromWindow(View v) {
parent.onDismiss(Snakbar.this);
}
});
}
}