/*
* TV-Browser for Android
* Copyright (C) 2014 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.filter;
import java.util.Map;
import org.tvbrowser.tvbrowser.R;
import org.tvbrowser.utils.PrefUtils;
import org.tvbrowser.utils.UiUtils;
import android.content.SharedPreferences;
import android.content.res.Resources.Theme;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
/**
* An activity to edit the available filters.
* <p>
* @author René Mach
*/
public class ActivityFilterListEdit extends AppCompatActivity {
private ListView mFilterList;
private ArrayAdapter<FilterValues> mFilterListAdapter;
@Override
protected void onApplyThemeResource(Theme theme, int resid, boolean first) {
resid = UiUtils.getThemeResourceId();
super.onApplyThemeResource(theme, resid, first);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mFilterListAdapter = new ArrayAdapter<FilterValues>(ActivityFilterListEdit.this, android.R.layout.simple_list_item_1);
setContentView(R.layout.activity_filter_list_edit);
mFilterList = (ListView)findViewById(R.id.activity_edit_filter_list_list);
mFilterList.setAdapter(mFilterListAdapter);
SharedPreferences pref = PrefUtils.getSharedPreferences(PrefUtils.TYPE_PREFERENCES_FILTERS, ActivityFilterListEdit.this);
Map<String,?> filterValues = pref.getAll();
for(String key : filterValues.keySet()) {
Object values = filterValues.get(key);
if(key.contains("filter.") && values instanceof String && values != null) {
FilterValues filter = FilterValues.load(key, (String)values);
if(filter != null) {
mFilterListAdapter.add(filter);
}
}
}
mFilterListAdapter.sort(FilterValues.COMPARATOR_FILTER_VALUES);
mFilterListAdapter.notifyDataSetChanged();
registerForContextMenu(mFilterList);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_filter_list_edit_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.activity_edit_filter_list_action_channel_add: addFilter(new FilterValuesChannels());break;
case R.id.activity_edit_filter_list_action_categories_add: addFilter(new FilterValuesCategories());break;
case R.id.activity_edit_filter_list_action_keyword_add: addFilter(new FilterValuesKeyword());break;
}
return true;
}
public void ok(View view) {
finish();
}
private FilterValues mCurrentFilter = null;
public void addFilter(FilterValues filter) {
mCurrentFilter = filter;
mCurrentFilter.edit(ActivityFilterListEdit.this, new Runnable() {
@Override
public void run() {
mFilterListAdapter.add(mCurrentFilter);
mCurrentFilter.save(getApplicationContext());
mCurrentFilter = null;
mFilterListAdapter.sort(FilterValues.COMPARATOR_FILTER_VALUES);
mFilterListAdapter.notifyDataSetChanged();
}
}, mFilterList);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
mCurrentFilter = (FilterValues)mFilterList.getItemAtPosition(((AdapterView.AdapterContextMenuInfo)menuInfo).position);
getMenuInflater().inflate(R.menu.activity_edit_filter_list_context, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
if(mCurrentFilter != null) {
if(item.getItemId() == R.id.activity_edit_filter_list_action_edit) {
mCurrentFilter.edit(ActivityFilterListEdit.this, new Runnable() {
@Override
public void run() {
mCurrentFilter.save(getApplicationContext());
mCurrentFilter = null;
mFilterListAdapter.sort(FilterValues.COMPARATOR_FILTER_VALUES);
mFilterListAdapter.notifyDataSetChanged();
}
}, mFilterList);
}
else if(item.getItemId() == R.id.activity_edit_filter_list_action_delete) {
mFilterListAdapter.remove(mCurrentFilter);
mFilterListAdapter.notifyDataSetChanged();
FilterValues.deleteFilter(getApplicationContext(), mCurrentFilter);
mCurrentFilter = null;
}
return true;
}
return false;
}
}