properly restore state on orientation change
This commit is contained in:
parent
ccb6b1cb5f
commit
2d9ee319ab
@ -1,8 +1,11 @@
|
|||||||
package org.fox.ttrss;
|
package org.fox.ttrss;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
|
||||||
public class Article {
|
|
||||||
|
public class Article implements Parcelable {
|
||||||
int id;
|
int id;
|
||||||
boolean unread;
|
boolean unread;
|
||||||
boolean marked;
|
boolean marked;
|
||||||
@ -14,5 +17,38 @@ public class Article {
|
|||||||
int feed_id;
|
int feed_id;
|
||||||
List<String> tags;
|
List<String> tags;
|
||||||
String content;
|
String content;
|
||||||
boolean _selected;
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel out, int flags) {
|
||||||
|
out.writeInt(id);
|
||||||
|
out.writeInt(unread ? 1 : 0);
|
||||||
|
out.writeInt(marked ? 1 : 0);
|
||||||
|
out.writeInt(published ? 1 : 0);
|
||||||
|
out.writeInt(updated);
|
||||||
|
out.writeInt(is_updated ? 1 : 0);
|
||||||
|
out.writeString(title);
|
||||||
|
out.writeString(link);
|
||||||
|
out.writeInt(feed_id);
|
||||||
|
out.writeStringList(tags);
|
||||||
|
out.writeString(content);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readFromParcel(Parcel in) {
|
||||||
|
id = in.readInt();
|
||||||
|
unread = in.readInt() == 1;
|
||||||
|
marked = in.readInt() == 1;
|
||||||
|
published = in.readInt() == 1;
|
||||||
|
updated = in.readInt();
|
||||||
|
is_updated = in.readInt() == 1;
|
||||||
|
title = in.readString();
|
||||||
|
link = in.readString();
|
||||||
|
feed_id = in.readInt();
|
||||||
|
in.readStringList(tags);
|
||||||
|
content = in.readString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,15 +22,13 @@ public class ArticleFragment extends Fragment {
|
|||||||
|
|
||||||
protected SharedPreferences m_prefs;
|
protected SharedPreferences m_prefs;
|
||||||
|
|
||||||
private String m_sessionId;
|
|
||||||
private Article m_article;
|
private Article m_article;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
m_sessionId = savedInstanceState.getString("sessionId");
|
m_article = savedInstanceState.getParcelable("article");
|
||||||
//m_articleId = savedInstanceState.getInt("articleId");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
View view = inflater.inflate(R.layout.article_fragment, container, false);
|
View view = inflater.inflate(R.layout.article_fragment, container, false);
|
||||||
@ -94,18 +92,13 @@ public class ArticleFragment extends Fragment {
|
|||||||
public void onSaveInstanceState (Bundle out) {
|
public void onSaveInstanceState (Bundle out) {
|
||||||
super.onSaveInstanceState(out);
|
super.onSaveInstanceState(out);
|
||||||
|
|
||||||
out.putString("sessionId", m_sessionId);
|
out.putParcelable("article", m_article);
|
||||||
//out.putInt("articleId", m_articleId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Activity activity) {
|
public void onAttach(Activity activity) {
|
||||||
super.onAttach(activity);
|
super.onAttach(activity);
|
||||||
|
|
||||||
m_sessionId = ((MainActivity)activity).getSessionId();
|
|
||||||
m_article = ((MainActivity)activity).getSelectedArticle();
|
m_article = ((MainActivity)activity).getSelectedArticle();
|
||||||
|
|
||||||
//m_prefs = PreferenceManager.getDefaultSharedPreferences(activity.getApplicationContext());
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@ import android.app.Fragment;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
@ -42,26 +44,49 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener {
|
|||||||
private final String TAG = this.getClass().getSimpleName();
|
private final String TAG = this.getClass().getSimpleName();
|
||||||
protected SharedPreferences m_prefs;
|
protected SharedPreferences m_prefs;
|
||||||
|
|
||||||
//private String m_sessionId;
|
|
||||||
private Feed m_feed;
|
private Feed m_feed;
|
||||||
//private int m_activeArticleId;
|
|
||||||
private int m_selectedArticleId;
|
private int m_selectedArticleId;
|
||||||
|
|
||||||
private ArticleListAdapter m_adapter;
|
private ArticleListAdapter m_adapter;
|
||||||
private List<Article> m_articles = new ArrayList<Article>();
|
private ArticleList m_articles = new ArticleList();
|
||||||
private OnArticleSelectedListener m_articleSelectedListener;
|
private OnArticleSelectedListener m_articleSelectedListener;
|
||||||
|
|
||||||
public interface OnArticleSelectedListener {
|
public interface OnArticleSelectedListener {
|
||||||
public void onArticleSelected(Article article);
|
public void onArticleSelected(Article article);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class ArticleList extends ArrayList<Article> implements Parcelable {
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel out, int flags) {
|
||||||
|
out.writeInt(this.size());
|
||||||
|
for (Article article : this) {
|
||||||
|
out.writeParcelable(article, flags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readFromParcel(Parcel in) {
|
||||||
|
int length = in.readInt();
|
||||||
|
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
Article article = in.readParcelable(Article.class.getClassLoader());
|
||||||
|
this.add(article);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
//m_sessionId = savedInstanceState.getString("sessionId");
|
|
||||||
|
|
||||||
m_feed = savedInstanceState.getParcelable("feed");
|
m_feed = savedInstanceState.getParcelable("feed");
|
||||||
//m_activeArticleId = savedInstanceState.getInt("activeArticleId");
|
m_articles = savedInstanceState.getParcelable("articles");
|
||||||
|
m_selectedArticleId = savedInstanceState.getInt("selectedArticleId");
|
||||||
}
|
}
|
||||||
|
|
||||||
View view = inflater.inflate(R.layout.headlines_fragment, container, false);
|
View view = inflater.inflate(R.layout.headlines_fragment, container, false);
|
||||||
@ -73,7 +98,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener {
|
|||||||
|
|
||||||
Log.d(TAG, "onCreateView, feed=" + m_feed);
|
Log.d(TAG, "onCreateView, feed=" + m_feed);
|
||||||
|
|
||||||
if (m_feed != null)
|
if (m_feed != null && (m_articles == null || m_articles.size() == 0))
|
||||||
refresh();
|
refresh();
|
||||||
else
|
else
|
||||||
view.findViewById(R.id.loading_container).setVisibility(View.GONE);
|
view.findViewById(R.id.loading_container).setVisibility(View.GONE);
|
||||||
@ -132,7 +157,6 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener {
|
|||||||
put("limit", String.valueOf(30));
|
put("limit", String.valueOf(30));
|
||||||
put("offset", String.valueOf(0));
|
put("offset", String.valueOf(0));
|
||||||
put("view_mode", "adaptive");
|
put("view_mode", "adaptive");
|
||||||
//put("view_mode", "all_articles");
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -144,10 +168,8 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener {
|
|||||||
super.onSaveInstanceState(out);
|
super.onSaveInstanceState(out);
|
||||||
|
|
||||||
out.putParcelable("feed", m_feed);
|
out.putParcelable("feed", m_feed);
|
||||||
|
out.putParcelable("articles", m_articles);
|
||||||
//out.putString("sessionId", m_sessionId);
|
out.putInt("selectedArticleId", m_selectedArticleId);
|
||||||
//out.putInt("feedId", m_feedId);
|
|
||||||
//out.putInt("activeArticleId", m_activeArticleId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class HeadlinesRequest extends ApiRequest {
|
private class HeadlinesRequest extends ApiRequest {
|
||||||
@ -246,17 +268,6 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener {
|
|||||||
|
|
||||||
private ArrayList<Article> m_selectedArticles = new ArrayList<Article>();
|
private ArrayList<Article> m_selectedArticles = new ArrayList<Article>();
|
||||||
|
|
||||||
/* private class ArticleCheckListener implements OnCheckedChangeListener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCheckedChanged(CompoundButton buttonView,
|
|
||||||
boolean isChecked) {
|
|
||||||
|
|
||||||
Log.d(TAG, "onCheckedChanged: " + buttonView + "/" + getContext());
|
|
||||||
}
|
|
||||||
|
|
||||||
} */
|
|
||||||
|
|
||||||
public ArticleListAdapter(Context context, int textViewResourceId, ArrayList<Article> items) {
|
public ArticleListAdapter(Context context, int textViewResourceId, ArrayList<Article> items) {
|
||||||
super(context, textViewResourceId, items);
|
super(context, textViewResourceId, items);
|
||||||
this.items = items;
|
this.items = items;
|
||||||
|
@ -91,6 +91,7 @@ public class MainActivity extends Activity implements FeedsFragment.OnFeedSelect
|
|||||||
m_sessionId = savedInstanceState.getString("sessionId");
|
m_sessionId = savedInstanceState.getString("sessionId");
|
||||||
m_unreadOnly = savedInstanceState.getBoolean("unreadOnly");
|
m_unreadOnly = savedInstanceState.getBoolean("unreadOnly");
|
||||||
m_activeFeed = savedInstanceState.getParcelable("activeFeed");
|
m_activeFeed = savedInstanceState.getParcelable("activeFeed");
|
||||||
|
m_selectedArticle = savedInstanceState.getParcelable("selectedArticle");
|
||||||
}
|
}
|
||||||
|
|
||||||
setContentView(R.layout.main);
|
setContentView(R.layout.main);
|
||||||
@ -99,10 +100,12 @@ public class MainActivity extends Activity implements FeedsFragment.OnFeedSelect
|
|||||||
LinearLayout layout = (LinearLayout)findViewById(R.id.main);
|
LinearLayout layout = (LinearLayout)findViewById(R.id.main);
|
||||||
layout.setLayoutTransition(transitioner);
|
layout.setLayoutTransition(transitioner);
|
||||||
|
|
||||||
findViewById(R.id.article_fragment).setVisibility(View.GONE);
|
if (m_selectedArticle == null)
|
||||||
|
findViewById(R.id.article_fragment).setVisibility(View.GONE);
|
||||||
|
else
|
||||||
|
findViewById(R.id.feeds_fragment).setVisibility(View.GONE);
|
||||||
|
|
||||||
if (m_sessionId != null) {
|
if (m_sessionId != null) {
|
||||||
// restarting, TODO set update timers here?
|
|
||||||
loginSuccess();
|
loginSuccess();
|
||||||
} else {
|
} else {
|
||||||
login();
|
login();
|
||||||
@ -131,7 +134,7 @@ public class MainActivity extends Activity implements FeedsFragment.OnFeedSelect
|
|||||||
out.putString("sessionId", m_sessionId);
|
out.putString("sessionId", m_sessionId);
|
||||||
out.putBoolean("unreadOnly", m_unreadOnly);
|
out.putBoolean("unreadOnly", m_unreadOnly);
|
||||||
out.putParcelable("activeFeed", m_activeFeed);
|
out.putParcelable("activeFeed", m_activeFeed);
|
||||||
|
out.putParcelable("selectedArticle", m_selectedArticle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -232,9 +235,8 @@ public class MainActivity extends Activity implements FeedsFragment.OnFeedSelect
|
|||||||
public void closeArticle() {
|
public void closeArticle() {
|
||||||
findViewById(R.id.article_fragment).setVisibility(View.GONE);
|
findViewById(R.id.article_fragment).setVisibility(View.GONE);
|
||||||
findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE);
|
findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
if (m_menu != null)
|
initMainMenu();
|
||||||
m_menu.findItem(R.id.close_article).setVisible(false);
|
|
||||||
|
|
||||||
m_selectedArticle = null;
|
m_selectedArticle = null;
|
||||||
}
|
}
|
||||||
@ -249,6 +251,14 @@ public class MainActivity extends Activity implements FeedsFragment.OnFeedSelect
|
|||||||
|
|
||||||
m_menu.findItem(R.id.update_feeds).setEnabled(true);
|
m_menu.findItem(R.id.update_feeds).setEnabled(true);
|
||||||
m_menu.findItem(R.id.show_feeds).setEnabled(true);
|
m_menu.findItem(R.id.show_feeds).setEnabled(true);
|
||||||
|
|
||||||
|
if (m_selectedArticle != null) {
|
||||||
|
m_menu.findItem(R.id.close_article).setVisible(true);
|
||||||
|
m_menu.findItem(R.id.share_article).setVisible(true);
|
||||||
|
} else {
|
||||||
|
m_menu.findItem(R.id.close_article).setVisible(false);
|
||||||
|
m_menu.findItem(R.id.share_article).setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
m_menu.findItem(R.id.login).setVisible(true);
|
m_menu.findItem(R.id.login).setVisible(true);
|
||||||
@ -361,6 +371,8 @@ public class MainActivity extends Activity implements FeedsFragment.OnFeedSelect
|
|||||||
public void openArticle(Article article) {
|
public void openArticle(Article article) {
|
||||||
m_selectedArticle = article;
|
m_selectedArticle = article;
|
||||||
|
|
||||||
|
initMainMenu();
|
||||||
|
|
||||||
ArticleFragment frag = new ArticleFragment();
|
ArticleFragment frag = new ArticleFragment();
|
||||||
|
|
||||||
FragmentTransaction ft = getFragmentManager().beginTransaction();
|
FragmentTransaction ft = getFragmentManager().beginTransaction();
|
||||||
@ -369,11 +381,7 @@ public class MainActivity extends Activity implements FeedsFragment.OnFeedSelect
|
|||||||
|
|
||||||
findViewById(R.id.feeds_fragment).setVisibility(View.GONE);
|
findViewById(R.id.feeds_fragment).setVisibility(View.GONE);
|
||||||
findViewById(R.id.article_fragment).setVisibility(View.VISIBLE);
|
findViewById(R.id.article_fragment).setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
if (m_menu != null) {
|
|
||||||
m_menu.findItem(R.id.close_article).setVisible(true);
|
|
||||||
m_menu.findItem(R.id.share_article).setVisible(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user