diff options
author | Camil Staps | 2015-05-21 15:04:06 +0200 |
---|---|---|
committer | Camil Staps | 2015-05-21 15:04:06 +0200 |
commit | 80b9f701b3540e1069ce1c55ef3b056f95844292 (patch) | |
tree | 2d5d7bd7194d7805d4e5f8ca3ef8cde4b5890132 /app/src/main/java/org | |
parent | Nicer text sizes; dimensions in dimens.xml (diff) |
Edit filter title; add keywords
Diffstat (limited to 'app/src/main/java/org')
5 files changed, 125 insertions, 22 deletions
diff --git a/app/src/main/java/org/rssin/android/FilterSettingsActivity.java b/app/src/main/java/org/rssin/android/FilterSettingsActivity.java index ae31943..3034ea3 100644 --- a/app/src/main/java/org/rssin/android/FilterSettingsActivity.java +++ b/app/src/main/java/org/rssin/android/FilterSettingsActivity.java @@ -9,38 +9,58 @@ import android.content.DialogInterface; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; +import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; +import android.widget.Toast; import org.rssin.rssin.Feed; import org.rssin.rssin.Filter; import org.rssin.rssin.Keyword; import org.rssin.rssin.R; +import java.io.IOException; import java.util.List; public class FilterSettingsActivity extends ActionBarActivity { + private FiltersList filtersList; private Filter filter; + private KeywordAdapter keywordAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_filter_settings); + try { + filtersList = FiltersList.getInstance(this); + } catch (IOException e) { + Toast.makeText(this, "Something went wrong...", Toast.LENGTH_SHORT).show(); + } + Intent intent = getIntent(); - filter = (Filter) intent.getSerializableExtra("filter"); + int filterHashCode = intent.getIntExtra("filter", -1); + + // @todo Check on -1? Shouldn't happen anyway. + for (Filter f : filtersList.getFilters()) { + if (f.hashCode() == filterHashCode) { + filter = f; + break; + } + } - setTitle(getTitle() + ": " + filter.getTitle()); + setTitle(); - final KeywordAdapter fAdapter = new KeywordAdapter(this, R.layout.item_filter_settings_keyword, filter.getKeywords()); - ((ListView) findViewById(R.id.filter_settings_feeds_list)).setAdapter(fAdapter); + keywordAdapter = new KeywordAdapter(this, R.layout.item_filter_settings_keyword, filter.getKeywords()); + ((ListView) findViewById(R.id.filter_settings_feeds_list)).setAdapter(keywordAdapter); } @Override @@ -53,15 +73,27 @@ public class FilterSettingsActivity extends ActionBarActivity { public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); - if (id == R.id.action_feeds) { + if (id == R.id.filter_settings_action_feeds) { openFeedsDialog(); return true; + } else if (id == R.id.filter_settings_action_title) { + openTitleDialog(); + return true; } return super.onOptionsItemSelected(item); } /** + * Set the title according to the filter + */ + public void setTitle() { + if (filter != null) { + setTitle(getResources().getString(R.string.title_activity_filter_settings) + ": " + filter.getTitle()); + } + } + + /** * Open dialog to edit feeds */ public void openFeedsDialog() { @@ -73,6 +105,58 @@ public class FilterSettingsActivity extends ActionBarActivity { } /** + * Open dialog to edit title + */ + public void openTitleDialog() { + AlertDialog.Builder alert = new AlertDialog.Builder(this); + + alert.setTitle("Title"); + alert.setMessage("New title:"); + + final EditText input = new EditText(this); + input.setText(filter.getTitle()); + + alert + .setView(input) + .setPositiveButton(getResources().getString(R.string.button_apply), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + String value = input.getText().toString(); + try { + filtersList.save(); + filter.setTitle(value); + setTitle(); + } catch (IOException e) { + Toast.makeText(getBaseContext(), getResources().getString(R.string.error_save_filter), Toast.LENGTH_SHORT).show(); + } + } + }) + .setNegativeButton(getResources().getString(R.string.button_cancel), null) + .show(); + } + + /** + * Add keyword + * @param v ignored, used because this is an onClick method + */ + public void addKeyword(View v) { + EditText editText = (EditText) findViewById(R.id.filter_settings_add_keyword); + String keyword = editText.getText().toString(); + editText.setText(""); + + Keyword k = new Keyword(keyword); + filter.getKeywords().add(k); + try { + filtersList.save(); + keywordAdapter.notifyDataSetChanged(); + Log.d("FSA", "New keyword saved"); + } catch (IOException e) { + Log.e("FSA", "Couldn't save new keyword", e); + filter.getKeywords().remove(k); + keywordAdapter.notifyDataSetChanged(); + } + } + + /** * Custom Dialog to display & edit feeds */ public static class FeedsDialogFragment extends DialogFragment { @@ -87,12 +171,12 @@ public class FilterSettingsActivity extends ActionBarActivity { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage(R.string.filter_settings_feeds) - .setPositiveButton(R.string.filter_settings_edit_feeds_positive, new DialogInterface.OnClickListener() { + .setPositiveButton(R.string.button_apply, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // FIRE ZE MISSILES! } }) - .setNegativeButton(R.string.filter_settings_edit_feeds_negative, null); + .setNegativeButton(R.string.button_cancel, null); builder.setView(view); return builder.create(); diff --git a/app/src/main/java/org/rssin/android/FiltersActivity.java b/app/src/main/java/org/rssin/android/FiltersActivity.java index 07f20c2..74490c8 100644 --- a/app/src/main/java/org/rssin/android/FiltersActivity.java +++ b/app/src/main/java/org/rssin/android/FiltersActivity.java @@ -11,6 +11,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; +import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; @@ -48,20 +49,20 @@ public class FiltersActivity extends ActionBarActivity { filtersView = (ListView) findViewById(R.id.filters_list); try { - filters = new FiltersList(this); + filters = FiltersList.getInstance(this); } catch (IOException ex) { Toast.makeText(this, "Couldn't load filters.", Toast.LENGTH_SHORT).show(); Log.e("FILTER", "IOException", ex); - filters = new FiltersList(); + finish(); } - putDummyFilter(); + //putDummyFilter(); final FilterAdapter adapter = new FilterAdapter(this, R.layout.item_filter, filters.getFilters()); filtersView.setAdapter(adapter); try { - filters.save(this); + filters.save(); } catch (IOException ex) { Toast.makeText(this, "Couldn't save filters.", Toast.LENGTH_SHORT).show(); Log.e("FILTER", "IOException", ex); @@ -86,7 +87,7 @@ public class FiltersActivity extends ActionBarActivity { public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Filter item = (Filter) parent.getItemAtPosition(position); Intent intent = new Intent(getApplicationContext(), FilterSettingsActivity.class); - intent.putExtra("filter", item); + intent.putExtra("filter", item.hashCode()); startActivity(intent); return true; } diff --git a/app/src/main/java/org/rssin/android/FiltersList.java b/app/src/main/java/org/rssin/android/FiltersList.java index cf85b47..3a88f0c 100644 --- a/app/src/main/java/org/rssin/android/FiltersList.java +++ b/app/src/main/java/org/rssin/android/FiltersList.java @@ -3,6 +3,7 @@ package org.rssin.android; import android.content.Context; import android.preference.PreferenceManager; import android.util.Base64; +import android.widget.Toast; import org.rssin.rssin.Filter; @@ -21,14 +22,18 @@ import java.util.List; public class FiltersList { private static final String PREF_KEY = "filters_list"; + + private static FiltersList instance; + private final List<Filter> filters; + private final Context context; /** * Fetch from sharedPreferences * @param context * @throws IOException if data is corrupted, and deserializing fails */ - public FiltersList(Context context) throws IOException { + protected FiltersList(Context context) throws IOException { String filters = PreferenceManager.getDefaultSharedPreferences(context).getString(PREF_KEY, null); if (filters == null) { this.filters = new ArrayList<>(); @@ -42,14 +47,13 @@ public class FiltersList { } this.filters = filters_list; } + this.context = context; } - public FiltersList(List<Filter> filters) { - this.filters = filters; - } - - public FiltersList() { - this.filters = new ArrayList<>(); + public static FiltersList getInstance(Context context) throws IOException { + if (instance == null) + instance = new FiltersList(context); + return instance; } public List<Filter> getFilters() { @@ -58,16 +62,14 @@ public class FiltersList { /** * Save in sharedPreferences - * @param context * @throws IOException if serializing failed */ - public void save(Context context) throws IOException { + public synchronized void save() throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(filters); oos.close(); String string = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); - PreferenceManager.getDefaultSharedPreferences(context).edit().putString(PREF_KEY, string).apply(); } } diff --git a/app/src/main/java/org/rssin/rssin/Feed.java b/app/src/main/java/org/rssin/rssin/Feed.java index 0abbd67..a2009ca 100644 --- a/app/src/main/java/org/rssin/rssin/Feed.java +++ b/app/src/main/java/org/rssin/rssin/Feed.java @@ -58,4 +58,9 @@ public class Feed implements Serializable { this.url = new URL(url); } + @Override + public String toString() { + return title + ": " + url.toString(); + } + } diff --git a/app/src/main/java/org/rssin/rssin/Filter.java b/app/src/main/java/org/rssin/rssin/Filter.java index f411ca3..c7915aa 100755 --- a/app/src/main/java/org/rssin/rssin/Filter.java +++ b/app/src/main/java/org/rssin/rssin/Filter.java @@ -79,4 +79,15 @@ public class Filter implements Serializable { public FeedSorter getSorter() { return sorter; } + + @Override + public int hashCode() { + StringBuilder sb = new StringBuilder(title); + for (Feed f : feeds) + sb.append(f.toString()); + for (Keyword k : keywords) + sb.append(k.toString()); + + return sb.toString().hashCode(); + } } |