org.runbuddy.tomahawk.utils.PreferenceUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.runbuddy.tomahawk.utils.PreferenceUtils.java

Source

/* == This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
 *
 *   Copyright 2016, Enno Gottschalk <mrmaffen@googlemail.com>
 *
 *   Tomahawk 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.
 *
 *   Tomahawk 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 Tomahawk. If not, see <http://www.gnu.org/licenses/>.
 */
package org.runbuddy.tomahawk.utils;

import android.content.SharedPreferences;
import android.os.Build;
import android.preference.PreferenceManager;
import android.support.v4.app.FragmentActivity;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.runbuddy.libtomahawk.authentication.AuthenticatorManager;
import org.runbuddy.tomahawk.app.TomahawkApp;
import org.runbuddy.tomahawk.activities.TomahawkMainActivity;
import org.runbuddy.tomahawk.dialogs.AskAccessConfigDialog;

import java.util.Set;

public class PreferenceUtils {

    public static final String TAG = PreferenceUtils.class.getSimpleName();

    /**
     * USER PREFERENCES
     */
    public static final String SCROBBLE_EVERYTHING = "org.tomahawk.tomahawk_android.scrobbleeverything";

    public static final String PLUG_IN_TO_PLAY = "org.tomahawk.tomahawk_android.plugintoplay";

    public static final String ASKED_FOR_ACCESS = "org.tomahawk.tomahawk_android.asked_for_access";

    public static final String PREF_BITRATE = "org.tomahawk.tomahawk_android.prefbitrate";

    /**
     * See {@link org.runbuddy.tomahawk.R.array#fake_preferences_items_bitrate}
     */
    public static final int PREF_BITRATE_LOW = 0;

    public static final int PREF_BITRATE_MEDIUM = 1;

    public static final int PREF_BITRATE_HIGH = 2;

    /**
     * COACHMARK PREFERENCES
     */
    public static final String COACHMARK_SEEK_DISABLED = "coachmark_seek_disabled";

    public static final String COACHMARK_SEEK_TIMESTAMP = "coachmark_seek_timestamp";

    public static final String COACHMARK_PLAYBACKFRAGMENT_NAVIGATION_DISABLED = "coachmark_playbackfragment_navigation_disabled";

    public static final String COACHMARK_WELCOMEFRAGMENT_DISABLED = "coachmark_welcomefragment_disabled";

    public static final String COACHMARK_SWIPELAYOUT_ENQUEUE_DISABLED = "coachmark_swipelayout_enqueue_disabled";

    /**
     * CHARTS PREFERENCES
     */
    public static final String CHARTS_COUNTRY_CODE = "org.tomahawk.tomahawk_android.charts_country_code";

    public static final String LAST_DISPLAYED_PROVIDER_ID = "org.tomahawk.tomahawk_android.last_displayed_provider_id";

    /**
     * EQUALIZER PREFERENCES
     */
    public final static String EQUALIZER_VALUES = "equalizer_values";

    public final static String EQUALIZER_ENABLED = "equalizer_enabled";

    public final static String EQUALIZER_PRESET = "equalizer_preset";

    /**
     * USERPAGE PREFERENCES
     */
    public static final String USERPAGER_SELECTOR_POSITION = "org.tomahawk.tomahawk_android.userpager_selector_position";

    private static final SharedPreferences mPreferences = PreferenceManager
            .getDefaultSharedPreferences(TomahawkApp.getContext());

    public static SharedPreferences.Editor edit() {
        return mPreferences.edit();
    }

    private static boolean getBooleanDefault(String prefKey) {
        if (prefKey.equals(SCROBBLE_EVERYTHING)) {
            return true;
        }
        return false;
    }

    private static int getIntDefault(String prefKey) {
        if (prefKey.equals(PREF_BITRATE)) {
            return PREF_BITRATE_MEDIUM;
        } else if (prefKey.equals(EQUALIZER_PRESET)) {
            return 0;
        } else if (prefKey.equals(USERPAGER_SELECTOR_POSITION)) {
            return 0;
        }
        return -1;
    }

    private static String getStringDefault(String prefKey) {
        return null;
    }

    private static int getLongDefault(String prefKey) {
        return -1;
    }

    private static Set<String> getStringSetDefault(String prefKey) {
        return null;
    }

    public static boolean getBoolean(String key) {
        return mPreferences.getBoolean(key, getBooleanDefault(key));
    }

    public static String getString(String key) {
        return mPreferences.getString(key, getStringDefault(key));
    }

    public static int getInt(String key) {
        return getInt(key, getIntDefault(key));
    }

    public static int getInt(String key, int defaultValue) {
        return mPreferences.getInt(key, defaultValue);
    }

    public static long getLong(String key) {
        return getLong(key, getLongDefault(key));
    }

    public static long getLong(String key, long defaultValue) {
        return mPreferences.getLong(key, defaultValue);
    }

    public static Set<String> getStringSet(String key) {
        return mPreferences.getStringSet(key, getStringSetDefault(key));
    }

    public static float[] getFloatArray(String key) {
        float[] array = null;
        String s = mPreferences.getString(key, null);
        if (s != null) {
            try {
                JSONArray json = new JSONArray(s);
                array = new float[json.length()];
                for (int i = 0; i < array.length; i++) {
                    array[i] = (float) json.getDouble(i);
                }
            } catch (JSONException e) {
                Log.e(TAG, "getFloatArray: " + e.getClass() + ": " + e.getLocalizedMessage());
            }
        }
        return array;
    }

    public static void putFloatArray(SharedPreferences.Editor editor, String key, float[] array) {
        try {
            JSONArray json = new JSONArray();
            for (float f : array) {
                json.put(f);
            }
            editor.putString(key, json.toString());
        } catch (JSONException e) {
            Log.e(TAG, "putFloatArray: " + e.getClass() + ": " + e.getLocalizedMessage());
        }
    }

    /**
     * Starts the AskAccessActivity in order to ask the user for permission to the notification
     * listener, if the user hasn't been asked before and is logged into hatchet
     */
    public static void attemptAskAccess(TomahawkMainActivity activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            if (!getBoolean(ASKED_FOR_ACCESS)) {
                askAccess(activity);
            }
        }
    }

    /**
     * Starts the AskAccessActivity in order to ask the user for permission to the notification
     * listener, if the user is logged into Hatchet and we don't already have access
     */
    public static void askAccess(FragmentActivity activity) {
        if (AuthenticatorManager.get().getAuthenticatorUtils(TomahawkApp.PLUGINNAME_HATCHET).isLoggedIn()) {
            mPreferences.edit().putBoolean(ASKED_FOR_ACCESS, true).apply();
            new AskAccessConfigDialog().show(activity.getSupportFragmentManager(), null);
        }
    }

}