From 72a8b558e6459c0a6631fb16ad34011dbef426d8 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 6 Dec 2011 09:03:55 +0300 Subject: code cleanup, use separate menu for offline mode, start implementing menu actions --- res/menu/main_menu.xml | 7 -- res/menu/offline_menu.xml | 115 +++++++++++++++++ src/org/fox/ttrss/MainActivity.java | 18 ++- src/org/fox/ttrss/OfflineActivity.java | 157 ++++++++++++++++++++---- src/org/fox/ttrss/OfflineArticleFragment.java | 2 +- src/org/fox/ttrss/OfflineFeedsFragment.java | 12 +- src/org/fox/ttrss/OfflineHeadlinesFragment.java | 31 +++-- 7 files changed, 275 insertions(+), 67 deletions(-) create mode 100644 res/menu/offline_menu.xml diff --git a/res/menu/main_menu.xml b/res/menu/main_menu.xml index 04835d49..8101530a 100644 --- a/res/menu/main_menu.xml +++ b/res/menu/main_menu.xml @@ -1,12 +1,5 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/org/fox/ttrss/MainActivity.java b/src/org/fox/ttrss/MainActivity.java index 21d6b3f5..37297782 100644 --- a/src/org/fox/ttrss/MainActivity.java +++ b/src/org/fox/ttrss/MainActivity.java @@ -696,10 +696,7 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe @SuppressWarnings("unchecked") @Override public boolean onOptionsItemSelected(MenuItem item) { - HeadlinesFragment hf = null; - - if (m_sessionId != null) - hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentById(R.id.headlines_fragment); + final HeadlinesFragment hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentById(R.id.headlines_fragment); switch (item.getItemId()) { case R.id.preferences: @@ -732,7 +729,6 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe return true; case R.id.headlines_select: if (hf != null) { - final HeadlinesFragment fhf = hf; Dialog dialog = new Dialog(this); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.headlines_select_dialog); @@ -743,13 +739,13 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: - fhf.setSelection(HeadlinesFragment.ArticlesSelection.ALL); + hf.setSelection(HeadlinesFragment.ArticlesSelection.ALL); break; case 1: - fhf.setSelection(HeadlinesFragment.ArticlesSelection.UNREAD); + hf.setSelection(HeadlinesFragment.ArticlesSelection.UNREAD); break; case 2: - fhf.setSelection(HeadlinesFragment.ArticlesSelection.NONE); + hf.setSelection(HeadlinesFragment.ArticlesSelection.NONE); break; } dialog.cancel(); @@ -1014,13 +1010,13 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe m_menu.setGroupVisible(R.id.menu_group_article, false); m_menu.setGroupVisible(R.id.menu_group_headlines_selection, false); - if (m_isOffline) { + /* if (m_isOffline) { m_menu.setGroupVisible(R.id.menu_group_logged_out, false); m_menu.findItem(R.id.go_online).setVisible(true); - } else { + } else { */ m_menu.setGroupVisible(R.id.menu_group_logged_out, true); - } + //} } } } diff --git a/src/org/fox/ttrss/OfflineActivity.java b/src/org/fox/ttrss/OfflineActivity.java index 8fbceb0f..8df855d8 100644 --- a/src/org/fox/ttrss/OfflineActivity.java +++ b/src/org/fox/ttrss/OfflineActivity.java @@ -13,6 +13,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageInfo; +import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteStatement; import android.net.ConnectivityManager; @@ -51,8 +52,8 @@ public class OfflineActivity extends FragmentActivity { private boolean m_compatMode = false; private boolean m_enableCats = false; - private int m_activeOfflineFeedId = 0; - private int m_selectedOfflineArticleId = 0; + private int m_activeFeedId = 0; + private int m_selectedArticleId = 0; private SQLiteDatabase m_readableDb; private SQLiteDatabase m_writableDb; @@ -82,8 +83,8 @@ public class OfflineActivity extends FragmentActivity { if (savedInstanceState != null) { m_unreadOnly = savedInstanceState.getBoolean("unreadOnly"); m_unreadArticlesOnly = savedInstanceState.getBoolean("unreadArticlesOnly"); - m_activeOfflineFeedId = savedInstanceState.getInt("offlineActiveFeedId"); - m_selectedOfflineArticleId = savedInstanceState.getInt("offlineArticleId"); + m_activeFeedId = savedInstanceState.getInt("offlineActiveFeedId"); + m_selectedArticleId = savedInstanceState.getInt("offlineArticleId"); } m_enableCats = m_prefs.getBoolean("enable_cats", false); @@ -119,7 +120,7 @@ public class OfflineActivity extends FragmentActivity { findViewById(R.id.loading_container).setVisibility(View.INVISIBLE); findViewById(R.id.main).setVisibility(View.VISIBLE); - if (m_activeOfflineFeedId == 0) { + if (m_activeFeedId == 0) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); OfflineFeedsFragment frag = new OfflineFeedsFragment(); ft.replace(R.id.feeds_fragment, frag); @@ -154,7 +155,7 @@ public class OfflineActivity extends FragmentActivity { } public int getActiveOfflineFeedId() { - return m_activeOfflineFeedId; + return m_activeFeedId; } public void setLoadingStatus(int status, boolean showProgress) { @@ -177,8 +178,23 @@ public class OfflineActivity extends FragmentActivity { out.putBoolean("unreadOnly", m_unreadOnly); out.putBoolean("unreadArticlesOnly", m_unreadArticlesOnly); - out.putInt("offlineActiveFeedId", m_activeOfflineFeedId); - out.putInt("offlineArticleId", m_selectedOfflineArticleId); + out.putInt("offlineActiveFeedId", m_activeFeedId); + out.putInt("offlineArticleId", m_selectedArticleId); + } + + public void setUnreadOnly(boolean unread) { + m_unreadOnly = unread; + + refreshFeeds(); + + /*if (!m_enableCats || m_activeCategory != null ) + refreshFeeds(); + else + refreshCategories(); */ + } + + public boolean getUnreadOnly() { + return m_unreadOnly; } @Override @@ -198,7 +214,7 @@ public class OfflineActivity extends FragmentActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.main_menu, menu); + inflater.inflate(R.menu.offline_menu, menu); m_menu = menu; @@ -206,11 +222,11 @@ public class OfflineActivity extends FragmentActivity { MenuItem item = menu.findItem(R.id.show_feeds); - /* if (getUnreadOnly()) { + if (getUnreadOnly()) { item.setTitle(R.string.menu_all_feeds); } else { item.setTitle(R.string.menu_unread_feeds); - } */ + } return true; } @@ -228,9 +244,9 @@ public class OfflineActivity extends FragmentActivity { if (keyCode == KeyEvent.KEYCODE_BACK) { if (m_smallScreenMode) { - if (m_selectedOfflineArticleId != 0) { + if (m_selectedArticleId != 0) { closeArticle(); - } else if (m_activeOfflineFeedId != 0) { + } else if (m_activeFeedId != 0) { if (m_compatMode) { findViewById(R.id.main).setAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_right)); } @@ -244,14 +260,14 @@ public class OfflineActivity extends FragmentActivity { findViewById(R.id.headlines_fragment).setVisibility(View.GONE); findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE); //} - m_activeOfflineFeedId = 0; + m_activeFeedId = 0; initMainMenu(); } else { finish(); } } else { - if (m_selectedOfflineArticleId != 0) { + if (m_selectedArticleId != 0) { closeArticle(); } else { finish(); @@ -263,7 +279,33 @@ public class OfflineActivity extends FragmentActivity { return super.onKeyDown(keyCode, event); } - @SuppressWarnings("unchecked") + public Cursor getArticleById(int articleId) { + Cursor c = getReadableDb().query("articles", null, BaseColumns._ID + "=?", + new String[] { String.valueOf(articleId) }, null, null, null); + + c.moveToFirst(); + + return c; + } + + public void shareArticle(int articleId) { + + Cursor article = getArticleById(articleId); + + if (article.isFirst()) { + Intent intent = new Intent(Intent.ACTION_SEND); + + intent.setType("text/plain"); + intent.putExtra(Intent.EXTRA_SUBJECT, article.getString(article.getColumnIndex("title"))); + intent.putExtra(Intent.EXTRA_TEXT, article.getString(article.getColumnIndex("link"))); + + startActivity(Intent.createChooser(intent, getString(R.id.share_article))); + } + + article.close(); + } + + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { @@ -273,6 +315,19 @@ public class OfflineActivity extends FragmentActivity { return true; case R.id.go_online: switchOnline(); + return true; + case R.id.share_article: + shareArticle(m_selectedArticleId); + return true; + case R.id.show_feeds: + setUnreadOnly(!getUnreadOnly()); + + if (getUnreadOnly()) { + item.setTitle(R.string.menu_all_feeds); + } else { + item.setTitle(R.string.menu_unread_feeds); + } + return true; default: Log.d(TAG, "onOptionsItemSelected, unhandled id=" + item.getItemId()); @@ -281,7 +336,11 @@ public class OfflineActivity extends FragmentActivity { } public void refreshFeeds() { - // TODO + OfflineFeedsFragment frag = (OfflineFeedsFragment)getSupportFragmentManager().findFragmentById(R.id.feeds_fragment); + + if (frag != null) { + frag.refresh(); + } } private void closeArticle() { @@ -297,7 +356,7 @@ public class OfflineActivity extends FragmentActivity { } - m_selectedOfflineArticleId = 0; + m_selectedArticleId = 0; initMainMenu(); refreshFeeds(); @@ -306,13 +365,57 @@ public class OfflineActivity extends FragmentActivity { public void initMainMenu() { if (m_menu != null) { - m_menu.setGroupVisible(R.id.menu_group_logged_in, false); m_menu.setGroupVisible(R.id.menu_group_feeds, false); m_menu.setGroupVisible(R.id.menu_group_headlines, false); m_menu.setGroupVisible(R.id.menu_group_article, false); m_menu.setGroupVisible(R.id.menu_group_headlines_selection, false); - - m_menu.setGroupVisible(R.id.menu_group_logged_out, false); + + if (m_selectedArticleId != 0) { + m_menu.setGroupVisible(R.id.menu_group_article, true); + + m_menu.setGroupVisible(R.id.menu_group_feeds, false); + + if (m_smallScreenMode) { + m_menu.setGroupVisible(R.id.menu_group_headlines, false); + m_menu.setGroupVisible(R.id.menu_group_headlines_selection, false); + } else { + m_menu.setGroupVisible(R.id.menu_group_headlines, true); + } + + } else { + if (m_activeFeedId != 0) { + + OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment)getSupportFragmentManager().findFragmentById(R.id.headlines_fragment); + + if (hf != null) { + int numSelected = hf.getSelectedArticles().size(); + + if (numSelected != 0) { + m_menu.setGroupVisible(R.id.menu_group_headlines, false); + m_menu.setGroupVisible(R.id.menu_group_headlines_selection, true); + } else { + m_menu.setGroupVisible(R.id.menu_group_headlines, true); + m_menu.setGroupVisible(R.id.menu_group_headlines_selection, false); + } + + } else { + m_menu.setGroupVisible(R.id.menu_group_headlines, true); + m_menu.setGroupVisible(R.id.menu_group_headlines_selection, false); + } + + m_menu.setGroupVisible(R.id.menu_group_feeds, false); + } else { + m_menu.setGroupVisible(R.id.menu_group_feeds, true); + } + + if (!m_smallScreenMode || m_activeFeedId == 0) { + m_menu.findItem(R.id.show_feeds).setVisible(true); + } + + //m_menu.findItem(R.id.back_to_categories).setVisible(m_activeCategory != null); + m_menu.findItem(R.id.back_to_categories).setVisible(false); + + } m_menu.findItem(R.id.go_online).setVisible(true); } } @@ -403,8 +506,8 @@ public class OfflineActivity extends FragmentActivity { } } */ - public void offlineViewFeed(int feedId) { - m_activeOfflineFeedId = feedId; + public void viewFeed(int feedId) { + m_activeFeedId = feedId; initMainMenu(); @@ -420,8 +523,8 @@ public class OfflineActivity extends FragmentActivity { } - public void openOfflineArticle(int articleId, int compatAnimation) { - m_selectedOfflineArticleId = articleId; + public void openArticle(int articleId, int compatAnimation) { + m_selectedArticleId = articleId; initMainMenu(); @@ -456,7 +559,7 @@ public class OfflineActivity extends FragmentActivity { } - public int getSelectedOfflineArticleId() { - return m_selectedOfflineArticleId; + public int getSelectedArticleId() { + return m_selectedArticleId; } } \ No newline at end of file diff --git a/src/org/fox/ttrss/OfflineArticleFragment.java b/src/org/fox/ttrss/OfflineArticleFragment.java index 43e84d3b..ac7febf8 100644 --- a/src/org/fox/ttrss/OfflineArticleFragment.java +++ b/src/org/fox/ttrss/OfflineArticleFragment.java @@ -205,7 +205,7 @@ public class OfflineArticleFragment extends Fragment implements OnClickListener m_prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()); - m_articleId = ((OfflineActivity)activity).getSelectedOfflineArticleId(); + m_articleId = ((OfflineActivity)activity).getSelectedArticleId(); /* m_articleOps = (ArticleOps)activity; m_article = m_articleOps.getSelectedArticle(); diff --git a/src/org/fox/ttrss/OfflineFeedsFragment.java b/src/org/fox/ttrss/OfflineFeedsFragment.java index a279d956..d5350e92 100644 --- a/src/org/fox/ttrss/OfflineFeedsFragment.java +++ b/src/org/fox/ttrss/OfflineFeedsFragment.java @@ -54,14 +54,18 @@ public class OfflineFeedsFragment extends Fragment implements OnItemClickListene } public Cursor createCursor() { - if (m_cursor != null) m_cursor.close(); + String unreadOnly = ((OfflineActivity)getActivity()).getUnreadOnly() ? "unread > 0" : null; return ((OfflineActivity)getActivity()).getReadableDb().query("feeds_unread", - null, null, null, null, null, "title"); + null, unreadOnly, null, null, null, "title"); } public void refresh() { - m_adapter.changeCursor(createCursor()); + if (m_cursor != null) m_cursor.close(); + + m_cursor = createCursor(); + + m_adapter.changeCursor(m_cursor); m_adapter.notifyDataSetChanged(); } @@ -127,7 +131,7 @@ public class OfflineFeedsFragment extends Fragment implements OnItemClickListene int feedId = (int) cursor.getLong(0); Log.d(TAG, "clicked on feed " + feedId); - ((OfflineActivity)getActivity()).offlineViewFeed(feedId); + ((OfflineActivity)getActivity()).viewFeed(feedId); m_selectedFeedId = feedId; diff --git a/src/org/fox/ttrss/OfflineHeadlinesFragment.java b/src/org/fox/ttrss/OfflineHeadlinesFragment.java index 0de70235..f6b36b63 100644 --- a/src/org/fox/ttrss/OfflineHeadlinesFragment.java +++ b/src/org/fox/ttrss/OfflineHeadlinesFragment.java @@ -54,8 +54,6 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis private Cursor m_cursor; private ArticleListAdapter m_adapter; - private ArticleOps m_articleOps; - private ImageGetter m_dummyGetter = new ImageGetter() { @Override @@ -97,7 +95,11 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis } public void refresh() { - m_adapter.changeCursor(createCursor()); + if (m_cursor != null) m_cursor.close(); + + m_cursor = createCursor(); + + m_adapter.changeCursor(m_cursor); m_adapter.notifyDataSetChanged(); } @@ -129,8 +131,6 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis } public Cursor createCursor() { - if (m_cursor != null) m_cursor.close(); - return ((OfflineActivity)getActivity()).getReadableDb().query("articles", null, "feed_id = ?", new String[] { String.valueOf(m_feedId) }, null, null, "updated DESC"); } @@ -140,7 +140,6 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis super.onAttach(activity); m_feedId = ((OfflineActivity)activity).getActiveOfflineFeedId(); m_prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()); - m_articleOps = (ArticleOps) activity; m_combinedMode = m_prefs.getBoolean("combined_mode", false); } @@ -154,21 +153,19 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis Cursor cursor = (Cursor)list.getItemAtPosition(position); m_activeArticleId = cursor.getInt(0); + + SQLiteStatement stmtUpdate = ((OfflineActivity)getActivity()).getWritableDb().compileStatement("UPDATE articles SET unread = 0 " + + "WHERE " + BaseColumns._ID + " = ?"); - if (m_combinedMode) { - SQLiteStatement stmtUpdate = ((OfflineActivity)getActivity()).getWritableDb().compileStatement("UPDATE articles SET unread = 0 " + - "WHERE " + BaseColumns._ID + " = ?"); - - stmtUpdate.bindLong(1, m_activeArticleId); - stmtUpdate.execute(); - stmtUpdate.close(); + stmtUpdate.bindLong(1, m_activeArticleId); + stmtUpdate.execute(); + stmtUpdate.close(); - refresh(); - } else { - ((OfflineActivity)getActivity()).openOfflineArticle(m_activeArticleId, 0); + if (!m_combinedMode) { + ((OfflineActivity)getActivity()).openArticle(m_activeArticleId, 0); } - + refresh(); } } -- cgit v1.2.3