package de.onyxbits.raccoon.gui; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; import javax.swing.JFrame; import javax.swing.JOptionPane; import de.onyxbits.raccoon.BrowseUtil; import de.onyxbits.raccoon.Messages; /** * Ask the user for feedback after a reasonable amount of uses. * * @author patrick * */ class Feedback { public static final String URL = "http://www.onyxbits.de/raccoon/feedback"; public static final int DAYS = 7; public static final int USES = 5; public static final String KEY_COUNT = "downloadcount"; public static final String KEY_FIRST = "firstdownload"; public static final String KEY_DONE = "dontshow"; /** * Call this when the user performs a "use" action. * * @param center * a component to center the feedback dialog upon (or null). */ public static void used(JFrame center) { Preferences prefs = Preferences.userNodeForPackage(Feedback.class); if (prefs.getBoolean(KEY_DONE, false)) { return; } long count = prefs.getLong(KEY_COUNT, 0) + 1; prefs.putLong(KEY_COUNT, count); long first = prefs.getLong(KEY_FIRST, 0); if (first == 0) { first = System.currentTimeMillis(); prefs.putLong(KEY_FIRST, first); } try { prefs.flush(); } catch (BackingStoreException e) { e.printStackTrace(); } if (count >= USES) { if (System.currentTimeMillis() >= first + (DAYS * 24 * 60 * 60 * 1000)) { showDialog(center); } } } private static void showDialog(JFrame center) { Preferences prefs = Preferences.userNodeForPackage(Feedback.class); Object[] options = { Messages.getString("Feedback.yes"), Messages.getString("Feedback.later"), Messages.getString("Feedback.no") }; String title = Messages.getString("Feedback.title"); String message = Messages.getString("Feedback.message"); int n = JOptionPane.showOptionDialog(center, message, title, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); switch (n) { case 0: { prefs.putBoolean(KEY_DONE, true); BrowseUtil.openUrl(URL); break; } case 1: { prefs.putLong(KEY_COUNT, 0); break; } case 2: { prefs.putBoolean(KEY_DONE, true); break; } } try { prefs.flush(); } catch (BackingStoreException e) { e.printStackTrace(); } } }