/* * 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.view; import java.text.SimpleDateFormat; import java.util.Locale; import org.tvbrowser.tvbrowser.R; import org.tvbrowser.utils.PrefUtils; import org.tvbrowser.utils.UiUtils; import android.content.Context; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Typeface; import android.preference.PreferenceManager; import android.support.v4.content.ContextCompat; import android.text.TextPaint; import android.text.format.DateFormat; import android.widget.TextView; public class ProgramTableLayoutConstants { static final int HOURS = 28; static final int GRAY_VALUE = 100; static final Paint BLOCK_PAINT = new Paint(); static final Paint LINE_PAINT = new Paint(); static final Paint CHANNEL_LINE_PAINT = new Paint(); static final TextPaint TIME_BLOCK_TIME_PAINT = new TextPaint(); static { TIME_BLOCK_TIME_PAINT.setFlags(Paint.SUBPIXEL_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG); } static int FONT_SIZE_ASCENT; static int COLUMN_WIDTH = -1; static int GAP = -1; static int ROW_HEADER = -1; static int TIME_TITLE_GAP = -1; static int PADDING_SIDE = 0; static int BIG_FONT_DESCEND; static int BIG_MAX_FONT_HEIGHT; static int SMALL_FONT_DESCEND; static int SMALL_MAX_FONT_HEIGHT; static int SUPER_SMALL_FONT_DESCEND; static int SUPER_SMALL_MAX_FONT_HEIGHT; static int CHANNEL_FONT_DESCEND; static int CHANNEL_MAX_FONT_HEIGHT; static final Paint CHANNEL_BACKGROUND_PAINT = new Paint(Paint.ANTI_ALIAS_FLAG); static int CHANNEL_BAR_HEIGHT; static final TextPaint CHANNEL_PAINT = new TextPaint(TextPaint.ANTI_ALIAS_FLAG); static final TextPaint NOT_EXPIRED_TITLE_PAINT = new TextPaint(TextPaint.ANTI_ALIAS_FLAG); static final TextPaint EXPIRED_TITLE_PAINT = new TextPaint(TextPaint.ANTI_ALIAS_FLAG); static final TextPaint NOT_EXPIRED_GENRE_EPISODE_PAINT = new TextPaint(TextPaint.ANTI_ALIAS_FLAG); static final TextPaint EXPIRED_GENRE_EPISODE_PAINT = new TextPaint(TextPaint.ANTI_ALIAS_FLAG); static final TextPaint NOT_EXPIRED_PICTURE_COPYRIGHT_PAINT = new TextPaint(TextPaint.ANTI_ALIAS_FLAG); static final TextPaint EXPIRED_PICTURE_COPYRIGHT_PAINT = new TextPaint(TextPaint.ANTI_ALIAS_FLAG); static java.text.DateFormat TIME_FORMAT; static boolean SHOW_LOGO; static boolean SHOW_NAME; static boolean SHOW_ORDER_NUMBER; private static int RAW_COLUMN_WIDTH; private static float TEXT_SCALE; static float ZOOM = 1.0f; static { NOT_EXPIRED_TITLE_PAINT.setTypeface(Typeface.DEFAULT_BOLD); //EXPIRED_TITLE_PAINT.setColor(SettingConstants.EXPIRED_COLOR); EXPIRED_TITLE_PAINT.setTypeface(Typeface.DEFAULT_BOLD); NOT_EXPIRED_GENRE_EPISODE_PAINT.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC)); //EXPIRED_GENRE_EPISODE_PAINT.setColor(SettingConstants.EXPIRED_COLOR); EXPIRED_GENRE_EPISODE_PAINT.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC)); NOT_EXPIRED_PICTURE_COPYRIGHT_PAINT.setTypeface(Typeface.DEFAULT); EXPIRED_PICTURE_COPYRIGHT_PAINT.setTypeface(Typeface.DEFAULT); //EXPIRED_PICTURE_COPYRIGHT_PAINT.setColor(SettingConstants.EXPIRED_COLOR); CHANNEL_PAINT.setTypeface(Typeface.DEFAULT); } public static void initialize(Context context) { //if(COLUMN_WIDTH == -1) { update(context); //} } public static void updateColumnWidth(Context context) { RAW_COLUMN_WIDTH = PrefUtils.getIntValueWithDefaultKey(R.string.PROG_TABLE_COLUMN_WIDTH, R.integer.prog_table_column_width_default); final float scale = context.getResources().getDisplayMetrics().density; // Convert the dps to pixels, based on density scale COLUMN_WIDTH = (int) (RAW_COLUMN_WIDTH * scale + 0.5f); } public static void updateChannelLogoName(Context context) { String value = PreferenceManager.getDefaultSharedPreferences(context).getString(context.getResources().getString(R.string.CHANNEL_LOGO_NAME_PROGRAM_TABLE),"0"); SHOW_LOGO = !value.equals("2"); SHOW_NAME = !value.equals("1"); SHOW_ORDER_NUMBER = PrefUtils.getBooleanValue(R.string.SHOW_SORT_NUMBER_IN_PROGRAM_TABLE, R.bool.show_sort_number_in_program_table_default); } public static void update(Context context) { updateChannelLogoName(context); RAW_COLUMN_WIDTH = PrefUtils.getIntValueWithDefaultKey(R.string.PROG_TABLE_COLUMN_WIDTH, R.integer.prog_table_column_width_default); // Get the screen's density scale final float scale = context.getResources().getDisplayMetrics().density; ZOOM = scale; // Convert the dps to pixels, based on density scale COLUMN_WIDTH = (int) (RAW_COLUMN_WIDTH * scale + 0.5f); GAP = (int) (1 * scale + 0.5f); TIME_TITLE_GAP = (int) (5 * scale + 0.5f); ROW_HEADER = (int)(scale * 28); EXPIRED_TITLE_PAINT.setColor(UiUtils.getColor(UiUtils.EXPIRED_COLOR_KEY, context)); EXPIRED_GENRE_EPISODE_PAINT.setColor(UiUtils.getColor(UiUtils.EXPIRED_COLOR_KEY, context)); EXPIRED_PICTURE_COPYRIGHT_PAINT.setColor(UiUtils.getColor(UiUtils.EXPIRED_COLOR_KEY, context)); BLOCK_PAINT.setColor(Color.argb(30,GRAY_VALUE, GRAY_VALUE, GRAY_VALUE)); LINE_PAINT.setColor(Color.argb(60, GRAY_VALUE, GRAY_VALUE, GRAY_VALUE)); CHANNEL_LINE_PAINT.setColor(ContextCompat.getColor(context, R.color.light_gray)); PADDING_SIDE = (int) (2 * scale + 0.5f); TIME_BLOCK_TIME_PAINT.setTextSize(scale * 20); TIME_BLOCK_TIME_PAINT.setColor(new TextView(context).getTextColors().getDefaultColor()); FONT_SIZE_ASCENT = Math.abs(TIME_BLOCK_TIME_PAINT.getFontMetricsInt().ascent); CHANNEL_BACKGROUND_PAINT.setColor(ContextCompat.getColor(context, R.color.prog_table_channel_background)); CHANNEL_BACKGROUND_PAINT.setStyle(Paint.Style.FILL_AND_STROKE); TIME_FORMAT = DateFormat.getTimeFormat(context); String value = ((SimpleDateFormat)TIME_FORMAT).toLocalizedPattern(); if((value.charAt(0) == 'H' && value.charAt(1) != 'H') || (value.charAt(0) == 'h' && value.charAt(1) != 'h')) { value = value.charAt(0) + value; } CHANNEL_BAR_HEIGHT = context.getResources().getDimensionPixelSize(R.dimen.prog_table_channel_height); CHANNEL_PAINT.setColor(ContextCompat.getColor(context, R.color.prog_table_channel_color)); CHANNEL_PAINT.setTextSize(context.getResources().getDimensionPixelSize(R.dimen.prog_table_channel_font_size)); CHANNEL_PAINT.setTypeface(Typeface.DEFAULT_BOLD); CHANNEL_FONT_DESCEND = Math.abs(CHANNEL_PAINT.getFontMetricsInt().descent); CHANNEL_MAX_FONT_HEIGHT = CHANNEL_FONT_DESCEND + Math.abs(CHANNEL_PAINT.getFontMetricsInt().ascent)+1; TIME_FORMAT = new SimpleDateFormat(value, Locale.getDefault()); TEXT_SCALE = Float.valueOf(PrefUtils.getStringValue(R.string.PROG_TABLE_TEXT_SCALE, R.string.prog_table_text_scale_default)); float textSize = new TextView(context).getTextSize() * TEXT_SCALE; float smallTextSize = (10 * scale + 0.5f) * TEXT_SCALE; int color = new TextView(context).getTextColors().getDefaultColor(); NOT_EXPIRED_TITLE_PAINT.setTextSize(textSize); NOT_EXPIRED_TITLE_PAINT.setColor(color); NOT_EXPIRED_GENRE_EPISODE_PAINT.setTextSize(textSize); NOT_EXPIRED_GENRE_EPISODE_PAINT.setColor(color); NOT_EXPIRED_PICTURE_COPYRIGHT_PAINT.setTextSize(smallTextSize); NOT_EXPIRED_PICTURE_COPYRIGHT_PAINT.setColor(color); EXPIRED_TITLE_PAINT.setTextSize(textSize); EXPIRED_GENRE_EPISODE_PAINT.setTextSize(textSize); EXPIRED_PICTURE_COPYRIGHT_PAINT.setTextSize(smallTextSize); BIG_FONT_DESCEND = Math.abs(NOT_EXPIRED_TITLE_PAINT.getFontMetricsInt().descent); BIG_MAX_FONT_HEIGHT = BIG_FONT_DESCEND + Math.abs(NOT_EXPIRED_TITLE_PAINT.getFontMetricsInt().ascent)+1; SMALL_FONT_DESCEND = Math.abs(NOT_EXPIRED_GENRE_EPISODE_PAINT.getFontMetricsInt().descent); SMALL_MAX_FONT_HEIGHT = SMALL_FONT_DESCEND + Math.abs(NOT_EXPIRED_GENRE_EPISODE_PAINT.getFontMetricsInt().ascent)+1; SUPER_SMALL_FONT_DESCEND = Math.abs(NOT_EXPIRED_PICTURE_COPYRIGHT_PAINT.getFontMetricsInt().descent); SUPER_SMALL_MAX_FONT_HEIGHT = SUPER_SMALL_FONT_DESCEND + Math.abs(NOT_EXPIRED_PICTURE_COPYRIGHT_PAINT.getFontMetricsInt().ascent)+1; } public static int getRawColumnWidth() { return RAW_COLUMN_WIDTH; } public static float getTextScale() { return TEXT_SCALE; } public static int getChannelBarHeight() { return CHANNEL_BAR_HEIGHT; } public static int getChannelMaxFontHeight() { return CHANNEL_MAX_FONT_HEIGHT; } public static boolean getShowOrderNumber() { return SHOW_ORDER_NUMBER; } public static float getZoom() { return ZOOM; } }