From 4acc9ac37e3363552cebc7a37e16e254f9438f4d Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 10 Jun 2015 19:40:08 +0300 Subject: further refactoring --- org.fox.ttrss/src/main/AndroidManifest.xml | 10 +- .../src/main/java/org/fox/ttrss/Application.java | 69 +++ .../main/java/org/fox/ttrss/ArticleFragment.java | 10 +- .../org/fox/ttrss/ArticleImagesPagerActivity.java | 4 +- .../src/main/java/org/fox/ttrss/ArticlePager.java | 10 +- .../main/java/org/fox/ttrss/DetailActivity.java | 324 ++++++++++++ .../java/org/fox/ttrss/FeedCategoriesFragment.java | 6 +- .../src/main/java/org/fox/ttrss/FeedsActivity.java | 550 --------------------- .../src/main/java/org/fox/ttrss/FeedsFragment.java | 6 +- .../src/main/java/org/fox/ttrss/GlobalState.java | 70 --- .../main/java/org/fox/ttrss/HeadlinesActivity.java | 324 ------------ .../main/java/org/fox/ttrss/HeadlinesFragment.java | 30 +- .../main/java/org/fox/ttrss/MasterActivity.java | 550 +++++++++++++++++++++ .../main/java/org/fox/ttrss/OnlineActivity.java | 20 +- .../java/org/fox/ttrss/PreferencesActivity.java | 2 +- .../org/fox/ttrss/offline/OfflineActivity.java | 8 +- .../fox/ttrss/offline/OfflineArticleFragment.java | 8 +- .../fox/ttrss/offline/OfflineDetailActivity.java | 206 ++++++++ .../offline/OfflineFeedCategoriesFragment.java | 6 +- .../fox/ttrss/offline/OfflineFeedsActivity.java | 355 ------------- .../fox/ttrss/offline/OfflineFeedsFragment.java | 6 +- .../ttrss/offline/OfflineHeadlinesActivity.java | 206 -------- .../ttrss/offline/OfflineHeadlinesFragment.java | 10 +- .../fox/ttrss/offline/OfflineMasterActivity.java | 355 +++++++++++++ .../org/fox/ttrss/share/CommonShareActivity.java | 8 +- .../fox/ttrss/tasker/TaskerSettingsActivity.java | 4 +- .../fox/ttrss/util/FontSizeDialogPreference.java | 2 +- .../java/org/fox/ttrss/util/HeadlinesRequest.java | 4 +- .../res/layout-sw600dp-land/activity_detail.xml | 43 ++ .../activity_headlines_articles.xml | 43 -- .../res/layout-sw600dp-land/activity_master.xml | 44 ++ .../src/main/res/layout-sw600dp-land/headlines.xml | 44 -- .../res/layout-sw600dp-port/activity_detail.xml | 43 ++ .../activity_headlines_articles.xml | 43 -- .../src/main/res/layout/activity_detail.xml | 24 + .../res/layout/activity_headlines_articles.xml | 24 - .../src/main/res/layout/activity_login.xml | 17 + .../src/main/res/layout/activity_master.xml | 44 ++ .../src/main/res/layout/activity_preferences.xml | 22 + .../main/res/layout/dialog_select_font_size.xml | 22 - org.fox.ttrss/src/main/res/layout/headlines.xml | 44 -- org.fox.ttrss/src/main/res/layout/login.xml | 17 - org.fox.ttrss/src/main/res/layout/preferences.xml | 22 - .../main/res/layout/settings_select_font_size.xml | 22 + .../src/main/res/layout/settings_tasker.xml | 36 ++ .../src/main/res/layout/tasker_settings.xml | 36 -- .../src/main/res/menu/action_mode_headlines.xml | 21 + org.fox.ttrss/src/main/res/menu/activity_main.xml | 142 ++++++ .../src/main/res/menu/activity_offline.xml | 76 +++ org.fox.ttrss/src/main/res/menu/activity_share.xml | 9 + .../res/menu/article_content_img_context_menu.xml | 29 -- .../main/res/menu/article_link_context_menu.xml | 13 - org.fox.ttrss/src/main/res/menu/category_menu.xml | 22 - .../main/res/menu/context_article_content_img.xml | 29 ++ .../src/main/res/menu/context_article_link.xml | 13 + .../src/main/res/menu/context_category.xml | 22 + org.fox.ttrss/src/main/res/menu/context_feed.xml | 27 + .../src/main/res/menu/context_headlines.xml | 42 ++ org.fox.ttrss/src/main/res/menu/feed_menu.xml | 27 - .../src/main/res/menu/headlines_action_menu.xml | 21 - .../src/main/res/menu/headlines_context_menu.xml | 42 -- org.fox.ttrss/src/main/res/menu/main_menu.xml | 142 ------ org.fox.ttrss/src/main/res/menu/offline_menu.xml | 76 --- org.fox.ttrss/src/main/res/menu/share_menu.xml | 9 - 64 files changed, 2253 insertions(+), 2262 deletions(-) create mode 100644 org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java create mode 100644 org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsActivity.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/GlobalState.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesActivity.java create mode 100644 org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java create mode 100644 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineDetailActivity.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedsActivity.java delete mode 100644 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesActivity.java create mode 100644 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineMasterActivity.java create mode 100644 org.fox.ttrss/src/main/res/layout-sw600dp-land/activity_detail.xml delete mode 100644 org.fox.ttrss/src/main/res/layout-sw600dp-land/activity_headlines_articles.xml create mode 100644 org.fox.ttrss/src/main/res/layout-sw600dp-land/activity_master.xml delete mode 100644 org.fox.ttrss/src/main/res/layout-sw600dp-land/headlines.xml create mode 100644 org.fox.ttrss/src/main/res/layout-sw600dp-port/activity_detail.xml delete mode 100644 org.fox.ttrss/src/main/res/layout-sw600dp-port/activity_headlines_articles.xml create mode 100644 org.fox.ttrss/src/main/res/layout/activity_detail.xml delete mode 100644 org.fox.ttrss/src/main/res/layout/activity_headlines_articles.xml create mode 100644 org.fox.ttrss/src/main/res/layout/activity_login.xml create mode 100644 org.fox.ttrss/src/main/res/layout/activity_master.xml create mode 100644 org.fox.ttrss/src/main/res/layout/activity_preferences.xml delete mode 100644 org.fox.ttrss/src/main/res/layout/dialog_select_font_size.xml delete mode 100644 org.fox.ttrss/src/main/res/layout/headlines.xml delete mode 100755 org.fox.ttrss/src/main/res/layout/login.xml delete mode 100755 org.fox.ttrss/src/main/res/layout/preferences.xml create mode 100644 org.fox.ttrss/src/main/res/layout/settings_select_font_size.xml create mode 100644 org.fox.ttrss/src/main/res/layout/settings_tasker.xml delete mode 100644 org.fox.ttrss/src/main/res/layout/tasker_settings.xml create mode 100644 org.fox.ttrss/src/main/res/menu/action_mode_headlines.xml create mode 100644 org.fox.ttrss/src/main/res/menu/activity_main.xml create mode 100644 org.fox.ttrss/src/main/res/menu/activity_offline.xml create mode 100644 org.fox.ttrss/src/main/res/menu/activity_share.xml delete mode 100755 org.fox.ttrss/src/main/res/menu/article_content_img_context_menu.xml delete mode 100644 org.fox.ttrss/src/main/res/menu/article_link_context_menu.xml delete mode 100644 org.fox.ttrss/src/main/res/menu/category_menu.xml create mode 100644 org.fox.ttrss/src/main/res/menu/context_article_content_img.xml create mode 100644 org.fox.ttrss/src/main/res/menu/context_article_link.xml create mode 100644 org.fox.ttrss/src/main/res/menu/context_category.xml create mode 100644 org.fox.ttrss/src/main/res/menu/context_feed.xml create mode 100644 org.fox.ttrss/src/main/res/menu/context_headlines.xml delete mode 100644 org.fox.ttrss/src/main/res/menu/feed_menu.xml delete mode 100755 org.fox.ttrss/src/main/res/menu/headlines_action_menu.xml delete mode 100644 org.fox.ttrss/src/main/res/menu/headlines_context_menu.xml delete mode 100755 org.fox.ttrss/src/main/res/menu/main_menu.xml delete mode 100755 org.fox.ttrss/src/main/res/menu/offline_menu.xml delete mode 100755 org.fox.ttrss/src/main/res/menu/share_menu.xml (limited to 'org.fox.ttrss/src') diff --git a/org.fox.ttrss/src/main/AndroidManifest.xml b/org.fox.ttrss/src/main/AndroidManifest.xml index c87561ca..43f3931f 100755 --- a/org.fox.ttrss/src/main/AndroidManifest.xml +++ b/org.fox.ttrss/src/main/AndroidManifest.xml @@ -14,7 +14,7 @@ @@ -69,11 +69,11 @@ android:label="@string/app_name" > list = in.getParcelableArrayList("gs:loadedArticles"); + + for (Parcelable p : list) { + m_loadedArticles.add((Article)p); + } */ + + //m_activeFeed = (Feed) in.getParcelable("gs:activeFeed"); + //m_activeArticle = (Article) in.getParcelable("gs:activeArticle"); + m_sessionId = in.getString("gs:sessionId"); + m_apiLevel = in.getInt("gs:apiLevel"); + m_canUseProgress = in.getBoolean("gs:canUseProgress"); + m_selectedArticleId = in.getInt("gs:selectedArticleId"); + } + + } +} diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java index 9ad5103a..f09f2ef5 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java @@ -48,7 +48,7 @@ public class ArticleFragment extends Fragment { private SharedPreferences m_prefs; private Article m_article; - private HeadlinesActivity m_activity; + private DetailActivity m_activity; private WebView m_web; protected View m_customView; protected FrameLayout m_customViewContainer; @@ -136,7 +136,7 @@ public class ArticleFragment extends Fragment { if (result != null && (result.getType() == HitTestResult.IMAGE_TYPE || result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE)) { menu.setHeaderTitle(result.getExtra()); - getActivity().getMenuInflater().inflate(R.menu.article_content_img_context_menu, menu); + getActivity().getMenuInflater().inflate(R.menu.context_article_content_img, menu); /* FIXME I have no idea how to do this correctly ;( */ @@ -144,11 +144,11 @@ public class ArticleFragment extends Fragment { } else { menu.setHeaderTitle(m_article.title); - getActivity().getMenuInflater().inflate(R.menu.article_link_context_menu, menu); + getActivity().getMenuInflater().inflate(R.menu.context_article_link, menu); } } else { menu.setHeaderTitle(m_article.title); - getActivity().getMenuInflater().inflate(R.menu.article_link_context_menu, menu); + getActivity().getMenuInflater().inflate(R.menu.context_article_link, menu); } super.onCreateContextMenu(menu, v, menuInfo); @@ -586,7 +586,7 @@ public class ArticleFragment extends Fragment { super.onAttach(activity); m_prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()); - m_activity = (HeadlinesActivity)activity; + m_activity = (DetailActivity)activity; } } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java index 2d35bb80..0f7059ad 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java @@ -341,7 +341,7 @@ public class ArticleImagesPagerActivity extends CommonActivity implements Gestur public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - getMenuInflater().inflate(R.menu.article_content_img_context_menu, menu); + getMenuInflater().inflate(R.menu.context_article_content_img, menu); super.onCreateContextMenu(menu, v, menuInfo); } @@ -358,7 +358,7 @@ public class ArticleImagesPagerActivity extends CommonActivity implements Gestur @Override public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.article_content_img_context_menu, menu); + getMenuInflater().inflate(R.menu.context_article_content_img, menu); return true; diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java index fce8f895..da023d64 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java @@ -31,7 +31,7 @@ public class ArticlePager extends Fragment { private PagerAdapter m_adapter; private HeadlinesEventListener m_listener; private Article m_article; - private ArticleList m_articles = new ArticleList(); //m_articles = GlobalState.getInstance().m_loadedArticles; + private ArticleList m_articles = new ArticleList(); //m_articles = Application.getInstance().m_loadedArticles; private OnlineActivity m_activity; private String m_searchQuery = ""; private Feed m_feed; @@ -79,7 +79,7 @@ public class ArticlePager extends Fragment { if (savedInstanceState != null) { m_article = savedInstanceState.getParcelable("article"); - m_articles = ((HeadlinesActivity)m_activity).m_articles; + m_articles = ((DetailActivity)m_activity).m_articles; m_feed = savedInstanceState.getParcelable("feed"); } @@ -138,7 +138,7 @@ public class ArticlePager extends Fragment { @SuppressWarnings({ "serial" }) protected void refresh(boolean append) { - /* if (!m_feed.equals(GlobalState.getInstance().m_activeFeed)) { + /* if (!m_feed.equals(Application.getInstance().m_activeFeed)) { append = false; } */ @@ -274,9 +274,9 @@ public class ArticlePager extends Fragment { public void onResume() { super.onResume(); - /* if (m_articles.size() == 0 || !m_feed.equals(GlobalState.getInstance().m_activeFeed)) { + /* if (m_articles.size() == 0 || !m_feed.equals(Application.getInstance().m_activeFeed)) { refresh(false); - GlobalState.getInstance().m_activeFeed = m_feed; + Application.getInstance().m_activeFeed = m_feed; } */ if (m_adapter != null) m_adapter.notifyDataSetChanged(); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java new file mode 100644 index 00000000..8c7538a7 --- /dev/null +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java @@ -0,0 +1,324 @@ +package org.fox.ttrss; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.os.Bundle; +import android.os.Handler; +import android.preference.PreferenceManager; +import android.support.v4.app.FragmentTransaction; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; + +import org.fox.ttrss.types.Article; +import org.fox.ttrss.types.ArticleList; +import org.fox.ttrss.types.Feed; + +public class DetailActivity extends OnlineActivity implements HeadlinesEventListener { + private final String TAG = this.getClass().getSimpleName(); + protected ArticleList m_articles = new ArticleList(); + + protected SharedPreferences m_prefs; + private Article m_activeArticle; + + @SuppressLint("NewApi") + @Override + public void onCreate(Bundle savedInstanceState) { + m_prefs = PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()); + + setAppTheme(m_prefs); + + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_detail); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + m_forceDisableActionMode = isPortrait() || isSmallScreen(); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setHomeButtonEnabled(true); + + setSmallScreen(findViewById(R.id.sw600dp_anchor) == null); + + Application.getInstance().load(savedInstanceState); + + if (isPortrait() && !isSmallScreen()) { + findViewById(R.id.headlines_fragment).setVisibility(View.GONE); + } + + if (savedInstanceState != null) { + m_articles = savedInstanceState.getParcelable("articles"); + } else { + Intent i = getIntent(); + + if (i.getExtras() != null) { + boolean shortcutMode = i.getBooleanExtra("shortcut_mode", false); + + Log.d(TAG, "is_shortcut_mode: " + shortcutMode); + + Feed tmpFeed; + + if (shortcutMode) { + int feedId = i.getIntExtra("feed_id", 0); + boolean isCat = i.getBooleanExtra("feed_is_cat", false); + String feedTitle = i.getStringExtra("feed_title"); + + tmpFeed = new Feed(feedId, feedTitle, isCat); + + //Application.getInstance().m_loadedArticles.clear(); + } else { + tmpFeed = i.getParcelableExtra("feed"); + } + + final Feed feed = tmpFeed; + + final Article article = i.getParcelableExtra("article"); + final String searchQuery = i.getStringExtra("searchQuery"); + + ArticleList tmp = Application.getInstance().tmpArticleList; + + if (tmp != null) { + m_articles.addAll(tmp); + } + + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + + final HeadlinesFragment hf = new HeadlinesFragment(); + hf.initialize(feed, article, true, m_articles); + hf.setSearchQuery(searchQuery); + + ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); + ft.replace(R.id.article_fragment, new LoadingFragment(), null); + + ft.commit(); + + setTitle(feed.title); + + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + + ArticlePager af = new ArticlePager(); + af.initialize(article != null ? hf.getArticleById(article.id) : new Article(), feed, m_articles); + af.setSearchQuery(searchQuery); + + ft.replace(R.id.article_fragment, af, FRAG_ARTICLE); + + ft.commit(); + } + }, 100); + } + } + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + + if (!isSmallScreen()) { + findViewById(R.id.headlines_fragment).setVisibility(isPortrait() ? View.GONE : View.VISIBLE); + } + + m_forceDisableActionMode = isPortrait() || isSmallScreen(); + invalidateOptionsMenu(); + } + + @Override + protected void refresh() { + super.refresh(); + + + } + + @Override + protected void loginSuccess(boolean refresh) { + Log.d(TAG, "loginSuccess"); + + invalidateOptionsMenu(); + + if (refresh) refresh(); + } + + @Override + public void onSaveInstanceState(Bundle out) { + super.onSaveInstanceState(out); + + out.putParcelable("articles", m_articles); + + Application.getInstance().save(out); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + onBackPressed(); + return true; + default: + Log.d(TAG, "onOptionsItemSelected, unhandled id=" + item.getItemId()); + return super.onOptionsItemSelected(item); + } + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + protected void initMenu() { + super.initMenu(); + + if (m_menu != null && getSessionId() != null) { + m_menu.setGroupVisible(R.id.menu_group_feeds, false); + + //HeadlinesFragment hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + + m_menu.setGroupVisible(R.id.menu_group_headlines, !isPortrait() && !isSmallScreen()); + //m_menu.findItem(R.id.headlines_toggle_sidebar).setVisible(!isPortrait() && !isSmallScreen()); + + ArticlePager af = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); + + m_menu.setGroupVisible(R.id.menu_group_article, af != null); + + if (af != null) { + if (af.getSelectedArticle() != null && af.getSelectedArticle().attachments != null && af.getSelectedArticle().attachments.size() > 0) { + /* if (!isCompatMode() && (isSmallScreen() || !isPortrait())) { + m_menu.findItem(R.id.toggle_attachments).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + } */ + m_menu.findItem(R.id.toggle_attachments).setVisible(true); + } else { + /* if (!isCompatMode()) { + m_menu.findItem(R.id.toggle_attachments).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); + } */ + m_menu.findItem(R.id.toggle_attachments).setVisible(false); + } + } + + m_menu.findItem(R.id.search).setVisible(false); + } + } + + @Override + public void onArticleListSelectionChange(ArticleList m_selectedArticles) { + invalidateOptionsMenu(); + } + + @Override + public void onArticleSelected(Article article) { + onArticleSelected(article, true); + } + + @Override + public void onArticleSelected(Article article, boolean open) { + + if (article == null) return; + + if (article.unread) { + article.unread = false; + saveArticleUnread(article); + } + + if (!getSupportActionBar().isShowing()) getSupportActionBar().show(); + + if (open) { + + final Article fArticle = article; + + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + ArticlePager af = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); + + if (af != null) { + af.setActiveArticle(fArticle); + } + } + }, 10); + + } else { + HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + if (hf != null) { + hf.setActiveArticle(article); + } + } + + m_activeArticle = article; + + //Application.getInstance().m_activeArticle = article; + + invalidateOptionsMenu(); + + } + + public void showSidebar(boolean show) { + if (!isSmallScreen() && !isPortrait()) { + findViewById(R.id.headlines_fragment).setVisibility(show ? View.VISIBLE : View.GONE); + invalidateOptionsMenu(); + } + } + + @Override + public void onHeadlinesLoaded(boolean appended) { + HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + ArticlePager ap = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); + + if (ap != null) { + ap.notifyUpdated(); + } + + if (hf != null) { + Article article = hf.getActiveArticle(); + + if (article == null && hf.getAllArticles().size() > 0) { + article = hf.getAllArticles().get(0); + + hf.setActiveArticle(article); + + FragmentTransaction ft = getSupportFragmentManager() + .beginTransaction(); + + ft.replace(R.id.article_fragment, new LoadingFragment(), null); + + ft.commitAllowingStateLoss(); + + final Article fArticle = article; + final Feed fFeed = hf.getFeed(); + + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + FragmentTransaction ft = getSupportFragmentManager() + .beginTransaction(); + + ArticlePager af = new ArticlePager(); + af.initialize(fArticle, fFeed, m_articles); + + ft.replace(R.id.article_fragment, af, FRAG_ARTICLE); + ft.commitAllowingStateLoss(); + } + }, 10); + } + } + } + + @Override + public void onBackPressed() { + Intent resultIntent = new Intent(); + + Application.getInstance().tmpArticleList = m_articles; + resultIntent.putExtra("activeArticle", m_activeArticle); + + setResult(Activity.RESULT_OK, resultIntent); + + super.onBackPressed(); + } +} diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java index ea7f7f1e..1ff6aa1d 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java @@ -48,7 +48,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt private FeedCategoryListAdapter m_adapter; private FeedCategoryList m_cats = new FeedCategoryList(); private FeedCategory m_selectedCat; - private FeedsActivity m_activity; + private MasterActivity m_activity; private SwipeRefreshLayout m_swipeLayout; private ListView m_list; protected SharedPreferences m_prefs; @@ -173,7 +173,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { - m_activity.getMenuInflater().inflate(R.menu.category_menu, menu); + m_activity.getMenuInflater().inflate(R.menu.context_category, menu); AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; FeedCategory cat = (FeedCategory) m_list.getItemAtPosition(info.position); @@ -237,7 +237,7 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt public void onAttach(Activity activity) { super.onAttach(activity); - m_activity = (FeedsActivity)activity; + m_activity = (MasterActivity)activity; m_prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()); m_prefs.registerOnSharedPreferenceChangeListener(this); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsActivity.java deleted file mode 100755 index 5aafce6b..00000000 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsActivity.java +++ /dev/null @@ -1,550 +0,0 @@ -package org.fox.ttrss; - - -import android.annotation.SuppressLint; -import android.app.AlertDialog; -import android.app.Dialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.widget.Toolbar; -import android.util.Log; -import android.view.Gravity; -import android.view.MenuItem; -import android.view.View; - -import com.google.gson.JsonElement; - -import org.fox.ttrss.types.Article; -import org.fox.ttrss.types.ArticleList; -import org.fox.ttrss.types.Feed; -import org.fox.ttrss.types.FeedCategory; -import org.fox.ttrss.widget.SmallWidgetProvider; - -import java.util.Date; -import java.util.HashMap; - -public class FeedsActivity extends OnlineActivity implements HeadlinesEventListener { - private final String TAG = this.getClass().getSimpleName(); - - private static final int HEADLINES_REQUEST = 1; - - protected SharedPreferences m_prefs; - protected long m_lastRefresh = 0; - - private boolean m_feedIsSelected = false; - private boolean m_userFeedSelected = false; - - private ActionBarDrawerToggle m_drawerToggle; - private DrawerLayout m_drawerLayout; - - @SuppressLint("NewApi") - @Override - public void onCreate(Bundle savedInstanceState) { - m_prefs = PreferenceManager - .getDefaultSharedPreferences(getApplicationContext()); - - setAppTheme(m_prefs); - - super.onCreate(savedInstanceState); - - setContentView(R.layout.headlines); - - setSmallScreen(findViewById(R.id.sw600dp_anchor) == null); - - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - GlobalState.getInstance().load(savedInstanceState); - - m_drawerLayout = (DrawerLayout) findViewById(R.id.headlines_drawer); - - if (m_drawerLayout != null) { - - m_drawerToggle = new ActionBarDrawerToggle(this, m_drawerLayout, R.string.blank, R.string.blank) { - @Override - public void onDrawerOpened(View drawerView) { - super.onDrawerOpened(drawerView); - - getSupportActionBar().show(); - invalidateOptionsMenu(); - } - - @Override - public void onDrawerClosed(View drawerView) { - super.onDrawerClosed(drawerView); - - if (m_prefs.getBoolean("drawer_open_on_start", true)) { - SharedPreferences.Editor editor = m_prefs.edit(); - editor.putBoolean("drawer_open_on_start", false); - editor.apply(); - } - - invalidateOptionsMenu(); - } - }; - - m_drawerLayout.setDrawerListener(m_drawerToggle); - m_drawerToggle.setDrawerIndicatorEnabled(true); - - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setHomeButtonEnabled(true); - } - - if (savedInstanceState == null) { - if (m_drawerLayout != null && m_prefs.getBoolean("drawer_open_on_start", true)) { - m_drawerLayout.openDrawer(Gravity.START); - } - - final Intent i = getIntent(); - boolean shortcutMode = i.getBooleanExtra("shortcut_mode", false); - - Log.d(TAG, "is_shortcut_mode: " + shortcutMode); - - if (shortcutMode) { - LoginRequest lr = new LoginRequest(this, false, new OnLoginFinishedListener() { - - @Override - public void OnLoginSuccess() { - int feedId = i.getIntExtra("feed_id", 0); - boolean isCat = i.getBooleanExtra("feed_is_cat", false); - String feedTitle = i.getStringExtra("feed_title"); - - Feed tmpFeed = new Feed(feedId, feedTitle, isCat); - - onFeedSelected(tmpFeed, false); - } - - @Override - public void OnLoginFailed() { - login(); - } - }); - - HashMap map = new HashMap() { - { - put("op", "login"); - put("user", m_prefs.getString("login", "").trim()); - put("password", m_prefs.getString("password", "").trim()); - } - }; - - lr.execute(map); - } - - //m_pullToRefreshAttacher.setRefreshing(true); - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - - if (m_prefs.getBoolean("enable_cats", false)) { - ft.replace(R.id.feeds_fragment, new FeedCategoriesFragment(), FRAG_CATS); - } else { - ft.replace(R.id.feeds_fragment, new FeedsFragment(), FRAG_FEEDS); - } - - if (m_prefs.getBoolean("open_fresh_on_startup", true)) { - HeadlinesFragment hf = new HeadlinesFragment(); - hf.initialize(new Feed(-3, getString(R.string.fresh_articles), false)); - - ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); - } else if (m_drawerLayout != null) { - m_drawerLayout.openDrawer(Gravity.START); - } - - ft.commit(); - - m_feedIsSelected = true; - - checkTrial(true); - - } else { // savedInstanceState != null - //m_actionbarUpEnabled = savedInstanceState.getBoolean("actionbarUpEnabled"); - //m_actionbarRevertDepth = savedInstanceState.getInt("actionbarRevertDepth"); - m_feedIsSelected = savedInstanceState.getBoolean("feedIsSelected"); - m_userFeedSelected = savedInstanceState.getBoolean("userFeedSelected"); - //m_feedWasSelected = savedInstanceState.getBoolean("feedWasSelected"); - - /* if (findViewById(R.id.sw600dp_port_anchor) != null && m_feedWasSelected && m_slidingMenu != null) { - m_slidingMenu.setBehindWidth(getScreenWidthInPixel() * 2/3); - } */ - - if (m_drawerLayout != null && m_feedIsSelected == false) { - m_drawerLayout.openDrawer(Gravity.START); - } - - } - - } - - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - // Sync the toggle state after onRestoreInstanceState has occurred. - if (m_drawerToggle != null) m_drawerToggle.syncState(); - } - - @Override - protected void initMenu() { - super.initMenu(); - - if (m_menu != null && getSessionId() != null) { - Fragment ff = getSupportFragmentManager().findFragmentByTag(FRAG_FEEDS); - Fragment cf = getSupportFragmentManager().findFragmentByTag(FRAG_CATS); - HeadlinesFragment hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - - /* if (m_drawerLayout != null) { - boolean isDrawerOpen = m_drawerLayout.isDrawerOpen(Gravity.START); - - m_menu.setGroupVisible(R.id.menu_group_feeds, isDrawerOpen); - m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.isAdded() && !isDrawerOpen); - } else { - m_menu.setGroupVisible(R.id.menu_group_feeds, (ff != null && ff.isAdded()) || (cf != null && cf.isAdded())); - m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.isAdded()); - - m_menu.findItem(R.id.update_headlines).setVisible(false); - } */ - - m_menu.setGroupVisible(R.id.menu_group_feeds, (ff != null && ff.isAdded()) || (cf != null && cf.isAdded())); - m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.isAdded()); - - //m_menu.findItem(R.id.headlines_toggle_sidebar).setVisible(false); - - /* MenuItem item = m_menu.findItem(R.id.show_feeds); - - if (getUnreadOnly()) { - item.setTitle(R.string.menu_all_feeds); - } else { - item.setTitle(R.string.menu_unread_feeds); - } */ - } - } - - public void onFeedSelected(Feed feed) { - onFeedSelected(feed, true); - } - - public void onFeedSelected(Feed feed, final boolean selectedByUser) { - - FragmentTransaction ft = getSupportFragmentManager() - .beginTransaction(); - - HeadlinesFragment hf = new HeadlinesFragment(); - hf.initialize(feed); - - ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); - - ft.commit(); - - m_feedIsSelected = true; - m_userFeedSelected = selectedByUser; - //m_feedWasSelected = true; - - if (m_drawerLayout != null) { - m_drawerLayout.closeDrawers(); - } - - Date date = new Date(); - - if (date.getTime() - m_lastRefresh > 10000) { - m_lastRefresh = date.getTime(); - refresh(false); - } - } - - public void onCatSelected(FeedCategory cat, boolean openAsFeed) { - FeedCategoriesFragment fc = (FeedCategoriesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_CATS); - - //m_pullToRefreshAttacher.setRefreshing(true); - - if (!openAsFeed) { - - if (fc != null) { - fc.setSelectedCategory(null); - } - - FragmentTransaction ft = getSupportFragmentManager() - .beginTransaction(); - - FeedsFragment ff = new FeedsFragment(); - ff.initialize(cat, true); - ft.replace(R.id.feeds_fragment, ff, FRAG_FEEDS); - - ft.addToBackStack(null); - ft.commit(); - - //getSupportActionBar().setDisplayHomeAsUpEnabled(true); - //m_actionbarUpEnabled = true; - //m_actionbarRevertDepth = m_actionbarRevertDepth + 1; - - } else { - - if (fc != null) { - fc.setSelectedCategory(cat); - } - - Feed feed = new Feed(cat.id, cat.title, true); - onFeedSelected(feed); - } - } - - public void onCatSelected(FeedCategory cat) { - onCatSelected(cat, m_prefs.getBoolean("browse_cats_like_feeds", false)); - } - - @Override - public void logout() { - super.logout(); - - finish(); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (m_drawerToggle != null && m_drawerToggle.onOptionsItemSelected(item)) { - return true; - } - - switch (item.getItemId()) { - case R.id.headlines_toggle_sort_order: - Dialog dialog = new Dialog(this); - - String sortMode = getSortMode(); - - int selectedIndex = 0; - - if (sortMode.equals("feed_dates")) { - selectedIndex = 1; - } else if (sortMode.equals("date_reverse")) { - selectedIndex = 2; - } else if (sortMode.equals("title")) { - selectedIndex = 3; - } - - AlertDialog.Builder builder = new AlertDialog.Builder(this) - .setTitle(getString(R.string.headlines_sort_articles_title)) - .setSingleChoiceItems( - new String[] { - getString(R.string.headlines_sort_default), - getString(R.string.headlines_sort_newest_first), - getString(R.string.headlines_sort_oldest_first), - getString(R.string.headlines_sort_title) - }, - selectedIndex, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int which) { - switch (which) { - case 0: - setSortMode("default"); - break; - case 1: - setSortMode("feed_dates"); - break; - case 2: - setSortMode("date_reverse"); - break; - case 3: - setSortMode("title"); - break; - } - dialog.cancel(); - - refresh(); - } - }); - - dialog = builder.create(); - dialog.show(); - - return true; - /* case R.id.show_feeds: - setUnreadOnly(!getUnreadOnly()); - invalidateOptionsMenu(); - refresh(); - return true; */ - /*case R.id.update_feeds: - //m_pullToRefreshAttacher.setRefreshing(true); - refresh(); - return true;*/ - default: - Log.d(TAG, "onOptionsItemSelected, unhandled id=" + item.getItemId()); - return super.onOptionsItemSelected(item); - } - } - - @Override - public void onBackPressed() { - if (m_drawerLayout != null && !m_drawerLayout.isDrawerOpen(Gravity.START) && - (getSupportFragmentManager().getBackStackEntryCount() > 0 || m_userFeedSelected)) { - - m_drawerLayout.openDrawer(Gravity.START); - } else { - super.onBackPressed(); - } - } - - @Override - protected void loginSuccess(boolean refresh) { - invalidateOptionsMenu(); - - if (refresh) refresh(); - } - - @Override - public void onSaveInstanceState(Bundle out) { - super.onSaveInstanceState(out); - - out.putBoolean("feedIsSelected", m_feedIsSelected); - out.putBoolean("userFeedSelected", m_userFeedSelected); - - GlobalState.getInstance().save(out); - } - - @Override - public void onResume() { - super.onResume(); - invalidateOptionsMenu(); - } - - @Override - public void onArticleListSelectionChange(ArticleList m_selectedArticles) { - invalidateOptionsMenu(); - } - - /* public void openFeedArticles(Feed feed) { - //GlobalState.getInstance().m_loadedArticles.clear(); - - Intent intent = new Intent(FeedsActivity.this, HeadlinesActivity.class); - intent.putExtra("feed", feed); - intent.putExtra("article", (Article)null); - intent.putExtra("searchQuery", (String)null); - - startActivityForResult(intent, HEADLINES_REQUEST); - overridePendingTransition(R.anim.right_slide_in, 0); - } */ - - public void onArticleSelected(Article article, boolean open) { - if (open) { - HeadlinesFragment hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - - Intent intent = new Intent(FeedsActivity.this, HeadlinesActivity.class); - intent.putExtra("feed", hf.getFeed()); - intent.putExtra("article", article); - intent.putExtra("searchQuery", hf.getSearchQuery()); - //intent.putExtra("articles", (Parcelable)hf.getAllArticles()); - GlobalState.getInstance().tmpArticleList = hf.getAllArticles(); - - /* if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - startActivityForResult(intent, HEADLINES_REQUEST, ActivityOptions.makeSceneTransitionAnimation(this).toBundle()); - } else { - startActivityForResult(intent, HEADLINES_REQUEST); - } */ - - // mysterious crashes somewhere in gl layer (?) on some feeds if we use activitycompat transitions here on LP so welp - startActivityForResult(intent, HEADLINES_REQUEST); - - - } else { - invalidateOptionsMenu(); - - if (article.unread) { - article.unread = false; - saveArticleUnread(article); - } - } - } - - @Override - public void onStop() { - super.onStop(); - - Intent updateWidgetIntent = new Intent(SmallWidgetProvider.ACTION_REQUEST_UPDATE); - sendBroadcast(updateWidgetIntent); - } - - @Override - public void onArticleSelected(Article article) { - onArticleSelected(article, true); - } - - public void catchupFeed(final Feed feed) { - super.catchupFeed(feed); - refresh(); - } - - @Override - public void onHeadlinesLoaded(boolean appended) { - // TODO Auto-generated method stub - - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == HEADLINES_REQUEST && data != null) { - //GlobalState.getInstance().m_activeArticle = null; - - //ArrayList
tmp = data.getParcelableArrayListExtra("articles"); - Article article = data.getParcelableExtra("activeArticle"); - ArticleList articles = GlobalState.getInstance().tmpArticleList; - - if (articles != null) { - HeadlinesFragment hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - - if (hf != null) { - hf.setArticles(articles); - hf.setActiveArticle(article); - } - } - - - } - } - - public void createFeedShortcut(Feed feed) { - final Intent shortcutIntent = new Intent(this, FeedsActivity.class); - shortcutIntent.putExtra("feed_id", feed.id); - shortcutIntent.putExtra("feed_is_cat", feed.is_cat); - shortcutIntent.putExtra("feed_title", feed.title); - shortcutIntent.putExtra("shortcut_mode", true); - - Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); - - intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, feed.title); - intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); - intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher)); - intent.putExtra("duplicate", false); - - sendBroadcast(intent); - - toast(R.string.shortcut_has_been_placed_on_the_home_screen); - } - - public void createCategoryShortcut(FeedCategory cat) { - createFeedShortcut(new Feed(cat.id, cat.title, true)); - } - - public void unsubscribeFeed(final Feed feed) { - ApiRequest req = new ApiRequest(getApplicationContext()) { - protected void onPostExecute(JsonElement result) { - refresh(); - } - }; - - @SuppressWarnings("serial") - HashMap map = new HashMap() { - { - put("sid", getSessionId()); - put("op", "unsubscribeFeed"); - put("feed_id", String.valueOf(feed.id)); - } - }; - - req.execute(map); - - } -} diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java index a4eb1910..6ebf9b69 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java @@ -50,7 +50,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi private SharedPreferences m_prefs; private FeedListAdapter m_adapter; private FeedList m_feeds = new FeedList(); - private FeedsActivity m_activity; + private MasterActivity m_activity; private Feed m_selectedFeed; private FeedCategory m_activeCategory; private static final String ICON_PATH = "/icons/"; @@ -223,7 +223,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { - getActivity().getMenuInflater().inflate(R.menu.feed_menu, menu); + getActivity().getMenuInflater().inflate(R.menu.context_feed, menu); AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; @@ -330,7 +330,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi m_prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()); m_prefs.registerOnSharedPreferenceChangeListener(this); - m_activity = (FeedsActivity)activity; + m_activity = (MasterActivity)activity; } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/GlobalState.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/GlobalState.java deleted file mode 100755 index 0fc4decc..00000000 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/GlobalState.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.fox.ttrss; - -import android.app.Application; -import android.os.Bundle; - -import org.acra.ACRA; -import org.acra.ReportingInteractionMode; -import org.acra.annotation.ReportsCrashes; -import org.fox.ttrss.types.ArticleList; - -@ReportsCrashes(formKey = "", mode = ReportingInteractionMode.DIALOG, - excludeMatchingSharedPreferencesKeys = {"password"}, - resDialogText = R.string.crash_dialog_text, - formUri = "http://tt-rss.org/acra/submit/") -public class GlobalState extends Application { - private static GlobalState m_singleton; - - public ArticleList tmpArticleList; - //public Feed m_activeFeed; - //public Article m_activeArticle; - public int m_selectedArticleId; - public String m_sessionId; - public int m_apiLevel; - public boolean m_canUseProgress; - - public static GlobalState getInstance(){ - return m_singleton; - } - - @Override - public final void onCreate() { - super.onCreate(); - - if (!BuildConfig.DEBUG) { - ACRA.init(this); - } - - m_singleton = this; - } - - public void save(Bundle out) { - - out.setClassLoader(getClass().getClassLoader()); - //out.putParcelableArrayList("gs:loadedArticles", m_loadedArticles); - //out.putParcelable("gs:activeFeed", m_activeFeed); - //out.putParcelable("gs:activeArticle", m_activeArticle); - out.putString("gs:sessionId", m_sessionId); - out.putInt("gs:apiLevel", m_apiLevel); - out.putBoolean("gs:canUseProgress", m_canUseProgress); - out.putInt("gs:selectedArticleId", m_selectedArticleId); - } - - public void load(Bundle in) { - if (/* m_loadedArticles.size() == 0 && */ in != null) { - /* ArrayList list = in.getParcelableArrayList("gs:loadedArticles"); - - for (Parcelable p : list) { - m_loadedArticles.add((Article)p); - } */ - - //m_activeFeed = (Feed) in.getParcelable("gs:activeFeed"); - //m_activeArticle = (Article) in.getParcelable("gs:activeArticle"); - m_sessionId = in.getString("gs:sessionId"); - m_apiLevel = in.getInt("gs:apiLevel"); - m_canUseProgress = in.getBoolean("gs:canUseProgress"); - m_selectedArticleId = in.getInt("gs:selectedArticleId"); - } - - } -} diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesActivity.java deleted file mode 100755 index cd3dd375..00000000 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesActivity.java +++ /dev/null @@ -1,324 +0,0 @@ -package org.fox.ttrss; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.res.Configuration; -import android.os.Bundle; -import android.os.Handler; -import android.preference.PreferenceManager; -import android.support.v4.app.FragmentTransaction; -import android.support.v7.widget.Toolbar; -import android.util.Log; -import android.view.MenuItem; -import android.view.View; - -import org.fox.ttrss.types.Article; -import org.fox.ttrss.types.ArticleList; -import org.fox.ttrss.types.Feed; - -public class HeadlinesActivity extends OnlineActivity implements HeadlinesEventListener { - private final String TAG = this.getClass().getSimpleName(); - protected ArticleList m_articles = new ArticleList(); - - protected SharedPreferences m_prefs; - private Article m_activeArticle; - - @SuppressLint("NewApi") - @Override - public void onCreate(Bundle savedInstanceState) { - m_prefs = PreferenceManager - .getDefaultSharedPreferences(getApplicationContext()); - - setAppTheme(m_prefs); - - super.onCreate(savedInstanceState); - - setContentView(R.layout.activity_headlines_articles); - - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - m_forceDisableActionMode = isPortrait() || isSmallScreen(); - - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setHomeButtonEnabled(true); - - setSmallScreen(findViewById(R.id.sw600dp_anchor) == null); - - GlobalState.getInstance().load(savedInstanceState); - - if (isPortrait() && !isSmallScreen()) { - findViewById(R.id.headlines_fragment).setVisibility(View.GONE); - } - - if (savedInstanceState != null) { - m_articles = savedInstanceState.getParcelable("articles"); - } else { - Intent i = getIntent(); - - if (i.getExtras() != null) { - boolean shortcutMode = i.getBooleanExtra("shortcut_mode", false); - - Log.d(TAG, "is_shortcut_mode: " + shortcutMode); - - Feed tmpFeed; - - if (shortcutMode) { - int feedId = i.getIntExtra("feed_id", 0); - boolean isCat = i.getBooleanExtra("feed_is_cat", false); - String feedTitle = i.getStringExtra("feed_title"); - - tmpFeed = new Feed(feedId, feedTitle, isCat); - - //GlobalState.getInstance().m_loadedArticles.clear(); - } else { - tmpFeed = i.getParcelableExtra("feed"); - } - - final Feed feed = tmpFeed; - - final Article article = i.getParcelableExtra("article"); - final String searchQuery = i.getStringExtra("searchQuery"); - - ArticleList tmp = GlobalState.getInstance().tmpArticleList; - - if (tmp != null) { - m_articles.addAll(tmp); - } - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - - final HeadlinesFragment hf = new HeadlinesFragment(); - hf.initialize(feed, article, true, m_articles); - hf.setSearchQuery(searchQuery); - - ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); - ft.replace(R.id.article_fragment, new LoadingFragment(), null); - - ft.commit(); - - setTitle(feed.title); - - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - - ArticlePager af = new ArticlePager(); - af.initialize(article != null ? hf.getArticleById(article.id) : new Article(), feed, m_articles); - af.setSearchQuery(searchQuery); - - ft.replace(R.id.article_fragment, af, FRAG_ARTICLE); - - ft.commit(); - } - }, 100); - } - } - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - - if (!isSmallScreen()) { - findViewById(R.id.headlines_fragment).setVisibility(isPortrait() ? View.GONE : View.VISIBLE); - } - - m_forceDisableActionMode = isPortrait() || isSmallScreen(); - invalidateOptionsMenu(); - } - - @Override - protected void refresh() { - super.refresh(); - - - } - - @Override - protected void loginSuccess(boolean refresh) { - Log.d(TAG, "loginSuccess"); - - invalidateOptionsMenu(); - - if (refresh) refresh(); - } - - @Override - public void onSaveInstanceState(Bundle out) { - super.onSaveInstanceState(out); - - out.putParcelable("articles", m_articles); - - GlobalState.getInstance().save(out); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - onBackPressed(); - return true; - default: - Log.d(TAG, "onOptionsItemSelected, unhandled id=" + item.getItemId()); - return super.onOptionsItemSelected(item); - } - } - - @Override - public void onResume() { - super.onResume(); - } - - @Override - protected void initMenu() { - super.initMenu(); - - if (m_menu != null && getSessionId() != null) { - m_menu.setGroupVisible(R.id.menu_group_feeds, false); - - //HeadlinesFragment hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - - m_menu.setGroupVisible(R.id.menu_group_headlines, !isPortrait() && !isSmallScreen()); - //m_menu.findItem(R.id.headlines_toggle_sidebar).setVisible(!isPortrait() && !isSmallScreen()); - - ArticlePager af = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); - - m_menu.setGroupVisible(R.id.menu_group_article, af != null); - - if (af != null) { - if (af.getSelectedArticle() != null && af.getSelectedArticle().attachments != null && af.getSelectedArticle().attachments.size() > 0) { - /* if (!isCompatMode() && (isSmallScreen() || !isPortrait())) { - m_menu.findItem(R.id.toggle_attachments).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); - } */ - m_menu.findItem(R.id.toggle_attachments).setVisible(true); - } else { - /* if (!isCompatMode()) { - m_menu.findItem(R.id.toggle_attachments).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); - } */ - m_menu.findItem(R.id.toggle_attachments).setVisible(false); - } - } - - m_menu.findItem(R.id.search).setVisible(false); - } - } - - @Override - public void onArticleListSelectionChange(ArticleList m_selectedArticles) { - invalidateOptionsMenu(); - } - - @Override - public void onArticleSelected(Article article) { - onArticleSelected(article, true); - } - - @Override - public void onArticleSelected(Article article, boolean open) { - - if (article == null) return; - - if (article.unread) { - article.unread = false; - saveArticleUnread(article); - } - - if (!getSupportActionBar().isShowing()) getSupportActionBar().show(); - - if (open) { - - final Article fArticle = article; - - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - ArticlePager af = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); - - if (af != null) { - af.setActiveArticle(fArticle); - } - } - }, 10); - - } else { - HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - if (hf != null) { - hf.setActiveArticle(article); - } - } - - m_activeArticle = article; - - //GlobalState.getInstance().m_activeArticle = article; - - invalidateOptionsMenu(); - - } - - public void showSidebar(boolean show) { - if (!isSmallScreen() && !isPortrait()) { - findViewById(R.id.headlines_fragment).setVisibility(show ? View.VISIBLE : View.GONE); - invalidateOptionsMenu(); - } - } - - @Override - public void onHeadlinesLoaded(boolean appended) { - HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - ArticlePager ap = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); - - if (ap != null) { - ap.notifyUpdated(); - } - - if (hf != null) { - Article article = hf.getActiveArticle(); - - if (article == null && hf.getAllArticles().size() > 0) { - article = hf.getAllArticles().get(0); - - hf.setActiveArticle(article); - - FragmentTransaction ft = getSupportFragmentManager() - .beginTransaction(); - - ft.replace(R.id.article_fragment, new LoadingFragment(), null); - - ft.commitAllowingStateLoss(); - - final Article fArticle = article; - final Feed fFeed = hf.getFeed(); - - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - FragmentTransaction ft = getSupportFragmentManager() - .beginTransaction(); - - ArticlePager af = new ArticlePager(); - af.initialize(fArticle, fFeed, m_articles); - - ft.replace(R.id.article_fragment, af, FRAG_ARTICLE); - ft.commitAllowingStateLoss(); - } - }, 10); - } - } - } - - @Override - public void onBackPressed() { - Intent resultIntent = new Intent(); - - GlobalState.getInstance().tmpArticleList = m_articles; - resultIntent.putExtra("activeArticle", m_activeArticle); - - setResult(Activity.RESULT_OK, resultIntent); - - super.onBackPressed(); - } -} diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java index 90d4636f..3892132b 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java @@ -95,7 +95,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, private ArticleListAdapter m_adapter; private AnimationAdapter m_animationAdapter; - private ArticleList m_articles = new ArticleList(); //GlobalState.getInstance().m_loadedArticles; + private ArticleList m_articles = new ArticleList(); //Application.getInstance().m_loadedArticles; //private ArticleList m_selectedArticles = new ArticleList(); private ArticleList m_readArticles = new ArticleList(); private HeadlinesEventListener m_listener; @@ -301,7 +301,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { - getActivity().getMenuInflater().inflate(R.menu.headlines_context_menu, menu); + getActivity().getMenuInflater().inflate(R.menu.context_headlines, menu); if (getSelectedArticles().size() > 0) { menu.setHeaderTitle(R.string.headline_context_multiple); @@ -327,10 +327,10 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, if (savedInstanceState != null) { m_feed = savedInstanceState.getParcelable("feed"); - if (! (m_activity instanceof HeadlinesActivity)) { + if (! (m_activity instanceof DetailActivity)) { m_articles = savedInstanceState.getParcelable("articles"); } else { - m_articles = ((HeadlinesActivity)m_activity).m_articles; + m_articles = ((DetailActivity)m_activity).m_articles; } m_activeArticle = savedInstanceState.getParcelable("activeArticle"); @@ -407,16 +407,16 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, if (m_adapter != null) m_adapter.notifyDataSetChanged(); - /* if (GlobalState.getInstance().m_activeArticle != null) { - m_activeArticle = GlobalState.getInstance().m_activeArticle; - GlobalState.getInstance().m_activeArticle = null; + /* if (Application.getInstance().m_activeArticle != null) { + m_activeArticle = Application.getInstance().m_activeArticle; + Application.getInstance().m_activeArticle = null; } */ if (m_activeArticle != null) { setActiveArticle(m_activeArticle); } - /* if (!(m_activity instanceof HeadlinesActivity)) { + /* if (!(m_activity instanceof DetailActivity)) { refresh(false); } */ @@ -424,10 +424,10 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, refresh(false); } - /* if (m_articles.size() == 0 || !m_feed.equals(GlobalState.getInstance().m_activeFeed)) { + /* if (m_articles.size() == 0 || !m_feed.equals(Application.getInstance().m_activeFeed)) { if (m_activity.getSupportFragmentManager().findFragmentByTag(CommonActivity.FRAG_ARTICLE) == null) { refresh(false); - GlobalState.getInstance().m_activeFeed = m_feed; + Application.getInstance().m_activeFeed = m_feed; } } else { notifyUpdated(); @@ -457,8 +457,8 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, if (article != null && article.id >= 0) { m_listener.onArticleSelected(article); - // only set active article when it makes sense (in HeadlinesActivity) - if (getActivity() instanceof HeadlinesActivity) { + // only set active article when it makes sense (in DetailActivity) + if (getActivity() instanceof DetailActivity) { m_activeArticle = article; } @@ -478,7 +478,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, if (m_swipeLayout != null) m_swipeLayout.setRefreshing(true); - /* if (!m_feed.equals(GlobalState.getInstance().m_activeFeed)) { + /* if (!m_feed.equals(Application.getInstance().m_activeFeed)) { append = false; } */ @@ -1155,8 +1155,8 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, public void setActiveArticle(Article article) { if (article != m_activeArticle && article != null) { - // only set active article when it makes sense (in HeadlinesActivity) - if (getActivity() instanceof HeadlinesActivity) { + // only set active article when it makes sense (in DetailActivity) + if (getActivity() instanceof DetailActivity) { m_activeArticle = article; } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java new file mode 100644 index 00000000..0df1c48f --- /dev/null +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java @@ -0,0 +1,550 @@ +package org.fox.ttrss; + + +import android.annotation.SuppressLint; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.Gravity; +import android.view.MenuItem; +import android.view.View; + +import com.google.gson.JsonElement; + +import org.fox.ttrss.types.Article; +import org.fox.ttrss.types.ArticleList; +import org.fox.ttrss.types.Feed; +import org.fox.ttrss.types.FeedCategory; +import org.fox.ttrss.widget.SmallWidgetProvider; + +import java.util.Date; +import java.util.HashMap; + +public class MasterActivity extends OnlineActivity implements HeadlinesEventListener { + private final String TAG = this.getClass().getSimpleName(); + + private static final int HEADLINES_REQUEST = 1; + + protected SharedPreferences m_prefs; + protected long m_lastRefresh = 0; + + private boolean m_feedIsSelected = false; + private boolean m_userFeedSelected = false; + + private ActionBarDrawerToggle m_drawerToggle; + private DrawerLayout m_drawerLayout; + + @SuppressLint("NewApi") + @Override + public void onCreate(Bundle savedInstanceState) { + m_prefs = PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()); + + setAppTheme(m_prefs); + + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_master); + + setSmallScreen(findViewById(R.id.sw600dp_anchor) == null); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + Application.getInstance().load(savedInstanceState); + + m_drawerLayout = (DrawerLayout) findViewById(R.id.headlines_drawer); + + if (m_drawerLayout != null) { + + m_drawerToggle = new ActionBarDrawerToggle(this, m_drawerLayout, R.string.blank, R.string.blank) { + @Override + public void onDrawerOpened(View drawerView) { + super.onDrawerOpened(drawerView); + + getSupportActionBar().show(); + invalidateOptionsMenu(); + } + + @Override + public void onDrawerClosed(View drawerView) { + super.onDrawerClosed(drawerView); + + if (m_prefs.getBoolean("drawer_open_on_start", true)) { + SharedPreferences.Editor editor = m_prefs.edit(); + editor.putBoolean("drawer_open_on_start", false); + editor.apply(); + } + + invalidateOptionsMenu(); + } + }; + + m_drawerLayout.setDrawerListener(m_drawerToggle); + m_drawerToggle.setDrawerIndicatorEnabled(true); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setHomeButtonEnabled(true); + } + + if (savedInstanceState == null) { + if (m_drawerLayout != null && m_prefs.getBoolean("drawer_open_on_start", true)) { + m_drawerLayout.openDrawer(Gravity.START); + } + + final Intent i = getIntent(); + boolean shortcutMode = i.getBooleanExtra("shortcut_mode", false); + + Log.d(TAG, "is_shortcut_mode: " + shortcutMode); + + if (shortcutMode) { + LoginRequest lr = new LoginRequest(this, false, new OnLoginFinishedListener() { + + @Override + public void OnLoginSuccess() { + int feedId = i.getIntExtra("feed_id", 0); + boolean isCat = i.getBooleanExtra("feed_is_cat", false); + String feedTitle = i.getStringExtra("feed_title"); + + Feed tmpFeed = new Feed(feedId, feedTitle, isCat); + + onFeedSelected(tmpFeed, false); + } + + @Override + public void OnLoginFailed() { + login(); + } + }); + + HashMap map = new HashMap() { + { + put("op", "login"); + put("user", m_prefs.getString("login", "").trim()); + put("password", m_prefs.getString("password", "").trim()); + } + }; + + lr.execute(map); + } + + //m_pullToRefreshAttacher.setRefreshing(true); + + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + + if (m_prefs.getBoolean("enable_cats", false)) { + ft.replace(R.id.feeds_fragment, new FeedCategoriesFragment(), FRAG_CATS); + } else { + ft.replace(R.id.feeds_fragment, new FeedsFragment(), FRAG_FEEDS); + } + + if (m_prefs.getBoolean("open_fresh_on_startup", true)) { + HeadlinesFragment hf = new HeadlinesFragment(); + hf.initialize(new Feed(-3, getString(R.string.fresh_articles), false)); + + ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); + } else if (m_drawerLayout != null) { + m_drawerLayout.openDrawer(Gravity.START); + } + + ft.commit(); + + m_feedIsSelected = true; + + checkTrial(true); + + } else { // savedInstanceState != null + //m_actionbarUpEnabled = savedInstanceState.getBoolean("actionbarUpEnabled"); + //m_actionbarRevertDepth = savedInstanceState.getInt("actionbarRevertDepth"); + m_feedIsSelected = savedInstanceState.getBoolean("feedIsSelected"); + m_userFeedSelected = savedInstanceState.getBoolean("userFeedSelected"); + //m_feedWasSelected = savedInstanceState.getBoolean("feedWasSelected"); + + /* if (findViewById(R.id.sw600dp_port_anchor) != null && m_feedWasSelected && m_slidingMenu != null) { + m_slidingMenu.setBehindWidth(getScreenWidthInPixel() * 2/3); + } */ + + if (m_drawerLayout != null && m_feedIsSelected == false) { + m_drawerLayout.openDrawer(Gravity.START); + } + + } + + } + + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + // Sync the toggle state after onRestoreInstanceState has occurred. + if (m_drawerToggle != null) m_drawerToggle.syncState(); + } + + @Override + protected void initMenu() { + super.initMenu(); + + if (m_menu != null && getSessionId() != null) { + Fragment ff = getSupportFragmentManager().findFragmentByTag(FRAG_FEEDS); + Fragment cf = getSupportFragmentManager().findFragmentByTag(FRAG_CATS); + HeadlinesFragment hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + + /* if (m_drawerLayout != null) { + boolean isDrawerOpen = m_drawerLayout.isDrawerOpen(Gravity.START); + + m_menu.setGroupVisible(R.id.menu_group_feeds, isDrawerOpen); + m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.isAdded() && !isDrawerOpen); + } else { + m_menu.setGroupVisible(R.id.menu_group_feeds, (ff != null && ff.isAdded()) || (cf != null && cf.isAdded())); + m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.isAdded()); + + m_menu.findItem(R.id.update_headlines).setVisible(false); + } */ + + m_menu.setGroupVisible(R.id.menu_group_feeds, (ff != null && ff.isAdded()) || (cf != null && cf.isAdded())); + m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.isAdded()); + + //m_menu.findItem(R.id.headlines_toggle_sidebar).setVisible(false); + + /* MenuItem item = m_menu.findItem(R.id.show_feeds); + + if (getUnreadOnly()) { + item.setTitle(R.string.menu_all_feeds); + } else { + item.setTitle(R.string.menu_unread_feeds); + } */ + } + } + + public void onFeedSelected(Feed feed) { + onFeedSelected(feed, true); + } + + public void onFeedSelected(Feed feed, final boolean selectedByUser) { + + FragmentTransaction ft = getSupportFragmentManager() + .beginTransaction(); + + HeadlinesFragment hf = new HeadlinesFragment(); + hf.initialize(feed); + + ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); + + ft.commit(); + + m_feedIsSelected = true; + m_userFeedSelected = selectedByUser; + //m_feedWasSelected = true; + + if (m_drawerLayout != null) { + m_drawerLayout.closeDrawers(); + } + + Date date = new Date(); + + if (date.getTime() - m_lastRefresh > 10000) { + m_lastRefresh = date.getTime(); + refresh(false); + } + } + + public void onCatSelected(FeedCategory cat, boolean openAsFeed) { + FeedCategoriesFragment fc = (FeedCategoriesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_CATS); + + //m_pullToRefreshAttacher.setRefreshing(true); + + if (!openAsFeed) { + + if (fc != null) { + fc.setSelectedCategory(null); + } + + FragmentTransaction ft = getSupportFragmentManager() + .beginTransaction(); + + FeedsFragment ff = new FeedsFragment(); + ff.initialize(cat, true); + ft.replace(R.id.feeds_fragment, ff, FRAG_FEEDS); + + ft.addToBackStack(null); + ft.commit(); + + //getSupportActionBar().setDisplayHomeAsUpEnabled(true); + //m_actionbarUpEnabled = true; + //m_actionbarRevertDepth = m_actionbarRevertDepth + 1; + + } else { + + if (fc != null) { + fc.setSelectedCategory(cat); + } + + Feed feed = new Feed(cat.id, cat.title, true); + onFeedSelected(feed); + } + } + + public void onCatSelected(FeedCategory cat) { + onCatSelected(cat, m_prefs.getBoolean("browse_cats_like_feeds", false)); + } + + @Override + public void logout() { + super.logout(); + + finish(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (m_drawerToggle != null && m_drawerToggle.onOptionsItemSelected(item)) { + return true; + } + + switch (item.getItemId()) { + case R.id.headlines_toggle_sort_order: + Dialog dialog = new Dialog(this); + + String sortMode = getSortMode(); + + int selectedIndex = 0; + + if (sortMode.equals("feed_dates")) { + selectedIndex = 1; + } else if (sortMode.equals("date_reverse")) { + selectedIndex = 2; + } else if (sortMode.equals("title")) { + selectedIndex = 3; + } + + AlertDialog.Builder builder = new AlertDialog.Builder(this) + .setTitle(getString(R.string.headlines_sort_articles_title)) + .setSingleChoiceItems( + new String[] { + getString(R.string.headlines_sort_default), + getString(R.string.headlines_sort_newest_first), + getString(R.string.headlines_sort_oldest_first), + getString(R.string.headlines_sort_title) + }, + selectedIndex, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + switch (which) { + case 0: + setSortMode("default"); + break; + case 1: + setSortMode("feed_dates"); + break; + case 2: + setSortMode("date_reverse"); + break; + case 3: + setSortMode("title"); + break; + } + dialog.cancel(); + + refresh(); + } + }); + + dialog = builder.create(); + dialog.show(); + + return true; + /* case R.id.show_feeds: + setUnreadOnly(!getUnreadOnly()); + invalidateOptionsMenu(); + refresh(); + return true; */ + /*case R.id.update_feeds: + //m_pullToRefreshAttacher.setRefreshing(true); + refresh(); + return true;*/ + default: + Log.d(TAG, "onOptionsItemSelected, unhandled id=" + item.getItemId()); + return super.onOptionsItemSelected(item); + } + } + + @Override + public void onBackPressed() { + if (m_drawerLayout != null && !m_drawerLayout.isDrawerOpen(Gravity.START) && + (getSupportFragmentManager().getBackStackEntryCount() > 0 || m_userFeedSelected)) { + + m_drawerLayout.openDrawer(Gravity.START); + } else { + super.onBackPressed(); + } + } + + @Override + protected void loginSuccess(boolean refresh) { + invalidateOptionsMenu(); + + if (refresh) refresh(); + } + + @Override + public void onSaveInstanceState(Bundle out) { + super.onSaveInstanceState(out); + + out.putBoolean("feedIsSelected", m_feedIsSelected); + out.putBoolean("userFeedSelected", m_userFeedSelected); + + Application.getInstance().save(out); + } + + @Override + public void onResume() { + super.onResume(); + invalidateOptionsMenu(); + } + + @Override + public void onArticleListSelectionChange(ArticleList m_selectedArticles) { + invalidateOptionsMenu(); + } + + /* public void openFeedArticles(Feed feed) { + //Application.getInstance().m_loadedArticles.clear(); + + Intent intent = new Intent(MasterActivity.this, DetailActivity.class); + intent.putExtra("feed", feed); + intent.putExtra("article", (Article)null); + intent.putExtra("searchQuery", (String)null); + + startActivityForResult(intent, HEADLINES_REQUEST); + overridePendingTransition(R.anim.right_slide_in, 0); + } */ + + public void onArticleSelected(Article article, boolean open) { + if (open) { + HeadlinesFragment hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + + Intent intent = new Intent(MasterActivity.this, DetailActivity.class); + intent.putExtra("feed", hf.getFeed()); + intent.putExtra("article", article); + intent.putExtra("searchQuery", hf.getSearchQuery()); + //intent.putExtra("articles", (Parcelable)hf.getAllArticles()); + Application.getInstance().tmpArticleList = hf.getAllArticles(); + + /* if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + startActivityForResult(intent, HEADLINES_REQUEST, ActivityOptions.makeSceneTransitionAnimation(this).toBundle()); + } else { + startActivityForResult(intent, HEADLINES_REQUEST); + } */ + + // mysterious crashes somewhere in gl layer (?) on some feeds if we use activitycompat transitions here on LP so welp + startActivityForResult(intent, HEADLINES_REQUEST); + + + } else { + invalidateOptionsMenu(); + + if (article.unread) { + article.unread = false; + saveArticleUnread(article); + } + } + } + + @Override + public void onStop() { + super.onStop(); + + Intent updateWidgetIntent = new Intent(SmallWidgetProvider.ACTION_REQUEST_UPDATE); + sendBroadcast(updateWidgetIntent); + } + + @Override + public void onArticleSelected(Article article) { + onArticleSelected(article, true); + } + + public void catchupFeed(final Feed feed) { + super.catchupFeed(feed); + refresh(); + } + + @Override + public void onHeadlinesLoaded(boolean appended) { + // TODO Auto-generated method stub + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == HEADLINES_REQUEST && data != null) { + //Application.getInstance().m_activeArticle = null; + + //ArrayList
tmp = data.getParcelableArrayListExtra("articles"); + Article article = data.getParcelableExtra("activeArticle"); + ArticleList articles = Application.getInstance().tmpArticleList; + + if (articles != null) { + HeadlinesFragment hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + + if (hf != null) { + hf.setArticles(articles); + hf.setActiveArticle(article); + } + } + + + } + } + + public void createFeedShortcut(Feed feed) { + final Intent shortcutIntent = new Intent(this, MasterActivity.class); + shortcutIntent.putExtra("feed_id", feed.id); + shortcutIntent.putExtra("feed_is_cat", feed.is_cat); + shortcutIntent.putExtra("feed_title", feed.title); + shortcutIntent.putExtra("shortcut_mode", true); + + Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); + + intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, feed.title); + intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); + intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher)); + intent.putExtra("duplicate", false); + + sendBroadcast(intent); + + toast(R.string.shortcut_has_been_placed_on_the_home_screen); + } + + public void createCategoryShortcut(FeedCategory cat) { + createFeedShortcut(new Feed(cat.id, cat.title, true)); + } + + public void unsubscribeFeed(final Feed feed) { + ApiRequest req = new ApiRequest(getApplicationContext()) { + protected void onPostExecute(JsonElement result) { + refresh(); + } + }; + + @SuppressWarnings("serial") + HashMap map = new HashMap() { + { + put("sid", getSessionId()); + put("op", "unsubscribeFeed"); + put("feed_id", String.valueOf(feed.id)); + } + }; + + req.execute(map); + + } +} diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java index 5f2a13e3..2dba81a8 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java @@ -123,7 +123,7 @@ public class OnlineActivity extends CommonActivity { public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.headlines_action_menu, menu); + inflater.inflate(R.menu.action_mode_headlines, menu); return true; } @@ -136,11 +136,11 @@ public class OnlineActivity extends CommonActivity { } protected String getSessionId() { - return GlobalState.getInstance().m_sessionId; + return Application.getInstance().m_sessionId; } protected void setSessionId(String sessionId) { - GlobalState.getInstance().m_sessionId = sessionId; + Application.getInstance().m_sessionId = sessionId; } @Override @@ -163,7 +163,7 @@ public class OnlineActivity extends CommonActivity { Log.d(TAG, "m_isOffline=" + isOffline); - setContentView(R.layout.login); + setContentView(R.layout.activity_login); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); @@ -197,7 +197,7 @@ public class OnlineActivity extends CommonActivity { } protected boolean canUseProgress() { - return GlobalState.getInstance().m_canUseProgress; + return Application.getInstance().m_canUseProgress; } protected void switchOffline() { @@ -457,7 +457,7 @@ public class OnlineActivity extends CommonActivity { initMenu(); - Intent intent = new Intent(OnlineActivity.this, FeedsActivity.class); + Intent intent = new Intent(OnlineActivity.this, MasterActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivityForResult(intent, 0); @@ -1252,7 +1252,7 @@ public class OnlineActivity extends CommonActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.main_menu, menu); + inflater.inflate(R.menu.activity_main, menu); m_menu = menu; @@ -1273,11 +1273,11 @@ public class OnlineActivity extends CommonActivity { } protected int getApiLevel() { - return GlobalState.getInstance().m_apiLevel; + return Application.getInstance().m_apiLevel; } protected void setApiLevel(int apiLevel) { - GlobalState.getInstance().m_apiLevel = apiLevel; + Application.getInstance().m_apiLevel = apiLevel; } @SuppressWarnings({ "unchecked", "serial" }) @@ -1623,7 +1623,7 @@ public class OnlineActivity extends CommonActivity { JsonElement apiLevel = content.get("api_level"); - GlobalState.getInstance().m_canUseProgress = m_canUseProgress; + Application.getInstance().m_canUseProgress = m_canUseProgress; Log.d(TAG, "Authenticated! canUseProgress=" + m_canUseProgress); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesActivity.java index d7740be5..9e030748 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/PreferencesActivity.java @@ -16,7 +16,7 @@ public class PreferencesActivity extends CommonActivity { super.onCreate(savedInstanceState); - setContentView(R.layout.preferences); + setContentView(R.layout.activity_preferences); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java index 319477a1..fd14c831 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java @@ -60,7 +60,7 @@ public class OfflineActivity extends CommonActivity { public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.headlines_action_menu, menu); + inflater.inflate(R.menu.action_mode_headlines, menu); return true; } @@ -170,7 +170,7 @@ public class OfflineActivity extends CommonActivity { super.onCreate(savedInstanceState); - setContentView(R.layout.login); + setContentView(R.layout.activity_login); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); @@ -181,7 +181,7 @@ public class OfflineActivity extends CommonActivity { if (intent.getExtras() != null) { if (intent.getBooleanExtra("initial", false)) { - intent = new Intent(OfflineActivity.this, OfflineFeedsActivity.class); + intent = new Intent(OfflineActivity.this, OfflineMasterActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivityForResult(intent, 0); @@ -552,7 +552,7 @@ public class OfflineActivity extends CommonActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.offline_menu, menu); + inflater.inflate(R.menu.activity_offline, menu); m_menu = menu; diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java index 183df01a..7be392ab 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java @@ -87,7 +87,7 @@ public class OfflineArticleFragment extends Fragment { public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { - //getActivity().getMenuInflater().inflate(R.menu.article_link_context_menu, menu); + //getActivity().getMenuInflater().inflate(R.menu.context_article_link, menu); //menu.setHeaderTitle(m_cursor.getString(m_cursor.getColumnIndex("title"))); String title = m_cursor.getString(m_cursor.getColumnIndex("title")); @@ -97,7 +97,7 @@ public class OfflineArticleFragment extends Fragment { if (result != null && (result.getType() == HitTestResult.IMAGE_TYPE || result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE)) { menu.setHeaderTitle(result.getExtra()); - getActivity().getMenuInflater().inflate(R.menu.article_content_img_context_menu, menu); + getActivity().getMenuInflater().inflate(R.menu.context_article_content_img, menu); /* FIXME I have no idea how to do this correctly ;( */ @@ -105,11 +105,11 @@ public class OfflineArticleFragment extends Fragment { } else { menu.setHeaderTitle(title); - getActivity().getMenuInflater().inflate(R.menu.article_link_context_menu, menu); + getActivity().getMenuInflater().inflate(R.menu.context_article_link, menu); } } else { menu.setHeaderTitle(title); - getActivity().getMenuInflater().inflate(R.menu.article_link_context_menu, menu); + getActivity().getMenuInflater().inflate(R.menu.context_article_link, menu); } super.onCreateContextMenu(menu, v, menuInfo); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineDetailActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineDetailActivity.java new file mode 100644 index 00000000..568af77d --- /dev/null +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineDetailActivity.java @@ -0,0 +1,206 @@ +package org.fox.ttrss.offline; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.database.sqlite.SQLiteStatement; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.provider.BaseColumns; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; + +import org.fox.ttrss.Application; +import org.fox.ttrss.R; + +public class OfflineDetailActivity extends OfflineActivity implements OfflineHeadlinesEventListener { + private final String TAG = this.getClass().getSimpleName(); + + protected SharedPreferences m_prefs; + + private ActionBarDrawerToggle m_drawerToggle; + private DrawerLayout m_drawerLayout; + + @SuppressLint("NewApi") + @Override + public void onCreate(Bundle savedInstanceState) { + m_prefs = PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()); + + setAppTheme(m_prefs); + + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_detail); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + m_drawerLayout = (DrawerLayout) findViewById(R.id.headlines_drawer); + + if (m_drawerLayout != null) { + + m_drawerToggle = new ActionBarDrawerToggle(this, m_drawerLayout, R.string.blank, R.string.blank) { + @Override + public void onDrawerOpened(View drawerView) { + super.onDrawerOpened(drawerView); + + getSupportActionBar().show(); + + invalidateOptionsMenu(); + } + + @Override + public void onDrawerClosed(View drawerView) { + super.onDrawerClosed(drawerView); + + invalidateOptionsMenu(); + } + }; + + m_drawerLayout.setDrawerListener(m_drawerToggle); + m_drawerToggle.setDrawerIndicatorEnabled(true); + + } + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setHomeButtonEnabled(true); + + setSmallScreen(findViewById(R.id.sw600dp_anchor) == null); + + if (savedInstanceState == null) { + Intent i = getIntent(); + + if (i.getExtras() != null) { + int feedId = i.getIntExtra("feed", 0); + boolean isCat = i.getBooleanExtra("isCat", false); + int articleId = i.getIntExtra("article", 0); + String searchQuery = i.getStringExtra("searchQuery"); + + OfflineHeadlinesFragment hf = new OfflineHeadlinesFragment(); + hf.initialize(feedId, isCat, true); + + OfflineArticlePager af = new OfflineArticlePager(); + af.initialize(articleId, feedId, isCat); + + hf.setActiveArticleId(articleId); + + hf.setSearchQuery(searchQuery); + af.setSearchQuery(searchQuery); + + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + + ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); + ft.replace(R.id.article_fragment, af, FRAG_ARTICLE); + + ft.commit(); + + Cursor c; + + if (isCat) { + c = getCatById(feedId); + } else { + c = getFeedById(feedId); + } + + if (c != null) { + setTitle(c.getString(c.getColumnIndex("title"))); + c.close(); + } + + } + } + } + + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + // Sync the toggle state after onRestoreInstanceState has occurred. + if (m_drawerToggle != null) m_drawerToggle.syncState(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (m_drawerToggle != null && m_drawerToggle.onOptionsItemSelected(item)) { + return true; + } + + switch (item.getItemId()) { + case android.R.id.home: + finish(); + return true; + default: + Log.d(TAG, "onOptionsItemSelected, unhandled id=" + item.getItemId()); + return super.onOptionsItemSelected(item); + } + } + + @Override + public void onArticleSelected(int articleId, boolean open) { + + if (!open) { + SQLiteStatement stmt = getWritableDb().compileStatement( + "UPDATE articles SET modified = 1, unread = 0 " + "WHERE " + BaseColumns._ID + + " = ?"); + + stmt.bindLong(1, articleId); + stmt.execute(); + stmt.close(); + } + + if (open) { + if (m_drawerLayout != null) { + m_drawerLayout.closeDrawers(); + } + + OfflineArticlePager af = (OfflineArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); + + af.setArticleId(articleId); + } else { + OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + + hf.setActiveArticleId(articleId); + } + + Application.getInstance().m_selectedArticleId = articleId; + + invalidateOptionsMenu(); + refresh(); + } + + @Override + protected void initMenu() { + super.initMenu(); + + if (m_menu != null) { + m_menu.setGroupVisible(R.id.menu_group_feeds, false); + + //OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + + m_menu.setGroupVisible(R.id.menu_group_headlines, !isPortrait() && !isSmallScreen()); + //m_menu.findItem(R.id.headlines_toggle_sidebar).setVisible(!isPortrait() && !isSmallScreen()); + + Fragment af = getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); + + m_menu.setGroupVisible(R.id.menu_group_article, af != null); + + m_menu.findItem(R.id.search).setVisible(false); + } + } + + @Override + public void onArticleSelected(int articleId) { + onArticleSelected(articleId, true); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + } +} diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedCategoriesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedCategoriesFragment.java index 771e89ac..e73ce6b4 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedCategoriesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedCategoriesFragment.java @@ -34,7 +34,7 @@ public class OfflineFeedCategoriesFragment extends BaseFeedlistFragment implemen private FeedCategoryListAdapter m_adapter; private int m_selectedCatId; private Cursor m_cursor; - private OfflineFeedsActivity m_activity; + private OfflineMasterActivity m_activity; private SwipeRefreshLayout m_swipeLayout; private ListView m_list; @@ -42,7 +42,7 @@ public class OfflineFeedCategoriesFragment extends BaseFeedlistFragment implemen public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { - getActivity().getMenuInflater().inflate(R.menu.category_menu, menu); + getActivity().getMenuInflater().inflate(R.menu.context_category, menu); menu.findItem(R.id.create_shortcut).setEnabled(false); @@ -168,7 +168,7 @@ public class OfflineFeedCategoriesFragment extends BaseFeedlistFragment implemen public void onAttach(Activity activity) { super.onAttach(activity); - m_activity = (OfflineFeedsActivity)activity; + m_activity = (OfflineMasterActivity)activity; m_prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()); m_prefs.registerOnSharedPreferenceChangeListener(this); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedsActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedsActivity.java deleted file mode 100755 index 81bd8810..00000000 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedsActivity.java +++ /dev/null @@ -1,355 +0,0 @@ -package org.fox.ttrss.offline; - -import android.annotation.SuppressLint; -import android.app.AlertDialog; -import android.app.Dialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.database.sqlite.SQLiteStatement; -import android.os.Bundle; -import android.os.Handler; -import android.preference.PreferenceManager; -import android.provider.BaseColumns; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.widget.Toolbar; -import android.util.Log; -import android.view.Gravity; -import android.view.MenuItem; -import android.view.View; - -import org.fox.ttrss.GlobalState; -import org.fox.ttrss.R; - -public class OfflineFeedsActivity extends OfflineActivity implements OfflineHeadlinesEventListener { - private final String TAG = this.getClass().getSimpleName(); - - //private boolean m_actionbarUpEnabled = false; - //private int m_actionbarRevertDepth = 0; - private boolean m_feedIsSelected = false; - //private boolean m_feedWasSelected = false; - - private ActionBarDrawerToggle m_drawerToggle; - private DrawerLayout m_drawerLayout; - - @SuppressLint("NewApi") - @Override - public void onCreate(Bundle savedInstanceState) { - m_prefs = PreferenceManager - .getDefaultSharedPreferences(getApplicationContext()); - - setAppTheme(m_prefs); - - super.onCreate(savedInstanceState); - - setContentView(R.layout.headlines); - - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - setSmallScreen(findViewById(R.id.sw600dp_anchor) == null); - - GlobalState.getInstance().load(savedInstanceState); - - m_drawerLayout = (DrawerLayout) findViewById(R.id.headlines_drawer); - - if (m_drawerLayout != null) { - - m_drawerToggle = new ActionBarDrawerToggle(this, m_drawerLayout, R.string.blank, R.string.blank) { - @Override - public void onDrawerOpened(View drawerView) { - invalidateOptionsMenu(); - } - - @Override - public void onDrawerClosed(View drawerView) { - invalidateOptionsMenu(); - } - }; - - m_drawerLayout.setDrawerListener(m_drawerToggle); - m_drawerToggle.setDrawerIndicatorEnabled(true); - } - - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setHomeButtonEnabled(true); - - if (savedInstanceState != null) { - - //m_actionbarUpEnabled = savedInstanceState.getBoolean("actionbarUpEnabled"); - //m_actionbarRevertDepth = savedInstanceState.getInt("actionbarRevertDepth"); - m_feedIsSelected = savedInstanceState.getBoolean("feedIsSelected"); - //m_feedWasSelected = savedInstanceState.getBoolean("feedWasSelected"); - - /* if (findViewById(R.id.sw600dp_port_anchor) != null && m_feedWasSelected && m_slidingMenu != null) { - m_slidingMenu.setBehindWidth(getScreenWidthInPixel() * 2/3); - } */ - - if (m_drawerLayout != null && m_feedIsSelected == false) { - m_drawerLayout.openDrawer(Gravity.START); - } - - } else { - if (m_drawerLayout != null) { - m_drawerLayout.openDrawer(Gravity.START); - } - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - - if (m_prefs.getBoolean("enable_cats", false)) { - ft.replace(R.id.feeds_fragment, new OfflineFeedCategoriesFragment(), FRAG_CATS); - } else { - ft.replace(R.id.feeds_fragment, new OfflineFeedsFragment(), FRAG_FEEDS); - } - - ft.commit(); - } - } - - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - // Sync the toggle state after onRestoreInstanceState has occurred. - if (m_drawerToggle != null) m_drawerToggle.syncState(); - } - - public void openFeedArticles(int feedId, boolean isCat) { - if (isSmallScreen()) { - Intent intent = new Intent(OfflineFeedsActivity.this, OfflineHeadlinesActivity.class); - - intent.putExtra("feed", feedId); - intent.putExtra("isCat", isCat); - intent.putExtra("article", 0); - startActivityForResult(intent, 0); - } - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (m_drawerToggle != null && m_drawerToggle.onOptionsItemSelected(item)) { - return true; - } - - switch (item.getItemId()) { - case R.id.headlines_toggle_sort_order: - /* SharedPreferences.Editor editor = m_prefs.edit(); - editor.putBoolean("offline_oldest_first", !m_prefs.getBoolean("offline_oldest_first", false)); - editor.commit(); - refresh(); */ - - Dialog dialog = new Dialog(this); - - int selectedIndex = m_prefs.getBoolean("offline_oldest_first", false) ? 1 : 0; - - AlertDialog.Builder builder = new AlertDialog.Builder(this) - .setTitle(getString(R.string.headlines_sort_articles_title)) - .setSingleChoiceItems( - new String[] { - getString(R.string.headlines_sort_default), - getString(R.string.headlines_sort_oldest_first) - }, - selectedIndex, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int which) { - switch (which) { - case 0: - if (true) { - SharedPreferences.Editor editor = m_prefs.edit(); - editor.putBoolean("offline_oldest_first", false); - editor.apply(); - } - break; - case 1: - if (true) { - SharedPreferences.Editor editor = m_prefs.edit(); - editor.putBoolean("offline_oldest_first", true); - editor.apply(); - } - break; - } - dialog.cancel(); - - refresh(); - } - }); - - dialog = builder.create(); - dialog.show(); - - return true; - /* case R.id.show_feeds: - setUnreadOnly(!getUnreadOnly()); - invalidateOptionsMenu(); - refresh(); - return true; */ - default: - Log.d(TAG, "onOptionsItemSelected, unhandled id=" + item.getItemId()); - return super.onOptionsItemSelected(item); - } - } - - @Override - public void onSaveInstanceState(Bundle out) { - super.onSaveInstanceState(out); - - out.putBoolean("feedIsSelected", m_feedIsSelected); - - GlobalState.getInstance().save(out); - } - - public void initMenu() { - super.initMenu(); - - if (m_menu != null) { - Fragment ff = getSupportFragmentManager().findFragmentByTag(FRAG_FEEDS); - Fragment cf = getSupportFragmentManager().findFragmentByTag(FRAG_CATS); - OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - - /* if (m_drawerLayout != null) { - boolean isDrawerOpen = m_drawerLayout.isDrawerOpen(Gravity.START); - - m_menu.setGroupVisible(R.id.menu_group_feeds, isDrawerOpen); - m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.isAdded() && !isDrawerOpen); - } else { - m_menu.setGroupVisible(R.id.menu_group_feeds, (ff != null && ff.isAdded()) || (cf != null && cf.isAdded())); - m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.isAdded()); - } */ - - m_menu.setGroupVisible(R.id.menu_group_feeds, (ff != null && ff.isAdded()) || (cf != null && cf.isAdded())); - m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.isAdded()); - - //m_menu.findItem(R.id.headlines_toggle_sidebar).setVisible(false); - - /* MenuItem item = m_menu.findItem(R.id.show_feeds); - - if (getUnreadOnly()) { - item.setTitle(R.string.menu_all_feeds); - } else { - item.setTitle(R.string.menu_unread_feeds); - } */ - } - } - - public void onCatSelected(int catId) { - onCatSelected(catId, m_prefs.getBoolean("browse_cats_like_feeds", false)); - } - - public void onCatSelected(int catId, boolean openAsFeed) { - OfflineFeedCategoriesFragment fc = (OfflineFeedCategoriesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_CATS); - - if (openAsFeed) { - if (fc != null) { - fc.setSelectedFeedId(catId); - } - - onFeedSelected(catId, true, true); - } else { - if (fc != null) { - fc.setSelectedFeedId(-1); - } - - FragmentTransaction ft = getSupportFragmentManager() - .beginTransaction(); - - OfflineFeedsFragment ff = new OfflineFeedsFragment(); - ff.initialize(catId, true); - - ft.replace(R.id.feeds_fragment, ff, FRAG_FEEDS); - ft.addToBackStack(null); - - //getSupportActionBar().setDisplayHomeAsUpEnabled(true); - //m_actionbarUpEnabled = true; - //m_actionbarRevertDepth = m_actionbarRevertDepth + 1; - - ft.commit(); - } - } - - @Override - public void onBackPressed() { - if (m_drawerLayout != null && !m_drawerLayout.isDrawerOpen(Gravity.START) && - (getSupportFragmentManager().getBackStackEntryCount() > 0 || m_feedIsSelected)) { - - m_drawerLayout.openDrawer(Gravity.START); - } else { - super.onBackPressed(); - } - } - - public void onFeedSelected(int feedId) { - onFeedSelected(feedId, false, true); - } - - public void onFeedSelected(final int feedId, final boolean isCat, boolean open) { - - if (open) { - - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - FragmentTransaction ft = getSupportFragmentManager() - .beginTransaction(); - - OfflineHeadlinesFragment hf = new OfflineHeadlinesFragment(); - hf.initialize(feedId, isCat, false); - ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); - - ft.commit(); - - m_feedIsSelected = true; - //m_feedWasSelected = true; - - if (m_drawerLayout != null) { - /* if (findViewById(R.id.sw600dp_port_anchor) != null) { - m_slidingMenu.setBehindWidth(getScreenWidthInPixel() * 2/3); - } */ - - m_drawerLayout.closeDrawers(); - - //getSupportActionBar().setDisplayHomeAsUpEnabled(true); - //m_actionbarUpEnabled = true; - } - } - }, 10); - } - } - - @Override - public void onArticleSelected(int articleId, boolean open) { - - if (!open) { - SQLiteStatement stmt = getWritableDb().compileStatement( - "UPDATE articles SET modified = 1, unread = 0 " + "WHERE " + BaseColumns._ID - + " = ?"); - - stmt.bindLong(1, articleId); - stmt.execute(); - stmt.close(); - } - - invalidateOptionsMenu(); - - if (open) { - OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - - Intent intent = new Intent(OfflineFeedsActivity.this, OfflineHeadlinesActivity.class); - intent.putExtra("feed", hf.getFeedId()); - intent.putExtra("isCat", hf.getFeedIsCat()); - intent.putExtra("article", articleId); - - startActivityForResult(intent, 0); - - } else { - refresh(); - } - - } - - @Override - public void onArticleSelected(int articleId) { - onArticleSelected(articleId, true); - } -} diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedsFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedsFragment.java index 59ee674e..7ef733b3 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedsFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedsFragment.java @@ -35,7 +35,7 @@ public class OfflineFeedsFragment extends BaseFeedlistFragment implements OnItem private int m_catId = -1; private boolean m_enableFeedIcons; private Cursor m_cursor; - private OfflineFeedsActivity m_activity; + private OfflineMasterActivity m_activity; private SwipeRefreshLayout m_swipeLayout; private boolean m_enableParentBtn = false; private ListView m_list; @@ -80,7 +80,7 @@ public class OfflineFeedsFragment extends BaseFeedlistFragment implements OnItem public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { - getActivity().getMenuInflater().inflate(R.menu.feed_menu, menu); + getActivity().getMenuInflater().inflate(R.menu.context_feed, menu); menu.findItem(R.id.create_shortcut).setEnabled(false); @@ -192,7 +192,7 @@ public class OfflineFeedsFragment extends BaseFeedlistFragment implements OnItem public void onAttach(Activity activity) { super.onAttach(activity); - m_activity = (OfflineFeedsActivity)activity; + m_activity = (OfflineMasterActivity)activity; m_prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()); m_prefs.registerOnSharedPreferenceChangeListener(this); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesActivity.java deleted file mode 100644 index 5fb97a3d..00000000 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesActivity.java +++ /dev/null @@ -1,206 +0,0 @@ -package org.fox.ttrss.offline; - -import android.annotation.SuppressLint; -import android.content.Intent; -import android.content.SharedPreferences; -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.provider.BaseColumns; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.widget.Toolbar; -import android.util.Log; -import android.view.MenuItem; -import android.view.View; - -import org.fox.ttrss.GlobalState; -import org.fox.ttrss.R; - -public class OfflineHeadlinesActivity extends OfflineActivity implements OfflineHeadlinesEventListener { - private final String TAG = this.getClass().getSimpleName(); - - protected SharedPreferences m_prefs; - - private ActionBarDrawerToggle m_drawerToggle; - private DrawerLayout m_drawerLayout; - - @SuppressLint("NewApi") - @Override - public void onCreate(Bundle savedInstanceState) { - m_prefs = PreferenceManager - .getDefaultSharedPreferences(getApplicationContext()); - - setAppTheme(m_prefs); - - super.onCreate(savedInstanceState); - - setContentView(R.layout.activity_headlines_articles); - - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - m_drawerLayout = (DrawerLayout) findViewById(R.id.headlines_drawer); - - if (m_drawerLayout != null) { - - m_drawerToggle = new ActionBarDrawerToggle(this, m_drawerLayout, R.string.blank, R.string.blank) { - @Override - public void onDrawerOpened(View drawerView) { - super.onDrawerOpened(drawerView); - - getSupportActionBar().show(); - - invalidateOptionsMenu(); - } - - @Override - public void onDrawerClosed(View drawerView) { - super.onDrawerClosed(drawerView); - - invalidateOptionsMenu(); - } - }; - - m_drawerLayout.setDrawerListener(m_drawerToggle); - m_drawerToggle.setDrawerIndicatorEnabled(true); - - } - - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setHomeButtonEnabled(true); - - setSmallScreen(findViewById(R.id.sw600dp_anchor) == null); - - if (savedInstanceState == null) { - Intent i = getIntent(); - - if (i.getExtras() != null) { - int feedId = i.getIntExtra("feed", 0); - boolean isCat = i.getBooleanExtra("isCat", false); - int articleId = i.getIntExtra("article", 0); - String searchQuery = i.getStringExtra("searchQuery"); - - OfflineHeadlinesFragment hf = new OfflineHeadlinesFragment(); - hf.initialize(feedId, isCat, true); - - OfflineArticlePager af = new OfflineArticlePager(); - af.initialize(articleId, feedId, isCat); - - hf.setActiveArticleId(articleId); - - hf.setSearchQuery(searchQuery); - af.setSearchQuery(searchQuery); - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - - ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); - ft.replace(R.id.article_fragment, af, FRAG_ARTICLE); - - ft.commit(); - - Cursor c; - - if (isCat) { - c = getCatById(feedId); - } else { - c = getFeedById(feedId); - } - - if (c != null) { - setTitle(c.getString(c.getColumnIndex("title"))); - c.close(); - } - - } - } - } - - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - // Sync the toggle state after onRestoreInstanceState has occurred. - if (m_drawerToggle != null) m_drawerToggle.syncState(); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (m_drawerToggle != null && m_drawerToggle.onOptionsItemSelected(item)) { - return true; - } - - switch (item.getItemId()) { - case android.R.id.home: - finish(); - return true; - default: - Log.d(TAG, "onOptionsItemSelected, unhandled id=" + item.getItemId()); - return super.onOptionsItemSelected(item); - } - } - - @Override - public void onArticleSelected(int articleId, boolean open) { - - if (!open) { - SQLiteStatement stmt = getWritableDb().compileStatement( - "UPDATE articles SET modified = 1, unread = 0 " + "WHERE " + BaseColumns._ID - + " = ?"); - - stmt.bindLong(1, articleId); - stmt.execute(); - stmt.close(); - } - - if (open) { - if (m_drawerLayout != null) { - m_drawerLayout.closeDrawers(); - } - - OfflineArticlePager af = (OfflineArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); - - af.setArticleId(articleId); - } else { - OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - - hf.setActiveArticleId(articleId); - } - - GlobalState.getInstance().m_selectedArticleId = articleId; - - invalidateOptionsMenu(); - refresh(); - } - - @Override - protected void initMenu() { - super.initMenu(); - - if (m_menu != null) { - m_menu.setGroupVisible(R.id.menu_group_feeds, false); - - //OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - - m_menu.setGroupVisible(R.id.menu_group_headlines, !isPortrait() && !isSmallScreen()); - //m_menu.findItem(R.id.headlines_toggle_sidebar).setVisible(!isPortrait() && !isSmallScreen()); - - Fragment af = getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); - - m_menu.setGroupVisible(R.id.menu_group_article, af != null); - - m_menu.findItem(R.id.search).setVisible(false); - } - } - - @Override - public void onArticleSelected(int articleId) { - onArticleSelected(articleId, true); - } - - @Override - public void onBackPressed() { - super.onBackPressed(); - } -} diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java index 1b89c8ac..8421d007 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java @@ -38,8 +38,8 @@ import android.widget.TextView; import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.util.ColorGenerator; +import org.fox.ttrss.Application; import org.fox.ttrss.CommonActivity; -import org.fox.ttrss.GlobalState; import org.fox.ttrss.R; import org.jsoup.Jsoup; @@ -214,7 +214,7 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { - getActivity().getMenuInflater().inflate(R.menu.headlines_context_menu, menu); + getActivity().getMenuInflater().inflate(R.menu.context_headlines, menu); if (getSelectedArticleCount() > 0) { menu.setHeaderTitle(R.string.headline_context_multiple); @@ -238,9 +238,9 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis public void onResume() { super.onResume(); - if (GlobalState.getInstance().m_selectedArticleId != 0) { - m_activeArticleId = GlobalState.getInstance().m_selectedArticleId; - GlobalState.getInstance().m_selectedArticleId = 0; + if (Application.getInstance().m_selectedArticleId != 0) { + m_activeArticleId = Application.getInstance().m_selectedArticleId; + Application.getInstance().m_selectedArticleId = 0; } if (m_activeArticleId != 0) { diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineMasterActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineMasterActivity.java new file mode 100644 index 00000000..52de0c28 --- /dev/null +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineMasterActivity.java @@ -0,0 +1,355 @@ +package org.fox.ttrss.offline; + +import android.annotation.SuppressLint; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.sqlite.SQLiteStatement; +import android.os.Bundle; +import android.os.Handler; +import android.preference.PreferenceManager; +import android.provider.BaseColumns; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.Gravity; +import android.view.MenuItem; +import android.view.View; + +import org.fox.ttrss.Application; +import org.fox.ttrss.R; + +public class OfflineMasterActivity extends OfflineActivity implements OfflineHeadlinesEventListener { + private final String TAG = this.getClass().getSimpleName(); + + //private boolean m_actionbarUpEnabled = false; + //private int m_actionbarRevertDepth = 0; + private boolean m_feedIsSelected = false; + //private boolean m_feedWasSelected = false; + + private ActionBarDrawerToggle m_drawerToggle; + private DrawerLayout m_drawerLayout; + + @SuppressLint("NewApi") + @Override + public void onCreate(Bundle savedInstanceState) { + m_prefs = PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()); + + setAppTheme(m_prefs); + + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_master); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + setSmallScreen(findViewById(R.id.sw600dp_anchor) == null); + + Application.getInstance().load(savedInstanceState); + + m_drawerLayout = (DrawerLayout) findViewById(R.id.headlines_drawer); + + if (m_drawerLayout != null) { + + m_drawerToggle = new ActionBarDrawerToggle(this, m_drawerLayout, R.string.blank, R.string.blank) { + @Override + public void onDrawerOpened(View drawerView) { + invalidateOptionsMenu(); + } + + @Override + public void onDrawerClosed(View drawerView) { + invalidateOptionsMenu(); + } + }; + + m_drawerLayout.setDrawerListener(m_drawerToggle); + m_drawerToggle.setDrawerIndicatorEnabled(true); + } + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setHomeButtonEnabled(true); + + if (savedInstanceState != null) { + + //m_actionbarUpEnabled = savedInstanceState.getBoolean("actionbarUpEnabled"); + //m_actionbarRevertDepth = savedInstanceState.getInt("actionbarRevertDepth"); + m_feedIsSelected = savedInstanceState.getBoolean("feedIsSelected"); + //m_feedWasSelected = savedInstanceState.getBoolean("feedWasSelected"); + + /* if (findViewById(R.id.sw600dp_port_anchor) != null && m_feedWasSelected && m_slidingMenu != null) { + m_slidingMenu.setBehindWidth(getScreenWidthInPixel() * 2/3); + } */ + + if (m_drawerLayout != null && m_feedIsSelected == false) { + m_drawerLayout.openDrawer(Gravity.START); + } + + } else { + if (m_drawerLayout != null) { + m_drawerLayout.openDrawer(Gravity.START); + } + + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + + if (m_prefs.getBoolean("enable_cats", false)) { + ft.replace(R.id.feeds_fragment, new OfflineFeedCategoriesFragment(), FRAG_CATS); + } else { + ft.replace(R.id.feeds_fragment, new OfflineFeedsFragment(), FRAG_FEEDS); + } + + ft.commit(); + } + } + + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + // Sync the toggle state after onRestoreInstanceState has occurred. + if (m_drawerToggle != null) m_drawerToggle.syncState(); + } + + public void openFeedArticles(int feedId, boolean isCat) { + if (isSmallScreen()) { + Intent intent = new Intent(OfflineMasterActivity.this, OfflineDetailActivity.class); + + intent.putExtra("feed", feedId); + intent.putExtra("isCat", isCat); + intent.putExtra("article", 0); + startActivityForResult(intent, 0); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (m_drawerToggle != null && m_drawerToggle.onOptionsItemSelected(item)) { + return true; + } + + switch (item.getItemId()) { + case R.id.headlines_toggle_sort_order: + /* SharedPreferences.Editor editor = m_prefs.edit(); + editor.putBoolean("offline_oldest_first", !m_prefs.getBoolean("offline_oldest_first", false)); + editor.commit(); + refresh(); */ + + Dialog dialog = new Dialog(this); + + int selectedIndex = m_prefs.getBoolean("offline_oldest_first", false) ? 1 : 0; + + AlertDialog.Builder builder = new AlertDialog.Builder(this) + .setTitle(getString(R.string.headlines_sort_articles_title)) + .setSingleChoiceItems( + new String[] { + getString(R.string.headlines_sort_default), + getString(R.string.headlines_sort_oldest_first) + }, + selectedIndex, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + switch (which) { + case 0: + if (true) { + SharedPreferences.Editor editor = m_prefs.edit(); + editor.putBoolean("offline_oldest_first", false); + editor.apply(); + } + break; + case 1: + if (true) { + SharedPreferences.Editor editor = m_prefs.edit(); + editor.putBoolean("offline_oldest_first", true); + editor.apply(); + } + break; + } + dialog.cancel(); + + refresh(); + } + }); + + dialog = builder.create(); + dialog.show(); + + return true; + /* case R.id.show_feeds: + setUnreadOnly(!getUnreadOnly()); + invalidateOptionsMenu(); + refresh(); + return true; */ + default: + Log.d(TAG, "onOptionsItemSelected, unhandled id=" + item.getItemId()); + return super.onOptionsItemSelected(item); + } + } + + @Override + public void onSaveInstanceState(Bundle out) { + super.onSaveInstanceState(out); + + out.putBoolean("feedIsSelected", m_feedIsSelected); + + Application.getInstance().save(out); + } + + public void initMenu() { + super.initMenu(); + + if (m_menu != null) { + Fragment ff = getSupportFragmentManager().findFragmentByTag(FRAG_FEEDS); + Fragment cf = getSupportFragmentManager().findFragmentByTag(FRAG_CATS); + OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + + /* if (m_drawerLayout != null) { + boolean isDrawerOpen = m_drawerLayout.isDrawerOpen(Gravity.START); + + m_menu.setGroupVisible(R.id.menu_group_feeds, isDrawerOpen); + m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.isAdded() && !isDrawerOpen); + } else { + m_menu.setGroupVisible(R.id.menu_group_feeds, (ff != null && ff.isAdded()) || (cf != null && cf.isAdded())); + m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.isAdded()); + } */ + + m_menu.setGroupVisible(R.id.menu_group_feeds, (ff != null && ff.isAdded()) || (cf != null && cf.isAdded())); + m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.isAdded()); + + //m_menu.findItem(R.id.headlines_toggle_sidebar).setVisible(false); + + /* MenuItem item = m_menu.findItem(R.id.show_feeds); + + if (getUnreadOnly()) { + item.setTitle(R.string.menu_all_feeds); + } else { + item.setTitle(R.string.menu_unread_feeds); + } */ + } + } + + public void onCatSelected(int catId) { + onCatSelected(catId, m_prefs.getBoolean("browse_cats_like_feeds", false)); + } + + public void onCatSelected(int catId, boolean openAsFeed) { + OfflineFeedCategoriesFragment fc = (OfflineFeedCategoriesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_CATS); + + if (openAsFeed) { + if (fc != null) { + fc.setSelectedFeedId(catId); + } + + onFeedSelected(catId, true, true); + } else { + if (fc != null) { + fc.setSelectedFeedId(-1); + } + + FragmentTransaction ft = getSupportFragmentManager() + .beginTransaction(); + + OfflineFeedsFragment ff = new OfflineFeedsFragment(); + ff.initialize(catId, true); + + ft.replace(R.id.feeds_fragment, ff, FRAG_FEEDS); + ft.addToBackStack(null); + + //getSupportActionBar().setDisplayHomeAsUpEnabled(true); + //m_actionbarUpEnabled = true; + //m_actionbarRevertDepth = m_actionbarRevertDepth + 1; + + ft.commit(); + } + } + + @Override + public void onBackPressed() { + if (m_drawerLayout != null && !m_drawerLayout.isDrawerOpen(Gravity.START) && + (getSupportFragmentManager().getBackStackEntryCount() > 0 || m_feedIsSelected)) { + + m_drawerLayout.openDrawer(Gravity.START); + } else { + super.onBackPressed(); + } + } + + public void onFeedSelected(int feedId) { + onFeedSelected(feedId, false, true); + } + + public void onFeedSelected(final int feedId, final boolean isCat, boolean open) { + + if (open) { + + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + FragmentTransaction ft = getSupportFragmentManager() + .beginTransaction(); + + OfflineHeadlinesFragment hf = new OfflineHeadlinesFragment(); + hf.initialize(feedId, isCat, false); + ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); + + ft.commit(); + + m_feedIsSelected = true; + //m_feedWasSelected = true; + + if (m_drawerLayout != null) { + /* if (findViewById(R.id.sw600dp_port_anchor) != null) { + m_slidingMenu.setBehindWidth(getScreenWidthInPixel() * 2/3); + } */ + + m_drawerLayout.closeDrawers(); + + //getSupportActionBar().setDisplayHomeAsUpEnabled(true); + //m_actionbarUpEnabled = true; + } + } + }, 10); + } + } + + @Override + public void onArticleSelected(int articleId, boolean open) { + + if (!open) { + SQLiteStatement stmt = getWritableDb().compileStatement( + "UPDATE articles SET modified = 1, unread = 0 " + "WHERE " + BaseColumns._ID + + " = ?"); + + stmt.bindLong(1, articleId); + stmt.execute(); + stmt.close(); + } + + invalidateOptionsMenu(); + + if (open) { + OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + + Intent intent = new Intent(OfflineMasterActivity.this, OfflineDetailActivity.class); + intent.putExtra("feed", hf.getFeedId()); + intent.putExtra("isCat", hf.getFeedIsCat()); + intent.putExtra("article", articleId); + + startActivityForResult(intent, 0); + + } else { + refresh(); + } + + } + + @Override + public void onArticleSelected(int articleId) { + onArticleSelected(articleId, true); + } +} diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/share/CommonShareActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/share/CommonShareActivity.java index 165d38f7..af06b28a 100644 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/share/CommonShareActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/share/CommonShareActivity.java @@ -1,17 +1,11 @@ package org.fox.ttrss.share; -import java.util.HashMap; - import org.fox.ttrss.ApiRequest; import org.fox.ttrss.PreferencesActivity; import org.fox.ttrss.R; import org.fox.ttrss.util.SimpleLoginManager; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - import android.app.AlertDialog; -import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; @@ -127,7 +121,7 @@ public abstract class CommonShareActivity extends CommonActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.share_menu, menu); + inflater.inflate(R.menu.activity_share, menu); return true; } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/tasker/TaskerSettingsActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/tasker/TaskerSettingsActivity.java index 0770fc00..9cddfc5a 100644 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/tasker/TaskerSettingsActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/tasker/TaskerSettingsActivity.java @@ -1,8 +1,6 @@ package org.fox.ttrss.tasker; import org.fox.ttrss.R; -import org.fox.ttrss.offline.OfflineDownloadService; -import org.fox.ttrss.offline.OfflineUploadService; import android.app.Activity; import android.content.Intent; @@ -30,7 +28,7 @@ public class TaskerSettingsActivity extends Activity { int actionId = settings != null ? settings.getInt("actionId", -1) : -1; - setContentView(R.layout.tasker_settings); + setContentView(R.layout.settings_tasker); RadioGroup radioGroup = (RadioGroup) findViewById(R.id.taskerActions); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/FontSizeDialogPreference.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/FontSizeDialogPreference.java index 87a89c16..b280c6f6 100644 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/FontSizeDialogPreference.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/FontSizeDialogPreference.java @@ -45,7 +45,7 @@ public class FontSizeDialogPreference extends DialogPreference { setProgressTextSuffix(" " + context.getString(R.string.font_size_dialog_suffix)); // set layout - setDialogLayoutResource(R.layout.dialog_select_font_size); + setDialogLayoutResource(R.layout.settings_select_font_size); setPositiveButtonText(android.R.string.ok); setNegativeButtonText(android.R.string.cancel); setDialogIcon(null); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java index 2d956284..453f5f50 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java @@ -25,7 +25,7 @@ public class HeadlinesRequest extends ApiRequest { private int m_offset = 0; private OnlineActivity m_activity; - private ArticleList m_articles; // = new ArticleList(); //GlobalState.getInstance().m_loadedArticles; + private ArticleList m_articles; // = new ArticleList(); //Application.getInstance().m_loadedArticles; private Feed m_feed; public HeadlinesRequest(Context context, OnlineActivity activity, final Feed feed, ArticleList articles) { @@ -41,7 +41,7 @@ public class HeadlinesRequest extends ApiRequest { try { // check if we are returning results for correct feed - /* if (GlobalState.getInstance().m_activeFeed != null && !m_feed.equals(GlobalState.getInstance().m_activeFeed)) { + /* if (Application.getInstance().m_activeFeed != null && !m_feed.equals(Application.getInstance().m_activeFeed)) { Log.d(TAG, "received results for wrong feed, bailing out."); return; } */ diff --git a/org.fox.ttrss/src/main/res/layout-sw600dp-land/activity_detail.xml b/org.fox.ttrss/src/main/res/layout-sw600dp-land/activity_detail.xml new file mode 100644 index 00000000..0e904edc --- /dev/null +++ b/org.fox.ttrss/src/main/res/layout-sw600dp-land/activity_detail.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout-sw600dp-land/activity_headlines_articles.xml b/org.fox.ttrss/src/main/res/layout-sw600dp-land/activity_headlines_articles.xml deleted file mode 100644 index 0e904edc..00000000 --- a/org.fox.ttrss/src/main/res/layout-sw600dp-land/activity_headlines_articles.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout-sw600dp-land/activity_master.xml b/org.fox.ttrss/src/main/res/layout-sw600dp-land/activity_master.xml new file mode 100644 index 00000000..c89f3baa --- /dev/null +++ b/org.fox.ttrss/src/main/res/layout-sw600dp-land/activity_master.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + diff --git a/org.fox.ttrss/src/main/res/layout-sw600dp-land/headlines.xml b/org.fox.ttrss/src/main/res/layout-sw600dp-land/headlines.xml deleted file mode 100644 index c89f3baa..00000000 --- a/org.fox.ttrss/src/main/res/layout-sw600dp-land/headlines.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/org.fox.ttrss/src/main/res/layout-sw600dp-port/activity_detail.xml b/org.fox.ttrss/src/main/res/layout-sw600dp-port/activity_detail.xml new file mode 100644 index 00000000..47c84639 --- /dev/null +++ b/org.fox.ttrss/src/main/res/layout-sw600dp-port/activity_detail.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout-sw600dp-port/activity_headlines_articles.xml b/org.fox.ttrss/src/main/res/layout-sw600dp-port/activity_headlines_articles.xml deleted file mode 100644 index 47c84639..00000000 --- a/org.fox.ttrss/src/main/res/layout-sw600dp-port/activity_headlines_articles.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/activity_detail.xml b/org.fox.ttrss/src/main/res/layout/activity_detail.xml new file mode 100644 index 00000000..e9cfdc35 --- /dev/null +++ b/org.fox.ttrss/src/main/res/layout/activity_detail.xml @@ -0,0 +1,24 @@ + + + + + + + + + + \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/activity_headlines_articles.xml b/org.fox.ttrss/src/main/res/layout/activity_headlines_articles.xml deleted file mode 100644 index e9cfdc35..00000000 --- a/org.fox.ttrss/src/main/res/layout/activity_headlines_articles.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/activity_login.xml b/org.fox.ttrss/src/main/res/layout/activity_login.xml new file mode 100644 index 00000000..add839b5 --- /dev/null +++ b/org.fox.ttrss/src/main/res/layout/activity_login.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/activity_master.xml b/org.fox.ttrss/src/main/res/layout/activity_master.xml new file mode 100644 index 00000000..69ef2c15 --- /dev/null +++ b/org.fox.ttrss/src/main/res/layout/activity_master.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + diff --git a/org.fox.ttrss/src/main/res/layout/activity_preferences.xml b/org.fox.ttrss/src/main/res/layout/activity_preferences.xml new file mode 100644 index 00000000..431b7da4 --- /dev/null +++ b/org.fox.ttrss/src/main/res/layout/activity_preferences.xml @@ -0,0 +1,22 @@ + + + + + + + + + \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/dialog_select_font_size.xml b/org.fox.ttrss/src/main/res/layout/dialog_select_font_size.xml deleted file mode 100644 index f77cc151..00000000 --- a/org.fox.ttrss/src/main/res/layout/dialog_select_font_size.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/headlines.xml b/org.fox.ttrss/src/main/res/layout/headlines.xml deleted file mode 100644 index 69ef2c15..00000000 --- a/org.fox.ttrss/src/main/res/layout/headlines.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/org.fox.ttrss/src/main/res/layout/login.xml b/org.fox.ttrss/src/main/res/layout/login.xml deleted file mode 100755 index add839b5..00000000 --- a/org.fox.ttrss/src/main/res/layout/login.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/preferences.xml b/org.fox.ttrss/src/main/res/layout/preferences.xml deleted file mode 100755 index 431b7da4..00000000 --- a/org.fox.ttrss/src/main/res/layout/preferences.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/settings_select_font_size.xml b/org.fox.ttrss/src/main/res/layout/settings_select_font_size.xml new file mode 100644 index 00000000..f77cc151 --- /dev/null +++ b/org.fox.ttrss/src/main/res/layout/settings_select_font_size.xml @@ -0,0 +1,22 @@ + + + + + + + + \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/settings_tasker.xml b/org.fox.ttrss/src/main/res/layout/settings_tasker.xml new file mode 100644 index 00000000..efdd76ab --- /dev/null +++ b/org.fox.ttrss/src/main/res/layout/settings_tasker.xml @@ -0,0 +1,36 @@ + + +