diff --git a/res/layout/article_fragment.xml b/res/layout/article_fragment.xml index cec8e0b2..31a105e4 100644 --- a/res/layout/article_fragment.xml +++ b/res/layout/article_fragment.xml @@ -1,7 +1,7 @@ - - + + diff --git a/res/layout/feeds_fragment.xml b/res/layout/feeds_fragment.xml index c66895b3..32f2d229 100644 --- a/res/layout/feeds_fragment.xml +++ b/res/layout/feeds_fragment.xml @@ -1,7 +1,7 @@ + android:layout_height="fill_parent" android:layout_width="match_parent" android:id="@+id/feeds_fragment"> diff --git a/res/layout/main.xml b/res/layout/main.xml index fb049eeb..9593924a 100644 --- a/res/layout/main.xml +++ b/res/layout/main.xml @@ -1,22 +1,16 @@ - - - - + + + + - - - - - - - - - - + + + + diff --git a/src/org/fox/ttrss/ArticleFragment.java b/src/org/fox/ttrss/ArticleFragment.java index b2323fa5..ab92f9bf 100644 --- a/src/org/fox/ttrss/ArticleFragment.java +++ b/src/org/fox/ttrss/ArticleFragment.java @@ -1,15 +1,13 @@ package org.fox.ttrss; -import java.sql.SQLData; +import java.net.URLEncoder; + +import org.jsoup.Jsoup; import android.app.Activity; import android.app.Fragment; import android.content.SharedPreferences; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; -import android.preference.PreferenceManager; -import android.provider.BaseColumns; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -22,30 +20,42 @@ public class ArticleFragment extends Fragment { protected SharedPreferences m_prefs; - private int m_articleId; + //private int m_articleId; private String m_sessionId; + private Article m_article; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (savedInstanceState != null) { m_sessionId = savedInstanceState.getString("sessionId"); - m_articleId = savedInstanceState.getInt("articleId"); + //m_articleId = savedInstanceState.getInt("articleId"); } View view = inflater.inflate(R.layout.article_fragment, container, false); + if (m_article != null) { + + TextView title = (TextView)view.findViewById(R.id.title); + + if (title != null) { + title.setText(m_article.title); + } + + WebView web = (WebView)view.findViewById(R.id.content); + + if (web != null) { + + // this is ridiculous + String content = "" + URLEncoder.encode(m_article.content).replace('+', ' ') + ""; + + web.loadData(content, "text/html", "utf-8"); + } + } + return view; } - public void initialize(String sessionId, int articleId, SharedPreferences prefs) { - m_articleId = articleId; - m_prefs = prefs; - m_sessionId = sessionId; - - Log.d(TAG, "Article: " + articleId); - } - @Override public void onDestroy() { super.onDestroy(); @@ -56,13 +66,18 @@ public class ArticleFragment extends Fragment { super.onSaveInstanceState(out); out.putString("sessionId", m_sessionId); - out.putInt("articleId", m_articleId); + //out.putInt("articleId", m_articleId); } @Override public void onAttach(Activity activity) { super.onAttach(activity); - m_prefs = PreferenceManager.getDefaultSharedPreferences(activity.getApplicationContext()); + + m_sessionId = ((MainActivity)activity).getSessionId(); + m_article = ((MainActivity)activity).getSelectedArticle(); + + //m_prefs = PreferenceManager.getDefaultSharedPreferences(activity.getApplicationContext()); + } } diff --git a/src/org/fox/ttrss/FeedsFragment.java b/src/org/fox/ttrss/FeedsFragment.java index b321b48e..40c559ae 100644 --- a/src/org/fox/ttrss/FeedsFragment.java +++ b/src/org/fox/ttrss/FeedsFragment.java @@ -7,11 +7,11 @@ import java.util.List; import android.app.Activity; import android.app.Fragment; -import android.app.FragmentTransaction; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -32,16 +32,32 @@ public class FeedsFragment extends Fragment implements OnItemClickListener { private final String TAG = this.getClass().getSimpleName(); private SharedPreferences m_prefs; private String m_sessionId; - private int m_activeFeedId; + //private int m_activeFeedId; private FeedListAdapter m_adapter; private List m_feeds = new ArrayList(); + private OnFeedSelectedListener m_feedSelectedListener; + + public interface OnFeedSelectedListener { + public void onFeedSelected(Feed feed); + } + + public void showLoading(boolean show) { + View v = getView(); + + if (v != null) { + v = v.findViewById(R.id.loading_container); + + if (v != null) + v.setVisibility(show ? View.VISIBLE : View.GONE); + } + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - + if (savedInstanceState != null) { - m_sessionId = savedInstanceState.getString("sessionId"); - m_activeFeedId = savedInstanceState.getInt("activeFeedId"); + //m_sessionId = savedInstanceState.getString("sessionId"); + //m_activeFeedId = savedInstanceState.getInt("activeFeedId"); } View view = inflater.inflate(R.layout.feeds_fragment, container, false); @@ -52,6 +68,9 @@ public class FeedsFragment extends Fragment implements OnItemClickListener { list.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE); list.setOnItemClickListener(this); + if (m_sessionId != null) + refresh(); + return view; } @@ -63,7 +82,12 @@ public class FeedsFragment extends Fragment implements OnItemClickListener { @Override public void onAttach(Activity activity) { super.onAttach(activity); + m_prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()); + m_feedSelectedListener = (OnFeedSelectedListener) activity; + + m_sessionId = ((MainActivity)activity).getSessionId(); + } @Override @@ -71,29 +95,7 @@ public class FeedsFragment extends Fragment implements OnItemClickListener { super.onSaveInstanceState(out); out.putString("sessionId", m_sessionId); - out.putInt("activeFeedId", m_activeFeedId); - } - - public void setActiveFeedId(int feedId) { - m_activeFeedId = feedId; - } - - public void viewFeed(int feedId) { - //FragmentManager fm = getFragmentManager(); - //HeadlinesFragment hf = (HeadlinesFragment) fm.findFragmentById(R.id.headlines_fragment); - - HeadlinesFragment hf = new HeadlinesFragment(); - hf.initialize(m_sessionId, feedId, m_prefs); - - if (hf != null) { - setActiveFeedId(feedId); - - FragmentTransaction ft = getFragmentManager().beginTransaction(); - ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); - ft.show(getFragmentManager().findFragmentById(R.id.headlines_fragment)); - ft.replace(R.id.headlines_fragment, hf); - ft.commit(); - } + //out.putInt("activeFeedId", m_activeFeedId); } @Override @@ -102,17 +104,10 @@ public class FeedsFragment extends Fragment implements OnItemClickListener { if (list != null) { Feed feed = (Feed)list.getItemAtPosition(position); - - viewFeed(feed.id); + m_feedSelectedListener.onFeedSelected(feed); } } - public void initialize(String sessionId) { - m_sessionId = sessionId; - - refresh(); - } - public void refresh() { FeedsRequest fr = new FeedsRequest(); @@ -170,8 +165,7 @@ public class FeedsFragment extends Fragment implements OnItemClickListener { m_adapter.notifyDataSetInvalidated(); - View v = getView().findViewById(R.id.loading_container); - v.setVisibility(View.GONE); + showLoading(false); } }); } @@ -221,6 +215,8 @@ public class FeedsFragment extends Fragment implements OnItemClickListener { @Override public View getView(int position, View convertView, ViewGroup parent) { + Feed active_feed = ((MainActivity)getActivity()).getActiveFeed(); + View v = convertView; Feed feed = items.get(position); @@ -235,7 +231,7 @@ public class FeedsFragment extends Fragment implements OnItemClickListener { if (tt != null) { tt.setText(feed.title); - if (feed.id == m_activeFeedId) + if (active_feed != null && feed.id == active_feed.id) tt.setTextAppearance(getContext(), R.style.SelectedFeed); else tt.setTextAppearance(getContext(), R.style.Feed); diff --git a/src/org/fox/ttrss/HeadlinesFragment.java b/src/org/fox/ttrss/HeadlinesFragment.java index be7c96eb..10cabeb1 100644 --- a/src/org/fox/ttrss/HeadlinesFragment.java +++ b/src/org/fox/ttrss/HeadlinesFragment.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import org.fox.ttrss.FeedsFragment.OnFeedSelectedListener; import org.jsoup.Jsoup; import android.app.Activity; @@ -34,19 +35,23 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener { protected SharedPreferences m_prefs; private String m_sessionId; - private int m_feedId; - private int m_activeArticleId; + private Feed m_feed; + //private int m_activeArticleId; private ArticleListAdapter m_adapter; private List
m_articles = new ArrayList
(); + private OnArticleSelectedListener m_articleSelectedListener; + public interface OnArticleSelectedListener { + public void onArticleSelected(Article article); + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (savedInstanceState != null) { m_sessionId = savedInstanceState.getString("sessionId"); - m_feedId = savedInstanceState.getInt("feedId"); - m_activeArticleId = savedInstanceState.getInt("activeArticleId"); + //m_feedId = savedInstanceState.getInt("feedId"); + //m_activeArticleId = savedInstanceState.getInt("activeArticleId"); } View view = inflater.inflate(R.layout.headlines_fragment, container, false); @@ -56,6 +61,8 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener { list.setAdapter(m_adapter); list.setOnItemClickListener(this); + if (m_feed != null) refresh(); + return view; } @@ -73,8 +80,12 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener { @Override public void onAttach(Activity activity) { super.onAttach(activity); - m_prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()); + + m_sessionId = ((MainActivity)activity).getSessionId(); + m_feed = ((MainActivity)activity).getActiveFeed(); + + m_articleSelectedListener = (OnArticleSelectedListener) activity; } @Override @@ -83,35 +94,10 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener { if (list != null) { Article article = (Article)list.getItemAtPosition(position); - - viewArticle(article.id); + m_articleSelectedListener.onArticleSelected(article); } } - public void viewArticle(int articleId) { - ArticleFragment frag = new ArticleFragment(); - frag.initialize(m_sessionId, articleId, m_prefs); - - if (frag != null) { - m_activeArticleId = articleId; - - FragmentTransaction ft = getFragmentManager().beginTransaction(); - ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); - ft.show(getFragmentManager().findFragmentById(R.id.article_fragment)); - //ft.hide(getFragmentManager().findFragmentById(R.id.feeds_fragment)); - ft.replace(R.id.article_fragment, frag); - ft.commit(); - } - - } - - public void initialize(String sessionId, int feedId, SharedPreferences prefs) { - m_sessionId = sessionId; - m_feedId = feedId; - m_prefs = prefs; - refresh(); - } - public void refresh() { HeadlinesRequest req = new HeadlinesRequest(); @@ -121,7 +107,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener { { put("op", "getHeadlines"); put("sid", m_sessionId); - put("feed_id", String.valueOf(m_feedId)); + put("feed_id", String.valueOf(m_feed.id)); put("show_content", "true"); put("limit", String.valueOf(30)); put("offset", String.valueOf(0)); @@ -137,8 +123,8 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener { super.onSaveInstanceState(out); out.putString("sessionId", m_sessionId); - out.putInt("feedId", m_feedId); - out.putInt("activeArticleId", m_activeArticleId); + //out.putInt("feedId", m_feedId); + //out.putInt("activeArticleId", m_activeArticleId); } private class HeadlinesRequest extends ApiRequest { diff --git a/src/org/fox/ttrss/MainActivity.java b/src/org/fox/ttrss/MainActivity.java index 1fa20f7e..f458af79 100644 --- a/src/org/fox/ttrss/MainActivity.java +++ b/src/org/fox/ttrss/MainActivity.java @@ -21,12 +21,14 @@ import android.widget.ViewFlipper; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -public class MainActivity extends Activity { +public class MainActivity extends Activity implements FeedsFragment.OnFeedSelectedListener, HeadlinesFragment.OnArticleSelectedListener { private final String TAG = this.getClass().getSimpleName(); private SharedPreferences m_prefs; private String m_themeName = ""; - protected String m_sessionId; + private String m_sessionId; + private Article m_selectedArticle; + private Feed m_activeFeed; protected MenuItem m_syncStatus; @@ -61,22 +63,15 @@ public class MainActivity extends Activity { setContentView(R.layout.main); - /* HeadlinesFragment hf = new HeadlinesFragment(); - FeedsFragment ff = new FeedsFragment(); + HeadlinesFragment hf = new HeadlinesFragment(); ArticleFragment af = new ArticleFragment(); FragmentTransaction ft = getFragmentManager().beginTransaction(); - - ft.add(R.id.main, ff); - ft.add(R.id.main, hf); - ft.add(R.id.main, af); - ft.hide(hf); + ft.replace(R.id.feeds_fragment, new FeedsFragment()); + ft.replace(R.id.headlines_fragment, hf); + ft.replace(R.id.article_fragment, af); ft.hide(af); - ft.commit(); */ - - FragmentTransaction ft = getFragmentManager().beginTransaction(); - ft.hide(getFragmentManager().findFragmentById(R.id.headlines_fragment)); - ft.hide(getFragmentManager().findFragmentById(R.id.article_fragment)); + ft.hide(hf); ft.commit(); LoginRequest ar = new LoginRequest(); @@ -93,13 +88,7 @@ public class MainActivity extends Activity { ar.execute(map); setLoadingStatus(R.string.login_in_progress, true); - - /* ViewFlipper vf = (ViewFlipper) findViewById(R.id.main_flipper); - - if (vf != null) { - vf.showNext(); - } */ - + } public void setLoadingStatus(int status, boolean showProgress) { @@ -176,18 +165,20 @@ public class MainActivity extends Activity { setLoadingStatus(R.string.loading_message, true); - FragmentManager fm = getFragmentManager(); - FeedsFragment ff = (FeedsFragment) fm.findFragmentById(R.id.feeds_fragment); - - if (ff != null) { - ff.initialize(m_sessionId); - } + //FragmentManager fm = getFragmentManager(); + //FeedsFragment ff = (FeedsFragment) fm.findFragmentById(R.id.feeds_fragment); ViewFlipper vf = (ViewFlipper) findViewById(R.id.main_flipper); if (vf != null) { vf.showNext(); } + + FeedsFragment frag = new FeedsFragment(); + + FragmentTransaction ft = getFragmentManager().beginTransaction(); + ft.replace(R.id.feeds_fragment, frag); + ft.commit(); } } else { JsonObject content = rv.get("content").getAsJsonObject(); @@ -212,4 +203,47 @@ public class MainActivity extends Activity { } } } + + @Override + public void onFeedSelected(Feed feed) { + Log.d(TAG, "Selected feed: " + feed.toString()); + + m_activeFeed = feed; + + HeadlinesFragment hf = new HeadlinesFragment(); + //hf.initialize(m_sessionId, feed.id, m_prefs); + + FragmentTransaction ft = getFragmentManager().beginTransaction(); + ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); + ft.show(getFragmentManager().findFragmentById(R.id.headlines_fragment)); + ft.replace(R.id.headlines_fragment, hf); + ft.addToBackStack(null); + ft.commit(); + } + + public Article getSelectedArticle() { + return m_selectedArticle; + } + + @Override + public void onArticleSelected(Article article) { + Log.d(TAG, "Selected article: " + article.toString()); + + m_selectedArticle = article; + + ArticleFragment frag = new ArticleFragment(); + + FragmentTransaction ft = getFragmentManager().beginTransaction(); + ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); + ft.show(getFragmentManager().findFragmentById(R.id.article_fragment)); + //ft.hide(getFragmentManager().findFragmentById(R.id.feeds_fragment)); + ft.replace(R.id.article_fragment, frag); + ft.addToBackStack(null); + ft.commit(); + + } + + public Feed getActiveFeed() { + return m_activeFeed; + } } \ No newline at end of file