/* * TV-Browser for Android * Copyright (C) 2013 René Mach (rene@tvbrowser.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software * and associated documentation files (the "Software"), to use, copy, modify or merge the Software, * furthermore to publish and distribute the Software free of charge without modifications and to * permit persons to whom the Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package org.tvbrowser.settings; import java.util.ArrayList; import java.util.HashMap; import org.tvbrowser.content.TvBrowserContentProvider; import org.tvbrowser.tvbrowser.R; import org.tvbrowser.utils.IOUtils; import org.tvbrowser.utils.PrefUtils; import org.tvbrowser.utils.UiUtils; import android.content.Context; import android.content.IntentFilter; import android.content.SharedPreferences.Editor; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable.Orientation; import android.graphics.drawable.LayerDrawable; import android.preference.PreferenceManager; import android.support.v4.content.ContextCompat; import android.support.v4.util.SparseArrayCompat; public class SettingConstants { public static boolean GOOGLE_PLAY = true; public static final int ACCEPTED_DAY_COUNT = 8; private static final String REMINDER_PAUSE_KEY = "REMINDER_PAUSE_KEY"; public static final String ALL_FILTER_ID = "filter.allFilter"; public static final String EPG_FREE_KEY = "EPG_FREE"; public static final String EPG_DONATE_KEY = "EPG_DONATE_KEY"; public static final String EPG_DONATE_GROUP_KEY = "epgdonategroup"; public static final String EPG_DONATE_DEFAULT_URL = "http://epgdonatedata.natsu-no-yuki.de/"; public static final String URL_SYNC_BASE = "https://www.tvbrowser-app.de/"; public static final String EPG_DONATE_DONATION_INFO_PERCENT_KEY = "CURRENT_DONATION_PERCENT"; public static final String EPG_DONATE_DONATION_INFO_AMOUNT_KEY_PREFIX = "CURRENT_DONATION_AMOUNT_"; public static final String[] EPG_FREE_LEVEL_NAMES = {"base","more00-16","more16-00","picture00-16","picture16-00"}; public static final String[] EPG_DONATE_LEVEL_NAMES = {"base","more","picture"}; public static final long DATA_LAST_DATE_NO_DATA = 0; public static final String CHANNEL_DOWNLOAD_COMPLETE = "org.tvbrowser.CHANNEL_DOWNLOAD_COMPLETE"; public static final String MARKINGS_CHANGED = "org.tvbrowser.MARKINGS_CHANGED"; public static final String FAVORITES_CHANGED = "org.tvbrowser.FAVORTES_CHANGED"; public static final String DONT_WANT_TO_SEE_CHANGED = "org.tvbrowser.DONT_WANT_TO_SEE_CHANGED"; public static final String DATA_UPDATE_DONE = "org.tvbrowser.DATA_UPDATE_DONE"; public static final String PROGRAM_REMINDED_FOR = "org.tvbrowser.PROGRAM_REMINDED_FOR"; public static final String REMINDER_DOWN_DONE = "org.tvbrowser.REMINDER_DOWN_DONE"; public static final String SYNCHRONIZE_UP_DONE = "org.tvbrowser.SYNCHRONIZE_UP_DONE"; public static final String CHANNEL_UPDATE_DONE = "org.tvbrowser.CHANNEL_UPDATE_DONE"; public static final String REFRESH_VIEWS = "org.tvbrowser.REFRESH_VIEWS"; public static final String UPDATE_TIME_BUTTONS = "org.tvbrowser.UPDATE_TIME_BUTTONS"; public static final String REMINDER_INTENT = "org.tvbrowser.REMINDER_INTENT"; public static final String SHOW_ALL_PROGRAMS_FOR_CHANNEL_INTENT = "org.tvbrowser.SHOW_ALL_PROGRAMS_FOR_CHANNEL_INTENT"; public static final String REMINDER_PROGRAM_ID_EXTRA = "REMINDER_PROGRAM_ID_EXTRA"; public static final String CHANNEL_ID_EXTRA = "CHANNEL_ID_EXTRA"; public static final String DAY_POSITION_EXTRA = "DAY_POSITION_EXTRA"; public static final String FILTER_POSITION_EXTRA = "FILTER_POSITION_EXTRA"; public static final String NO_BACK_STACKUP_EXTRA = "NO_BACK_STACKUP_EXTRA"; public static final String EXTRA_START_TIME = "START_TIME_EXTRA"; public static final String EXTRA_END_TIME = "EXTRA_END_TIME"; public static final String SCROLL_POSITION_EXTRA = "SCROLL_POSITION_EXTRA"; public static final String TIME_DATA_UPDATE_EXTRA = "TIME_DATA_UPDATE_EXTRA"; public static final String EXTRA_DATA_UPDATE_TYPE_INTERNET_CONNECTION = "internetConnectionType"; public static final String EXTRA_DATA_UPDATE_TYPE = "dataUpdateType"; public static final String EXTRA_DATA_DATE_LAST_KNOWN = "dataDateLastKnown"; public static final String EXTRA_REMINDED_PROGRAM = "remindedProgram"; public static final String EXTRA_FIRST_START = "EXTRA_FIRST_START"; public static final String SYNCHRONIZE_SHOW_INFO_EXTRA = "SYNCHRONIZE_SHOW_INFO_EXTRA"; public static final String SYNCHRONIZE_UP_URL_EXTRA = "SYNCHRONIZE_UP_URL_EXTRA"; public static final String SYNCHRONIZE_UP_VALUE_EXTRA = "SYNCHRONIZE_UP_STRING_EXTRA"; public static final String WIDGET_CHANNEL_SELECTION_EXTRA = "WIDGET_CHANNEL_SELECTION_EXTRA"; public static final String HANDLE_APP_WIDGET_CLICK = "org.tvbrowser.HANDLE_APP_WIDGET_CLICK"; public static final String UPDATE_RUNNING_APP_WIDGET = "org.tvbrowser.UPDATE_RUNNING_APP_WIDGET"; public static final String UPDATE_IMPORTANT_APP_WIDGET = "org.tvbrowser.UPDATE_IMPORTANT_APP_WIDGET"; public static final String UPDATE_APP_WIDGET_ID_EXTRA = "UPDATE_APP_WIDGET_ID_EXTRA"; public static final String SKU_ONE_STAR_DONATION = "one_star_donation"; public static final String SKU_TWO_STAR_DONATION = "two_star_donation"; public static final String SKU_THREE_STAR_DONATION = "three_star_donation"; public static final String SKU_FOUR_STAR_DONATION = "four_star_donation"; public static final String SKU_FIVE_STAR_DONATION = "five_star_donation"; public static final String SKU_EPG_DONATE_ONCE = "epg_donate_once"; public static final String SKU_EPG_DONATE_ABO = "epg_donate_abo"; public static final ArrayList<String> SKU_LIST = new ArrayList<String>(); static { SKU_LIST.add(SKU_EPG_DONATE_ONCE); SKU_LIST.add(SKU_ONE_STAR_DONATION); SKU_LIST.add(SKU_TWO_STAR_DONATION); SKU_LIST.add(SKU_THREE_STAR_DONATION); SKU_LIST.add(SKU_FOUR_STAR_DONATION); SKU_LIST.add(SKU_FIVE_STAR_DONATION); } public static final int[] CATEGORY_PREF_KEY_ARR = { R.string.PREF_INFO_SHOW_BLACK_AND_WHITE, R.string.PREF_INFO_SHOW_FOUR_TO_THREE, R.string.PREF_INFO_SHOW_SIXTEEN_TO_NINE, R.string.PREF_INFO_SHOW_MONO, R.string.PREF_INFO_SHOW_STEREO, R.string.PREF_INFO_SHOW_DOLBY_SOURROUND, R.string.PREF_INFO_SHOW_DOLBY_DIGITAL, R.string.PREF_INFO_SHOW_SECOND_ADUIO_PROGRAM, R.string.PREF_INFO_SHOW_CLOSED_CAPTION, R.string.PREF_INFO_SHOW_LIVE, R.string.PREF_INFO_SHOW_OMU, R.string.PREF_INFO_SHOW_FILM, R.string.PREF_INFO_SHOW_SERIES, R.string.PREF_INFO_SHOW_NEW, R.string.PREF_INFO_SHOW_AUDIO_DESCRIPTION, R.string.PREF_INFO_SHOW_NEWS, R.string.PREF_INFO_SHOW_SHOW, R.string.PREF_INFO_SHOW_MAGAZIN, R.string.PREF_INFO_SHOW_HD, R.string.PREF_INFO_SHOW_DOCU, R.string.PREF_INFO_SHOW_ART, R.string.PREF_INFO_SHOW_SPORT, R.string.PREF_INFO_SHOW_CHILDREN, R.string.PREF_INFO_SHOW_OTHER, R.string.PREF_INFO_SHOW_SIGN_LANGUAGE }; public static final int[] CATEGORY_COLOR_PREF_KEY_ARR = { R.string.PREF_COLOR_CATEGORY_BLACK_AND_WHITE, R.string.PREF_COLOR_CATEGORY_FOUR_TO_THREE, R.string.PREF_COLOR_CATEGORY_SIXTEEN_TO_NINE, R.string.PREF_COLOR_CATEGORY_MONO, R.string.PREF_COLOR_CATEGORY_STEREO, R.string.PREF_COLOR_CATEGORY_DOLBY_SOURROUND, R.string.PREF_COLOR_CATEGORY_DOLBY_DIGITAL, R.string.PREF_COLOR_CATEGORY_SECOND_ADUIO_PROGRAM, R.string.PREF_COLOR_CATEGORY_CLOSED_CAPTION, R.string.PREF_COLOR_CATEGORY_LIVE, R.string.PREF_COLOR_CATEGORY_OMU, R.string.PREF_COLOR_CATEGORY_FILM, R.string.PREF_COLOR_CATEGORY_SERIES, R.string.PREF_COLOR_CATEGORY_NEW, R.string.PREF_COLOR_CATEGORY_AUDIO_DESCRIPTION, R.string.PREF_COLOR_CATEGORY_NEWS, R.string.PREF_COLOR_CATEGORY_SHOW, R.string.PREF_COLOR_CATEGORY_MAGAZIN, R.string.PREF_COLOR_CATEGORY_HD, R.string.PREF_COLOR_CATEGORY_DOCU, R.string.PREF_COLOR_CATEGORY_ART, R.string.PREF_COLOR_CATEGORY_SPORT, R.string.PREF_COLOR_CATEGORY_CHILDREN, R.string.PREF_COLOR_CATEGORY_OTHER, R.string.PREF_COLOR_CATEGORY_SIGN_LANGUAGE }; public static final String DONT_WANT_TO_SEE_ADDED_EXTRA = "DONT_WANT_TO_SEE_ADDED_EXTRA"; public static boolean IS_DARK_THEME = false; public static final String UPDATE_RUNNING_KEY = "updateRunning"; public static final String SELECTION_CHANNELS_KEY = "selectionChannels"; public static final String REMINDER_STATE_KEY = "reminderState"; public static final SparseArrayCompat<Drawable> SMALL_LOGO_MAP = new SparseArrayCompat<Drawable>(); public static final SparseArrayCompat<Drawable> MEDIUM_LOGO_MAP = new SparseArrayCompat<Drawable>(); public static String getNumberForDataServiceKey(String key) { String result = null; if(key.equals(EPG_FREE_KEY)) { result = "1"; } else if(key.equals(EPG_DONATE_KEY)) { result = "2"; } return result; } public static String getDataServiceKeyForNumber(String number) { String result = null; if(number.equals("1")) { result = EPG_FREE_KEY; } else if(number.equals("2")) { result = EPG_DONATE_KEY; } return result; } public static void setReminderPaused(Context context, boolean reminderPaused) { Editor editPref = PreferenceManager.getDefaultSharedPreferences(context).edit(); editPref.putBoolean(REMINDER_PAUSE_KEY, reminderPaused); editPref.commit(); } public static boolean isReminderPaused(Context context) { return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(REMINDER_PAUSE_KEY, false); } public static synchronized void initializeLogoMap(Context context, boolean reload) { if(SMALL_LOGO_MAP.size() == 0 || MEDIUM_LOGO_MAP.size() == 0 || reload) { PrefUtils.initialize(context.getApplicationContext()); if(IOUtils.isDatabaseAccessible(context)) { SMALL_LOGO_MAP.clear(); MEDIUM_LOGO_MAP.clear(); final Cursor channels = context.getContentResolver().query(TvBrowserContentProvider.CONTENT_URI_CHANNELS, new String[] {TvBrowserContentProvider.KEY_ID,TvBrowserContentProvider.CHANNEL_KEY_LOGO}, TvBrowserContentProvider.CHANNEL_KEY_SELECTION, null, null); try { if(IOUtils.prepareAccess(channels)) { int keyIndex = channels.getColumnIndex(TvBrowserContentProvider.KEY_ID); int logoIndex = channels.getColumnIndex(TvBrowserContentProvider.CHANNEL_KEY_LOGO); while(channels.moveToNext()) { Bitmap logoBitmap = UiUtils.createBitmapFromByteArray(channels.getBlob(logoIndex)); if(logoBitmap != null) { SMALL_LOGO_MAP.put(channels.getInt(keyIndex), createDrawable(17,context,logoBitmap)); MEDIUM_LOGO_MAP.put(channels.getInt(keyIndex), createDrawable(25,context,logoBitmap)); } } } }finally { IOUtils.close(channels); } } } } private static BitmapDrawable createDrawable(int baseHeight, Context context, Bitmap logoBitmap) { return new BitmapDrawable(context.getResources(), UiUtils.drawableToBitmap(createLayerDrawable(baseHeight,context,logoBitmap))); } public static LayerDrawable createLayerDrawable(int baseHeight, Context context, Bitmap logoBitmap) { boolean withBorder = PrefUtils.getBooleanValue(R.string.PREF_LOGO_BORDER, R.bool.pref_logo_border_default); int padding = withBorder ? 4 : 3; float scale = UiUtils.convertDpToPixel(baseHeight, context.getResources()) / (float)logoBitmap.getHeight(); int maxwidth = UiUtils.convertDpToPixel(80, context.getResources()); int maxheight = UiUtils.convertDpToPixel(baseHeight, context.getResources())+padding; int width = (int)(logoBitmap.getWidth() * scale); int height = (int)(logoBitmap.getHeight() * scale); if(width > maxwidth-padding) { width = maxwidth-padding; height = (int)(logoBitmap.getHeight() * width/(float)logoBitmap.getWidth()); } BitmapDrawable logo1 = new BitmapDrawable(context.getResources(), logoBitmap); LayerDrawable logo = new LayerDrawable(new Drawable[] {logo1}); GradientDrawable background = null; int backgroundColor = PrefUtils.getIntValue(R.string.PREF_LOGO_BACKGROUND_COLOR, ContextCompat.getColor(context, R.color.pref_logo_background_color_default)); background = new GradientDrawable(Orientation.BOTTOM_TOP, new int[] {backgroundColor,backgroundColor}); logo = new LayerDrawable(new Drawable[] {background,logo1}); logo.setBounds(0, 0, maxwidth, maxheight); if(PrefUtils.getBooleanValue(R.string.PREF_LOGO_BACKGROUND_FILL, R.bool.pref_logo_background_fill_default)) { background.setBounds(0, 0, maxwidth, maxheight); } else { background.setBounds(maxwidth/2-width/2-padding/2, maxheight/2-height/2-padding/2, maxwidth/2+width/2+padding/2, maxheight/2+height/2+padding/2); } logo1.setBounds(maxwidth/2-width/2, maxheight/2-height/2, maxwidth/2+width/2, maxheight/2+height/2); if(withBorder) { background.setStroke(1, PrefUtils.getIntValue(R.string.PREF_LOGO_BORDER_COLOR, ContextCompat.getColor(context, R.color.pref_logo_border_color_default))); } return logo; } public static int ORIENTATION; public static boolean UPDATING_FILTER = false; public static boolean UPDATING_REMINDERS = false; public static final String[] REMINDER_PROJECTION = new String[] { TvBrowserContentProvider.KEY_ID, TvBrowserContentProvider.DATA_KEY_STARTTIME, TvBrowserContentProvider.DATA_KEY_ENDTIME, TvBrowserContentProvider.DATA_KEY_TITLE, TvBrowserContentProvider.DATA_KEY_EPISODE_TITLE, TvBrowserContentProvider.DATA_KEY_SHORT_DESCRIPTION, TvBrowserContentProvider.DATA_KEY_DESCRIPTION, TvBrowserContentProvider.CHANNEL_KEY_CHANNEL_ID }; public static final String EXTRA_MARKINGS_ID = "EXTRA_MARKINGS_ID"; public static final String EXTRA_MARKINGS_ONLY_UPDATE = "EXTRA_MARKINGS_ONLY_UPDATE"; //public static final String FAVORITE_LIST = "FAVORITE_LIST"; public static final String USER_NAME = "CAR"; public static final String USER_PASSWORD = "BICYCLE"; public static final String TERMS_ACCEPTED = "TERMS_ACCEPTED"; public static final String EULA_ACCEPTED = "EULA_ACCEPTED"; public static final String DEFAULT_RUNNING_PROGRAMS_LIST_LAYOUT = "1"; public static final String EXTRA_CHANNEL_DOWNLOAD_SUCCESSFULLY = "EXTRA_CHANNEL_DOWNLOAD_SUCCESSFULLY"; public static final String EXTRA_CHANNEL_DOWNLOAD_AUTO_UPDATE = "EXTRA_CHANNEL_DOWNLOAD_AUTO_UPDATE"; public static final IntentFilter RERESH_FILTER = new IntentFilter(REFRESH_VIEWS); public static final HashMap<String, Integer> MARK_COLOR_KEY_MAP = new HashMap<String, Integer>(); public static final HashMap<String, String> SHORT_CHANNEL_NAMES = new HashMap<String, String>(); public static final int NO_CATEGORY = 0; public static final int TV_CATEGORY = 1; public static final int RADIO_CATEGORY = 1 << 1; public static final int CINEMA_CATEGORY = 1 << 2; public static final int DIGITAL_CATEGORY = 1 << 4; public static final int MUSIC_CATEGORY = 1 << 5; public static final int SPORT_CATEGORY = 1 << 6; public static final int NEWS_CATEGORY = 1 << 7; public static final int NICHE_CATEGORY = 1 << 8; public static final int PAY_TV_CATEGORY = 1 << 9; private static final int GRAY_LIGHT_VALUE = 155; private static final int GRAY_DARK_VALUE = 78; public static final int LOGO_BACKGROUND_COLOR = Color.WHITE; public static final int LOGO_TRANSPARENT_BACKGROUND_COLOR = Color.argb(0, 0, 0, 0); public static final int EXPIRED_LIGHT_COLOR = Color.rgb(GRAY_LIGHT_VALUE, GRAY_LIGHT_VALUE, GRAY_LIGHT_VALUE); public static final int EXPIRED_DARK_COLOR = Color.rgb(GRAY_DARK_VALUE, GRAY_DARK_VALUE, GRAY_DARK_VALUE); static { MARK_COLOR_KEY_MAP.put(TvBrowserContentProvider.DATA_KEY_MARKING_MARKING, UiUtils.MARKED_COLOR_KEY); MARK_COLOR_KEY_MAP.put(TvBrowserContentProvider.DATA_KEY_MARKING_REMINDER, UiUtils.MARKED_REMINDER_COLOR_KEY); MARK_COLOR_KEY_MAP.put(TvBrowserContentProvider.DATA_KEY_MARKING_FAVORITE, UiUtils.MARKED_FAVORITE_COLOR_KEY); MARK_COLOR_KEY_MAP.put(TvBrowserContentProvider.DATA_KEY_MARKING_FAVORITE_REMINDER, UiUtils.MARKED_REMINDER_COLOR_KEY); MARK_COLOR_KEY_MAP.put(TvBrowserContentProvider.DATA_KEY_MARKING_SYNC, UiUtils.MARKED_SYNC_COLOR_KEY); MARK_COLOR_KEY_MAP.put(TvBrowserContentProvider.DATA_KEY_DONT_WANT_TO_SEE, UiUtils.I_DONT_WANT_TO_SEE_HIGHLIGHT_COLOR_KEY); SHORT_CHANNEL_NAMES.put("NDR Niedersachsen", "NDR NDS"); SHORT_CHANNEL_NAMES.put("NDR Mecklenburg-Vorpommern", "NDR MV"); SHORT_CHANNEL_NAMES.put("NDR Hamburg", "NDR HH"); SHORT_CHANNEL_NAMES.put("NDR Schleswig-Holstein", "NDR SH"); SHORT_CHANNEL_NAMES.put("MDR Sachsen-Anhalt", "MDR ST"); SHORT_CHANNEL_NAMES.put("MDR Sachsen", "MDR SN"); SHORT_CHANNEL_NAMES.put("MDR Thüringen", "MDR TH"); SHORT_CHANNEL_NAMES.put("RBB Berlin", "RBB BE"); SHORT_CHANNEL_NAMES.put("RBB Brandenburg", "RBB BB"); SHORT_CHANNEL_NAMES.put("Das Erste (ARD)", "Das Erste"); } }