store feed/category objects inside fragments instead of ids

This commit is contained in:
Andrew Dolgov 2012-06-19 19:01:28 +04:00
parent 4795f259f0
commit 10eb94abe5
3 changed files with 40 additions and 36 deletions

View File

@ -41,7 +41,7 @@ public class FeedCategoriesFragment extends Fragment implements OnItemClickListe
private SharedPreferences m_prefs; private SharedPreferences m_prefs;
private FeedCategoryListAdapter m_adapter; private FeedCategoryListAdapter m_adapter;
private FeedCategoryList m_cats = new FeedCategoryList(); private FeedCategoryList m_cats = new FeedCategoryList();
private int m_selectedCatId = -100; private FeedCategory m_selectedCat;
private OnlineServices m_onlineServices; private OnlineServices m_onlineServices;
class CatUnreadComparator implements Comparator<FeedCategory> { class CatUnreadComparator implements Comparator<FeedCategory> {
@ -105,7 +105,7 @@ public class FeedCategoriesFragment extends Fragment implements OnItemClickListe
@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_selectedCatId = savedInstanceState.getInt("selectedCatId"); m_selectedCat = savedInstanceState.getParcelable("selectedCat");
m_cats = savedInstanceState.getParcelable("cats"); m_cats = savedInstanceState.getParcelable("cats");
} }
@ -140,7 +140,7 @@ public class FeedCategoriesFragment extends Fragment implements OnItemClickListe
public void onSaveInstanceState (Bundle out) { public void onSaveInstanceState (Bundle out) {
super.onSaveInstanceState(out); super.onSaveInstanceState(out);
out.putInt("selectedCatId", m_selectedCatId); out.putParcelable("selectedCat", m_selectedCat);
out.putParcelable("cats", m_cats); out.putParcelable("cats", m_cats);
} }
@ -285,7 +285,7 @@ public class FeedCategoriesFragment extends Fragment implements OnItemClickListe
public int getItemViewType(int position) { public int getItemViewType(int position) {
FeedCategory cat = items.get(position); FeedCategory cat = items.get(position);
if (cat.id == m_selectedCatId) { if (m_selectedCat != null && cat.id == m_selectedCat.id) {
return VIEW_SELECTED; return VIEW_SELECTED;
} else { } else {
return VIEW_NORMAL; return VIEW_NORMAL;
@ -350,17 +350,17 @@ public class FeedCategoriesFragment extends Fragment implements OnItemClickListe
if (list != null) { if (list != null) {
FeedCategory cat = (FeedCategory)list.getItemAtPosition(position); FeedCategory cat = (FeedCategory)list.getItemAtPosition(position);
m_onlineServices.onCatSelected(cat); m_onlineServices.onCatSelected(cat);
m_selectedCatId = cat.id; m_selectedCat = cat;
m_adapter.notifyDataSetChanged(); m_adapter.notifyDataSetChanged();
} }
} }
public void setSelectedCategory(FeedCategory cat) { public void setSelectedCategory(FeedCategory cat) {
m_selectedCatId = cat.id; m_selectedCat = cat;
m_adapter.notifyDataSetChanged(); m_adapter.notifyDataSetChanged();
} }
public void setSelectedCategoryId(int id) { public FeedCategory getSelectedCategory() {
m_selectedCatId = id; return m_selectedCat;
} }
} }

View File

@ -7,7 +7,6 @@ import java.io.InputStream;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
@ -21,14 +20,8 @@ import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider; import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.ClientContext; import org.apache.http.client.protocol.ClientContext;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext; import org.apache.http.protocol.HttpContext;
import org.fox.ttrss.types.Feed; import org.fox.ttrss.types.Feed;
@ -73,11 +66,21 @@ public class FeedsFragment extends Fragment implements OnItemClickListener, OnSh
private FeedListAdapter m_adapter; private FeedListAdapter m_adapter;
private FeedList m_feeds = new FeedList(); private FeedList m_feeds = new FeedList();
private OnlineServices m_onlineServices; private OnlineServices m_onlineServices;
private int m_selectedFeedId; private Feed m_selectedFeed;
private FeedCategory m_activeCategory;
private static final String ICON_PATH = "/data/org.fox.ttrss/icons/"; private static final String ICON_PATH = "/data/org.fox.ttrss/icons/";
private boolean m_enableFeedIcons; private boolean m_enableFeedIcons;
private boolean m_feedIconsChecked = false; private boolean m_feedIconsChecked = false;
public FeedsFragment() {
}
public FeedsFragment(FeedCategory cat) {
m_activeCategory = cat;
}
class FeedUnreadComparator implements Comparator<Feed> { class FeedUnreadComparator implements Comparator<Feed> {
@Override @Override
@ -138,9 +141,10 @@ public class FeedsFragment extends Fragment implements OnItemClickListener, OnSh
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_selectedFeedId = savedInstanceState.getInt("selectedFeedId"); m_selectedFeed = savedInstanceState.getParcelable("selectedFeed");
m_feeds = savedInstanceState.getParcelable("feeds"); m_feeds = savedInstanceState.getParcelable("feeds");
m_feedIconsChecked = savedInstanceState.getBoolean("feedIconsChecked"); m_feedIconsChecked = savedInstanceState.getBoolean("feedIconsChecked");
m_activeCategory = savedInstanceState.getParcelable("activeCat");
} }
View view = inflater.inflate(R.layout.feeds_fragment, container, false); View view = inflater.inflate(R.layout.feeds_fragment, container, false);
@ -177,19 +181,17 @@ public class FeedsFragment extends Fragment implements OnItemClickListener, OnSh
m_onlineServices = (OnlineServices)activity; m_onlineServices = (OnlineServices)activity;
Feed activeFeed = m_onlineServices.getActiveFeed(); //m_selectedFeed = m_onlineServices.getActiveFeed();
if (activeFeed != null)
m_selectedFeedId = activeFeed.id;
} }
@Override @Override
public void onSaveInstanceState (Bundle out) { public void onSaveInstanceState (Bundle out) {
super.onSaveInstanceState(out); super.onSaveInstanceState(out);
out.putInt("selectedFeedId", m_selectedFeedId); out.putParcelable("selectedFeed", m_selectedFeed);
out.putParcelable("feeds", m_feeds); out.putParcelable("feeds", m_feeds);
out.putBoolean("feedIconsChecked", m_feedIconsChecked); out.putBoolean("feedIconsChecked", m_feedIconsChecked);
out.putParcelable("activeCat", m_activeCategory);
} }
@Override @Override
@ -199,16 +201,16 @@ public class FeedsFragment extends Fragment implements OnItemClickListener, OnSh
if (list != null) { if (list != null) {
Feed feed = (Feed)list.getItemAtPosition(position); Feed feed = (Feed)list.getItemAtPosition(position);
m_onlineServices.onFeedSelected(feed); m_onlineServices.onFeedSelected(feed);
m_selectedFeedId = feed.id; m_selectedFeed = feed;
m_adapter.notifyDataSetChanged(); m_adapter.notifyDataSetChanged();
} }
} }
@SuppressWarnings({ "unchecked", "serial" }) @SuppressWarnings({ "unchecked", "serial" })
public void refresh(boolean background) { public void refresh(boolean background) {
FeedCategory cat = m_onlineServices.getActiveCategory(); //FeedCategory cat = m_onlineServices.getActiveCategory();
final int catId = (cat != null) ? cat.id : -4; final int catId = (m_activeCategory != null) ? m_activeCategory.id : -4;
final String sessionId = m_onlineServices.getSessionId(); final String sessionId = m_onlineServices.getSessionId();
final boolean unreadOnly = m_onlineServices.getUnreadOnly(); final boolean unreadOnly = m_onlineServices.getUnreadOnly();
@ -375,7 +377,7 @@ public class FeedsFragment extends Fragment implements OnItemClickListener, OnSh
public int getItemViewType(int position) { public int getItemViewType(int position) {
Feed feed = items.get(position); Feed feed = items.get(position);
if (feed.id == m_selectedFeedId) { if (m_selectedFeed != null && feed.id == m_selectedFeed.id) {
return VIEW_SELECTED; return VIEW_SELECTED;
} else { } else {
return VIEW_NORMAL; return VIEW_NORMAL;
@ -579,8 +581,12 @@ public class FeedsFragment extends Fragment implements OnItemClickListener, OnSh
} }
} }
public void setSelectedFeedId(int feedId) { public Feed getSelectedFeed() {
m_selectedFeedId = feedId; return m_selectedFeed;
}
public void setSelectedFeed(Feed feed) {
m_selectedFeed = feed;
} }
} }

View File

@ -771,8 +771,7 @@ public class MainActivity extends FragmentActivity implements OnlineServices {
.findFragmentById(R.id.cats_fragment); .findFragmentById(R.id.cats_fragment);
if (cf != null) { if (cf != null) {
// should be nonexistant feed_id (0 is Uncategorized) cf.setSelectedCategory(null);
cf.setSelectedCategoryId(-10000);
} }
initMainMenu(); initMainMenu();
@ -818,8 +817,7 @@ public class MainActivity extends FragmentActivity implements OnlineServices {
.findFragmentById(R.id.cats_fragment); .findFragmentById(R.id.cats_fragment);
if (cf != null) { if (cf != null) {
// can't use 0 here because Uncategorized might be in the buffer cf.setSelectedCategory(null);
cf.setSelectedCategoryId(-1000000);
} }
refreshCategories(); refreshCategories();
@ -840,7 +838,7 @@ public class MainActivity extends FragmentActivity implements OnlineServices {
.findFragmentById(R.id.feeds_fragment); .findFragmentById(R.id.feeds_fragment);
if (ff != null) { if (ff != null) {
ff.setSelectedFeedId(0); ff.setSelectedFeed(null);
} }
m_activeFeed = null; m_activeFeed = null;
@ -872,7 +870,7 @@ public class MainActivity extends FragmentActivity implements OnlineServices {
.findFragmentById(R.id.feeds_fragment); .findFragmentById(R.id.feeds_fragment);
if (ff != null) { if (ff != null) {
ff.setSelectedFeedId(0); ff.setSelectedFeed(null);
} }
m_activeFeed = null; m_activeFeed = null;
@ -881,7 +879,7 @@ public class MainActivity extends FragmentActivity implements OnlineServices {
ft.replace(R.id.headlines_fragment, new HeadlinesFragment()); ft.replace(R.id.headlines_fragment, new HeadlinesFragment());
ft.commit(); ft.commit();
refreshFeeds(); refreshFeeds();
initMainMenu(); initMainMenu();
} else if (allowQuit) { } else if (allowQuit) {