package com.ichi2.anki; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.support.design.widget.Snackbar; import android.support.v4.content.ContextCompat; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.ichi2.async.DeckTask; import com.ichi2.async.DeckTask.TaskData; import java.util.Calendar; import timber.log.Timber; public class UIUtils { public static void showThemedToast(Context context, String text, boolean shortLength) { Toast.makeText(context, text, shortLength ? Toast.LENGTH_SHORT : Toast.LENGTH_LONG).show(); } /** * Show a simple Toast-like Snackbar with no actions. * To enable swipe-to-dismiss, the Activity layout should include a CoordinatorLayout with id "root_layout" * @param mainTextResource * @param shortLength */ public static void showSimpleSnackbar(Activity activity, int mainTextResource, boolean shortLength) { View root = activity.findViewById(R.id.root_layout); showSnackbar(activity, mainTextResource, shortLength, -1, null, root); } public static void showSimpleSnackbar(Activity activity, String mainText, boolean shortLength) { View root = activity.findViewById(R.id.root_layout); showSnackbar(activity, mainText, shortLength, -1, null, root, null); } /** * Show a snackbar with an action * @param mainTextResource resource for the main text string * @param shortLength whether or not to use long length * @param actionTextResource resource for the text string shown as the action * @param listener listener for the action (if null no action shown) * @oaram root View Snackbar will attach to. Should be CoordinatorLayout for swipe-to-dismiss to work. */ public static void showSnackbar(Activity activity, int mainTextResource, boolean shortLength, int actionTextResource, View.OnClickListener listener, View root) { showSnackbar(activity, mainTextResource,shortLength,actionTextResource,listener,root, null); } public static void showSnackbar(Activity activity, int mainTextResource, boolean shortLength, int actionTextResource, View.OnClickListener listener, View root, Snackbar.Callback callback) { String mainText = activity.getResources().getString(mainTextResource); showSnackbar(activity, mainText, shortLength, actionTextResource, listener, root, callback); } public static void showSnackbar(Activity activity, String mainText, boolean shortLength, int actionTextResource, View.OnClickListener listener, View root, Snackbar.Callback callback) { if (root == null) { root = activity.findViewById(android.R.id.content); if (root == null) { Timber.e("Could not show Snackbar due to null View"); return; } } int length = shortLength ? Snackbar.LENGTH_SHORT : Snackbar.LENGTH_LONG; Snackbar sb = Snackbar.make(root, mainText, length); if (listener != null) { sb.setAction(actionTextResource, listener); } if (callback != null) { sb.setCallback(callback); } // Make the text white to avoid interference from our theme colors. View view = sb.getView(); TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text); TextView action = (TextView) view.findViewById(android.support.design.R.id.snackbar_action); if (tv != null && action != null) { tv.setTextColor(Color.WHITE); action.setTextColor(ContextCompat.getColor(activity, R.color.material_light_blue_500)); tv.setMaxLines(2); // prevent tablets from truncating to 1 line } sb.show(); } public static float getDensityAdjustedValue(Context context, float value) { return context.getResources().getDisplayMetrics().density * value; } public static long getDayStart() { Calendar cal = Calendar.getInstance(); if (cal.get(Calendar.HOUR_OF_DAY) < 4) { cal.roll(Calendar.DAY_OF_YEAR, -1); } cal.set(Calendar.HOUR_OF_DAY, 4); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal.getTimeInMillis(); } public static void saveCollectionInBackground(Context context) { if (CollectionHelper.getInstance().colIsOpen()) { DeckTask.launchDeckTask(DeckTask.TASK_TYPE_SAVE_COLLECTION, new DeckTask.TaskListener() { @Override public void onPreExecute() { Timber.d("saveCollectionInBackground: start"); } @Override public void onPostExecute(TaskData result) { Timber.d("saveCollectionInBackground: finished"); } @Override public void onProgressUpdate(TaskData... values) { } @Override public void onCancelled() { } }); } } }