/* * 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.tvbrowser; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import org.tvbrowser.filter.ChannelFilter; import org.tvbrowser.settings.SettingConstants; import org.tvbrowser.utils.PrefUtils; import org.tvbrowser.utils.UiUtils; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.text.format.DateFormat; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; public class InfoActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); PrefUtils.initialize(InfoActivity.this); } private ViewGroup mViewParent; @Override public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { mViewParent = (ViewGroup)parent; return super.onCreateView(parent, name, context, attrs); } @Override protected void onResume() { super.onResume(); Intent intent = getIntent(); long programID = intent.getLongExtra(SettingConstants.REMINDER_PROGRAM_ID_EXTRA, -1); if(programID >= 0) { UiUtils.showProgramInfo(this, programID, this, getCurrentFocus(), new Handler()); } else if(intent.hasExtra(AppWidgetManager.EXTRA_APPWIDGET_ID)) { final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(InfoActivity.this); final int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); final ArrayList<Integer> values = new ArrayList<Integer>(); int[] defaultValues = getResources().getIntArray(R.array.time_button_defaults); int timeButtonCount = pref.getInt(getString(R.string.TIME_BUTTON_COUNT),getResources().getInteger(R.integer.time_button_count_default)); int currentValue = pref.getInt(appWidgetId + "_" + getString(R.string.WIDGET_CONFIG_RUNNING_TIME), getResources().getInteger(R.integer.widget_config_running_time_default)); for(int i = 1; i <= Math.min(timeButtonCount, getResources().getInteger(R.integer.time_button_count_default)); i++) { try { Class<?> string = R.string.class; Field setting = string.getDeclaredField("TIME_BUTTON_" + i); Integer value = pref.getInt(getResources().getString((Integer) setting.get(string)), defaultValues[i - 1]); if(value >= -1 && !values.contains(value)) { values.add(value); } } catch (Exception e) {} } for(int i = 7; i <= timeButtonCount; i++) { Integer value = pref.getInt("TIME_BUTTON_" + i, 0); if(value >= -1 && !values.contains(value)) { values.add(value); } } if(PrefUtils.getBooleanValue(R.string.SORT_RUNNING_TIMES, R.bool.sort_running_times_default)) { Collections.sort(values); } final boolean hasNext = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN; final int indexOffset = hasNext ? 1 : 0; int selection = 0; if(currentValue == -2 && hasNext) { selection = 1; } for(int i = 0; i < values.size(); i++) { if(values.get(i) == currentValue) { selection = i+1+indexOffset; break; } } ArrayList<String> formatedTimes = new ArrayList<String>(); formatedTimes.add(getString(R.string.button_now)); if(hasNext) { formatedTimes.add(getString(R.string.button_after)); } for(int i = 0; i < values.size(); i++) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, values.get(i) / 60); cal.set(Calendar.MINUTE, values.get(i) % 60); formatedTimes.add(DateFormat.getTimeFormat(InfoActivity.this).format(cal.getTime())); } AlertDialog.Builder builder = new AlertDialog.Builder(InfoActivity.this); builder.setTitle(R.string.widget_running_select_time_title); builder.setSingleChoiceItems(formatedTimes.toArray(new String[formatedTimes.size()]), selection, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { int value = -1; if(which == 1 && hasNext) { value = -2; } else if(which > 1 || (!hasNext && which > 0)) { value = values.get(which-1-indexOffset); } Editor edit = pref.edit(); edit.putInt(appWidgetId + "_" + getString(R.string.WIDGET_CONFIG_RUNNING_TIME), value); edit.commit(); Intent update = new Intent(SettingConstants.UPDATE_RUNNING_APP_WIDGET); update.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); sendBroadcast(update); dialog.dismiss(); finish(); } }); builder.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { finish(); } }); if(appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) { builder.show(); } else { finish(); } } else if(intent.hasExtra(SettingConstants.WIDGET_CHANNEL_SELECTION_EXTRA)) { final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(InfoActivity.this); final int appWidgetId = intent.getIntExtra(SettingConstants.WIDGET_CHANNEL_SELECTION_EXTRA, AppWidgetManager.INVALID_APPWIDGET_ID); if(SettingConstants.IS_DARK_THEME) { setTheme(R.style.AppDarkTheme); } else { setTheme(R.style.AppTheme); } UiUtils.showChannelFilterSelection(InfoActivity.this, new ChannelFilter() { @Override public void setFilterValues(String name, int[] filteredChannelIds) { String value = ""; if(filteredChannelIds != null) { for(int i = 0; i < filteredChannelIds.length-1; i++) { value += filteredChannelIds[i] + ","; } if(filteredChannelIds.length > 0) { value += String.valueOf(filteredChannelIds[filteredChannelIds.length-1]); } } Editor edit = pref.edit(); edit.putString(appWidgetId+"_"+getString(R.string.WIDGET_CONFIG_PROGRAM_LIST_CHANNELS), value); edit.commit(); AppWidgetManager.getInstance(getApplicationContext()).notifyAppWidgetViewDataChanged(appWidgetId, R.id.important_widget_list_view); finish(); } @Override public String getName() { return null; } @Override public int[] getFilteredChannelIds() { String values = pref.getString(appWidgetId+"_"+getString(R.string.WIDGET_CONFIG_PROGRAM_LIST_CHANNELS), ""); String[] parts = values.split(","); int[] result = new int[values.trim().length() > 0 ? parts.length : 0]; for(int i = 0; i < result.length; i++) { result[i] = Integer.parseInt(parts[i]); } return result; } }, mViewParent, new Runnable() { @Override public void run() { finish(); } }); } else { finish(); } } @Override protected void onNewIntent(Intent intent) { setIntent(intent); } }