blob: 6294f93cd60e8bcaa0132b73a4e70bf6b1441ce9 [file] [log] [blame]
/*
* Copyright 2018 Google LLC All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.skar.examples.helloskar.helpers;
import android.app.Activity;
import android.support.design.widget.BaseTransientBottomBar;
import android.support.design.widget.Snackbar;
import android.view.View;
/**
* Helper to manage the sample snackbar. Hides the Android boilerplate code, and exposes simpler
* methods.
*/
public final class SnackbarHelper {
private static final int BACKGROUND_COLOR = 0xbf323232;
private Snackbar messageSnackbar;
private enum DismissBehavior {HIDE, SHOW, FINISH}
;
public boolean isShowing() {
return messageSnackbar != null;
}
/**
* Shows a snackbar with a given message.
*/
public void showMessage(Activity activity, String message) {
show(activity, message, DismissBehavior.HIDE);
}
/**
* Shows a snackbar with a given message, and a dismiss button.
*/
public void showMessageWithDismiss(Activity activity, String message) {
show(activity, message, DismissBehavior.SHOW);
}
/**
* Shows a snackbar with a given error message. When dismissed, will finish the activity. Useful
* for notifying errors, where no further interaction with the activity is possible.
*/
public void showError(Activity activity, String errorMessage) {
show(activity, errorMessage, DismissBehavior.FINISH);
}
/**
* Hides the currently showing snackbar, if there is one. Safe to call from any thread. Safe to
* call even if snackbar is not shown.
*/
public void hide(Activity activity) {
activity.runOnUiThread(
new Runnable() {
@Override
public void run() {
if (messageSnackbar != null) {
messageSnackbar.dismiss();
}
messageSnackbar = null;
}
});
}
private void show(
final Activity activity, final String message, final DismissBehavior dismissBehavior) {
activity.runOnUiThread(
new Runnable() {
@Override
public void run() {
messageSnackbar =
Snackbar.make(
activity.findViewById(android.R.id.content),
message,
Snackbar.LENGTH_INDEFINITE);
messageSnackbar.getView().setBackgroundColor(BACKGROUND_COLOR);
if (dismissBehavior != DismissBehavior.HIDE) {
messageSnackbar.setAction(
"Dismiss",
new View.OnClickListener() {
@Override
public void onClick(View v) {
messageSnackbar.dismiss();
}
});
if (dismissBehavior == DismissBehavior.FINISH) {
messageSnackbar.addCallback(
new BaseTransientBottomBar.BaseCallback<Snackbar>() {
@Override
public void onDismissed(Snackbar transientBottomBar, int event) {
super.onDismissed(transientBottomBar, event);
activity.finish();
}
});
}
}
messageSnackbar.show();
}
});
}
}