net.naonedbus.utils.InfoDialogUtils.java Source code

Java tutorial

Introduction

Here is the source code for net.naonedbus.utils.InfoDialogUtils.java

Source

/**
 * Copyright (C) 2013 Romain Guefveneu.
 *   
 *  This file is part of naonedbus.
 *   
 *  Naonedbus 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
 *  (at your option) any later version.
 *  
 *  Naonedbus 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 net.naonedbus.utils;

import java.io.File;
import java.io.IOException;

import net.naonedbus.R;

import org.apache.commons.io.IOUtils;

import android.app.AlertDialog;
import android.content.Context;
import android.content.res.Resources.NotFoundException;
import android.graphics.Color;
import android.view.View;
import android.webkit.WebView;
import android.widget.ScrollView;

import com.bugsense.trace.BugSenseHandler;

public abstract class InfoDialogUtils {

    private static final String MESSAGE_FOLDER = "msg";

    /**
     * Afficher une dialog avec le titre "Information"
     * 
     * @param context
     * @param messageId
     */
    public static void show(final Context context, final int messageId) {
        show(context, R.string.dialog_title_information, messageId);
    }

    /**
     * Afficher une dialog avec titre et message personnaliss
     * 
     * @param context
     * @param titleId
     * @param messageId
     */
    public static void show(final Context context, final int titleId, final int messageId) {
        final AlertDialog moreDetailsDialog = getDialog(context, titleId, messageId);
        moreDetailsDialog.show();
    }

    /**
     * Crer une dialog avec le titre et le contenu donn.
     * 
     * @param context
     * @param titleId
     * @param messageId
     * @return La dialogue.
     */
    public static AlertDialog getDialog(final Context context, final int titleId, final int messageId) {

        final AlertDialog.Builder moreDetailsDialog = new AlertDialog.Builder(context);
        moreDetailsDialog.setTitle(context.getString(titleId));
        moreDetailsDialog.setMessage(context.getString(messageId));
        moreDetailsDialog.setPositiveButton(android.R.string.ok, null);

        return moreDetailsDialog.create();
    }

    /**
     * Afficher une dialog avec un contenu au format HTML
     * 
     * @param context
     * @param html
     */
    public static void showHtml(final Context context, final String html) {
        AlertDialog.Builder moreDetailsDialog = null;
        final WebView webView = new WebView(context);
        final ScrollView scrollView = new ScrollView(context);

        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webView.setBackgroundColor(Color.WHITE);
        webView.loadDataWithBaseURL("fake://not/needed", html, "text/html", "UTF-8", null); // Encoding
        // fix
        // for
        // Android
        // 3.x
        // /
        // 4.x
        scrollView.addView(webView);

        moreDetailsDialog = new AlertDialog.Builder(context);
        moreDetailsDialog.setIcon(android.R.drawable.ic_dialog_info);
        moreDetailsDialog.setTitle("Informations");
        moreDetailsDialog.setView(scrollView);
        moreDetailsDialog.setPositiveButton(android.R.string.ok, null);
        moreDetailsDialog.show();
    }

    /**
     * Afficher une dialog avec un message, uniquement si elle n'a pas dj t
     * affiche
     * 
     * @param context
     * @param messageId
     */
    public static void showIfNecessary(final Context context, final int titreId, final int messageId) {
        final File dataFile = new File(context.getFilesDir(), MESSAGE_FOLDER + File.separator + messageId);

        createDir(context);
        if (!dataFile.exists()) {
            show(context, titreId, messageId);
            try {
                dataFile.createNewFile();
            } catch (final IOException e) {
                BugSenseHandler.sendExceptionMessage("Erreur lors de la cration du marqueur", null, e);
            }
        }
    }

    /**
     * Afficher une dialog avec un message, uniquement si elle n'a pas dj t
     * affiche
     * 
     * @param context
     * @param messageId
     */
    public static void showIfNecessary(final Context context, final int messageId) {
        final File dataFile = new File(context.getFilesDir(), MESSAGE_FOLDER + File.separator + messageId);

        createDir(context);
        if (!dataFile.exists()) {
            show(context, messageId);
            try {
                dataFile.createNewFile();
            } catch (final IOException e) {
                BugSenseHandler.sendExceptionMessage("Erreur lors de la cration du marqueur", null, e);
            }
        }
    }

    /**
     * Afficher un fichier des assets, uniquement s'il n'a pas dj t affich
     * 
     * @param context
     * @param fileFromAssets
     */
    public static void showHtmlFromRaw(final Context context, final int fileId) {
        String content;
        try {
            content = IOUtils.toString(context.getResources().openRawResource(fileId));
            showHtml(context, content);
        } catch (final NotFoundException e) {
            e.printStackTrace();
        } catch (final IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * Crer le rpertoire servant  stocker les id des messages dj affichs
     * 
     * @param context
     */
    private static void createDir(final Context context) {
        final File file = new File(context.getFilesDir(), MESSAGE_FOLDER);
        if (!file.exists()) {
            file.mkdirs();
        }
    }

    /**
     * Indique si un message n'a pas dj t affich, et le marque comme
     * affich.
     * 
     * @param context
     * @param messageId
     *            L'id du message en question.
     * @return <code>true</code> si le message n'a pas encore t affich,
     *         <code>false</code> s'il l'a dj t.
     */
    public static boolean isNotAlreadyShown(final Context context, final int messageId) {
        final File dataFile = new File(context.getFilesDir(), MESSAGE_FOLDER + File.separator + messageId);
        boolean result = true;

        createDir(context);
        if (!dataFile.exists()) {
            try {
                dataFile.createNewFile();
            } catch (final IOException e) {
                BugSenseHandler.sendExceptionMessage("Erreur lors de la cration du marqueur", null, e);
            }
        } else {
            result = false;
        }

        return result;

    }

}