de.azapps.mirakel.helper.WidgetHelper.java Source code

Java tutorial

Introduction

Here is the source code for de.azapps.mirakel.helper.WidgetHelper.java

Source

/*******************************************************************************
 * Mirakel is an Android App for managing your ToDo-Lists
 *
 * Copyright (c) 2013-2014 Anatolij Zelenin, Georg Semmler.
 *
 *     This program is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     any later version.
 *
 *     This program is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 *
 *     You should have received a copy of the GNU General Public License
 *     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ******************************************************************************/
package de.azapps.mirakel.helper;

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.drawable.GradientDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.view.View;
import android.widget.RemoteViews;

import com.google.common.base.Optional;

import de.azapps.mirakel.DefinitionsHelper;
import de.azapps.mirakel.model.list.ListMirakel;
import de.azapps.mirakel.model.list.SpecialList;
import de.azapps.mirakel.model.task.Task;
import de.azapps.mirakel.widget.R;

public class WidgetHelper {
    public static RemoteViews configureItem(final RemoteViews rv, final Task task, final Context context,
            final long listId, final boolean isMinimal, final int widgetId) {

        final Optional<Class<?>> main = Helpers.getMainActivity();
        if (!main.isPresent()) {
            return null;
        }
        final Intent openIntent = new Intent(context, main.get());

        openIntent.setAction(DefinitionsHelper.SHOW_TASK);
        final Bundle wrapper = new Bundle();
        wrapper.putParcelable(DefinitionsHelper.EXTRA_TASK, task);
        openIntent.putExtra(DefinitionsHelper.BUNDLE_WRAPPER, wrapper);
        openIntent.setData(Uri.parse(openIntent.toUri(Intent.URI_INTENT_SCHEME)));
        final PendingIntent pOpenIntent = PendingIntent.getActivity(context, 0, openIntent, 0);
        rv.setOnClickPendingIntent(R.id.tasks_row, pOpenIntent);
        rv.setOnClickPendingIntent(R.id.tasks_row_name, pOpenIntent);
        if (isMinimal) {
            if (task.getDue().isPresent()) {
                rv.setViewVisibility(R.id.tasks_row_due, View.VISIBLE);
                rv.setTextViewText(R.id.tasks_row_due, DateTimeHelper.formatDate(context, task.getDue()));
            } else {
                rv.setViewVisibility(R.id.tasks_row_due, View.GONE);
            }
            rv.setInt(R.id.tasks_row_priority, "setBackgroundColor", TaskHelper.getPrioColor(task.getPriority()));
        }
        rv.setTextColor(R.id.tasks_row_name, WidgetHelper.getFontColor(context, widgetId));
        if (getBoolean(context, widgetId, "widgetDueColors", true)) {
            rv.setTextColor(R.id.tasks_row_due, TaskHelper.getTaskDueColor(context, task.getDue(), task.isDone()));
        } else {
            rv.setTextColor(R.id.tasks_row_due, WidgetHelper.getFontColor(context, widgetId));
        }
        rv.setTextViewText(R.id.tasks_row_name, task.getName());
        if (task.isDone()) {
            rv.setTextColor(R.id.tasks_row_name, context.getResources().getColor(R.color.Grey));
        }
        if (!isMinimal) {
            rv.setTextViewText(R.id.tasks_row_priority, String.valueOf(task.getPriority()));
            rv.setTextColor(R.id.tasks_row_priority, context.getResources().getColor(R.color.Black));
            final GradientDrawable drawable = (GradientDrawable) context.getResources()
                    .getDrawable(R.drawable.priority_rectangle);
            drawable.setColor(TaskHelper.getPrioColor(task.getPriority()));
            final Bitmap bitmap = Bitmap.createBitmap(40, 40, Config.ARGB_8888);
            final Canvas canvas = new Canvas(bitmap);
            drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
            drawable.draw(canvas);
            rv.setImageViewBitmap(R.id.label_bg, bitmap);
            if (listId <= 0L) {
                rv.setViewVisibility(R.id.tasks_row_list_name, View.VISIBLE);
                rv.setTextViewText(R.id.tasks_row_list_name, task.getList().getName());
            } else {
                rv.setViewVisibility(R.id.tasks_row_list_name, View.GONE);
            }
            if ((!task.getContent().isEmpty()) || (task.countSubtasks() > 0L) || (!task.getFiles().isEmpty())) {
                rv.setViewVisibility(R.id.tasks_row_has_content, View.VISIBLE);
            } else {
                rv.setViewVisibility(R.id.tasks_row_has_content, View.GONE);
            }
            rv.setViewVisibility(R.id.tasks_row_due, View.VISIBLE);
            rv.setTextViewText(R.id.tasks_row_due, DateTimeHelper.formatDate(context, task.getDue()));
            rv.setTextColor(R.id.tasks_row_due, TaskHelper.getTaskDueColor(context, task.getDue(), task.isDone()));
        }
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
            rv.setTextColor(R.id.tasks_row_name, context.getResources()
                    .getColor(WidgetHelper.isDark(context, widgetId) ? R.color.White : R.color.Black));
        }
        return rv;
    }

    // For settings
    private static final String PREFS_NAME = "de.azapps.mirakelandroid.appwidget.MainWidgetProvider";
    private static final String PREF_PREFIX = "widget_";
    private static final String TAG = "WidgetHelper";
    private static SharedPreferences settings = null;

    private static SharedPreferences getSettings(final Context ctx) {
        if (settings == null) {
            settings = ctx.getSharedPreferences(PREFS_NAME, 0);
        }
        return settings;
    }

    private static String getKey(final int widgetId, final String key) {
        return PREF_PREFIX + widgetId + '_' + key;
    }

    private static boolean getBoolean(final Context context, final int widgetId, final String key,
            final boolean def) {
        return getSettings(context).getBoolean(getKey(widgetId, key), def);
    }

    private static int getInt(final Context context, final int widgetId, final String key, final int white) {
        return getSettings(context).getInt(getKey(widgetId, key), white);
    }

    public static boolean isDark(final Context context, final int widgetId) {
        return getBoolean(context, widgetId, "isDark", true);
    }

    public static boolean isMinimalistic(final Context context, final int widgetId) {
        return true;
    }

    public static boolean showDone(final Context context, final int widgetId) {
        return getBoolean(context, widgetId, "showDone", false);
    }

    public static boolean dueColors(final Context context, final int widgetId) {
        return getBoolean(context, widgetId, "widgetDueColors", true);
    }

    public static int getFontColor(final Context context, final int widgetId) {
        return getInt(context, widgetId, "widgetFontColor", context.getResources().getColor(android.R.color.white));
    }

    public static int getTransparency(final Context context, final int widgetId) {
        return getInt(context, widgetId, "widgetTransparency", 100);
    }

    @NonNull
    public static ListMirakel getList(final Context context, final int widgetId) {
        final int listId = getSettings(context).getInt(getKey(widgetId, "list_id"), 0);
        final Optional<ListMirakel> list = ListMirakel.get(listId);
        if (!list.isPresent()) {
            return SpecialList.firstSpecialSafe();
        } else {
            return list.get();
        }
    }

    public static void setList(final Context context, final int widgetId, final int listId) {
        final Editor editor = getSettings(context).edit();
        editor.putInt(getKey(widgetId, "list_id"), listId);
        editor.commit();
    }

    public static void putBool(final Context context, final int widgetId, final String key, final boolean value) {
        final Editor editor = getSettings(context).edit();
        editor.putBoolean(getKey(widgetId, key), value);
        editor.commit();
    }

    public static void putInt(final Context context, final int widgetId, final String key, final int value) {
        final Editor editor = getSettings(context).edit();
        editor.putInt(getKey(widgetId, key), value);
        editor.commit();
    }

    public static void setDone(final Context context, final int widgetId, final boolean done) {
        putBool(context, widgetId, "showDone", done);
    }

    public static void setMinimalistic(final Context context, final int widgetId, final boolean minimalistic) {
        putBool(context, widgetId, "isMinimalistic", minimalistic);
    }

    public static void setDark(final Context context, final int widgetId, final boolean dark) {
        putBool(context, widgetId, "isDark", dark);
    }

    public static void setDueColors(final Context context, final int widgetId, final boolean done) {
        putBool(context, widgetId, "widgetDueColors", done);
    }

    public static void setFontColor(final Context context, final int widgetId, final int color) {
        putInt(context, widgetId, "widgetFontColor", color);
    }

    public static void setTransparency(final Context context, final int widgetId, final int transparency) {
        putInt(context, widgetId, "widgetTransparency", transparency);
    }

    public static void setHasGradient(final Context context, final int widgetId, final Boolean newValue) {
        putBool(context, widgetId, "widgetUseGradient", newValue);
    }

    public static boolean gethasGradient(final Context context, final int widgetId) {
        return getBoolean(context, widgetId, "widgetUseGradient", true);
    }
}