implement browsing categories like feeds
This commit is contained in:
parent
97ecce1d42
commit
980b5696e3
11
res/menu/category_menu.xml
Normal file
11
res/menu/category_menu.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/browse_articles"
|
||||||
|
android:title="Browse articles"/>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/browse_feeds"
|
||||||
|
android:title="Browse feeds"/>
|
||||||
|
|
||||||
|
</menu>
|
@ -52,8 +52,8 @@
|
|||||||
<string name="back_to_categories">Close category</string>
|
<string name="back_to_categories">Close category</string>
|
||||||
<string name="no_feeds_to_display">No feeds to display</string>
|
<string name="no_feeds_to_display">No feeds to display</string>
|
||||||
<string name="no_headlines_to_display">No headlines to display</string>
|
<string name="no_headlines_to_display">No headlines to display</string>
|
||||||
|
<string name="browse_cats_like_feeds">Browse categories like feeds</string>
|
||||||
<string name="error_template">Error: %1$s</string>
|
<string name="browse_cats_like_feeds_summary">You can long-tap on a category to override this setting</string>
|
||||||
|
|
||||||
<string name="error_no_error">No error</string>
|
<string name="error_no_error">No error</string>
|
||||||
<string name="error_unknown">Error: Unknown error (see log)</string>
|
<string name="error_unknown">Error: Unknown error (see log)</string>
|
||||||
|
@ -27,6 +27,8 @@
|
|||||||
<CheckBoxPreference android:defaultValue="false" android:title="@string/sort_feeds_by_unread" android:key="sort_feeds_by_unread"/>
|
<CheckBoxPreference android:defaultValue="false" android:title="@string/sort_feeds_by_unread" android:key="sort_feeds_by_unread"/>
|
||||||
<CheckBoxPreference android:defaultValue="false" android:title="@string/download_feed_icons" android:key="download_feed_icons"/>
|
<CheckBoxPreference android:defaultValue="false" android:title="@string/download_feed_icons" android:key="download_feed_icons"/>
|
||||||
<CheckBoxPreference android:defaultValue="false" android:title="@string/enable_cats" android:key="enable_cats" />
|
<CheckBoxPreference android:defaultValue="false" android:title="@string/enable_cats" android:key="enable_cats" />
|
||||||
|
<CheckBoxPreference android:defaultValue="false" android:title="@string/browse_cats_like_feeds" android:key="browse_cats_like_feeds"
|
||||||
|
android:summary="@string/browse_cats_like_feeds_summary" />
|
||||||
<CheckBoxPreference android:defaultValue="false" android:summary="@string/enable_ads_summary" android:title="@string/enable_ads" android:key="enable_ads" />
|
<CheckBoxPreference android:defaultValue="false" android:summary="@string/enable_ads_summary" android:title="@string/enable_ads" android:key="enable_ads" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
@ -11,6 +11,13 @@ public class Feed implements Comparable<Feed>, Parcelable {
|
|||||||
boolean has_icon;
|
boolean has_icon;
|
||||||
int cat_id;
|
int cat_id;
|
||||||
int last_updated;
|
int last_updated;
|
||||||
|
boolean is_cat;
|
||||||
|
|
||||||
|
public Feed(int id, String title, boolean is_cat) {
|
||||||
|
this.id = id;
|
||||||
|
this.title = title;
|
||||||
|
this.is_cat = is_cat;
|
||||||
|
}
|
||||||
|
|
||||||
public Feed(Parcel in) {
|
public Feed(Parcel in) {
|
||||||
readFromParcel(in);
|
readFromParcel(in);
|
||||||
@ -38,6 +45,7 @@ public class Feed implements Comparable<Feed>, Parcelable {
|
|||||||
out.writeInt(has_icon ? 1 : 0);
|
out.writeInt(has_icon ? 1 : 0);
|
||||||
out.writeInt(cat_id);
|
out.writeInt(cat_id);
|
||||||
out.writeInt(last_updated);
|
out.writeInt(last_updated);
|
||||||
|
out.writeInt(is_cat ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void readFromParcel(Parcel in) {
|
public void readFromParcel(Parcel in) {
|
||||||
@ -48,6 +56,7 @@ public class Feed implements Comparable<Feed>, Parcelable {
|
|||||||
has_icon = in.readInt() == 1;
|
has_icon = in.readInt() == 1;
|
||||||
cat_id = in.readInt();
|
cat_id = in.readInt();
|
||||||
last_updated = in.readInt();
|
last_updated = in.readInt();
|
||||||
|
is_cat = in.readInt() == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
|
@ -14,10 +14,15 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.ContextMenu;
|
||||||
|
import android.view.ContextMenu.ContextMenuInfo;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
|
import android.widget.AdapterView.AdapterContextMenuInfo;
|
||||||
import android.widget.AdapterView.OnItemClickListener;
|
import android.widget.AdapterView.OnItemClickListener;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@ -65,6 +70,39 @@ public class FeedCategoriesFragment extends Fragment implements OnItemClickListe
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreateContextMenu(ContextMenu menu, View v,
|
||||||
|
ContextMenuInfo menuInfo) {
|
||||||
|
|
||||||
|
getActivity().getMenuInflater().inflate(R.menu.category_menu, menu);
|
||||||
|
super.onCreateContextMenu(menu, v, menuInfo);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onContextItemSelected(MenuItem item) {
|
||||||
|
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
|
||||||
|
FeedCategory cat = m_adapter.getItem(info.position);
|
||||||
|
|
||||||
|
MainActivity activity = (MainActivity)getActivity();
|
||||||
|
|
||||||
|
if (cat != null) {
|
||||||
|
m_selectedCatId = cat.id;
|
||||||
|
m_adapter.notifyDataSetChanged();
|
||||||
|
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case R.id.browse_articles:
|
||||||
|
activity.viewCategory(cat, true);
|
||||||
|
break;
|
||||||
|
case R.id.browse_feeds:
|
||||||
|
activity.viewCategory(cat, false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@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) {
|
||||||
@ -78,6 +116,7 @@ public class FeedCategoriesFragment extends Fragment implements OnItemClickListe
|
|||||||
m_adapter = new FeedCategoryListAdapter(getActivity(), R.layout.feeds_row, (ArrayList<FeedCategory>)m_cats);
|
m_adapter = new FeedCategoryListAdapter(getActivity(), R.layout.feeds_row, (ArrayList<FeedCategory>)m_cats);
|
||||||
list.setAdapter(m_adapter);
|
list.setAdapter(m_adapter);
|
||||||
list.setOnItemClickListener(this);
|
list.setOnItemClickListener(this);
|
||||||
|
registerForContextMenu(list);
|
||||||
|
|
||||||
if (m_cats == null || m_cats.size() == 0)
|
if (m_cats == null || m_cats.size() == 0)
|
||||||
refresh(false);
|
refresh(false);
|
||||||
@ -297,7 +336,8 @@ public class FeedCategoriesFragment extends Fragment implements OnItemClickListe
|
|||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
|
||||||
String key) {
|
String key) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
sortCats();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,6 +105,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener {
|
|||||||
|
|
||||||
final String sessionId = ((MainActivity)getActivity()).getSessionId();
|
final String sessionId = ((MainActivity)getActivity()).getSessionId();
|
||||||
final boolean showUnread = ((MainActivity)getActivity()).getUnreadArticlesOnly();
|
final boolean showUnread = ((MainActivity)getActivity()).getUnreadArticlesOnly();
|
||||||
|
final boolean isCat = m_feed.is_cat;
|
||||||
int skip = 0;
|
int skip = 0;
|
||||||
|
|
||||||
if (append) {
|
if (append) {
|
||||||
@ -131,6 +132,8 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener {
|
|||||||
put("offset", String.valueOf(0));
|
put("offset", String.valueOf(0));
|
||||||
put("view_mode", showUnread ? "adaptive" : "all_articles");
|
put("view_mode", showUnread ? "adaptive" : "all_articles");
|
||||||
put("skip", String.valueOf(fskip));
|
put("skip", String.valueOf(fskip));
|
||||||
|
|
||||||
|
if (isCat) put("is_cat", "true");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -378,12 +378,19 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe
|
|||||||
findViewById(R.id.main).setAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_right));
|
findViewById(R.id.main).setAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_right));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_activeFeed.is_cat) {
|
||||||
|
findViewById(R.id.headlines_fragment).setVisibility(View.GONE);
|
||||||
|
findViewById(R.id.cats_fragment).setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
refreshCategories();
|
||||||
|
} else {
|
||||||
findViewById(R.id.headlines_fragment).setVisibility(View.GONE);
|
findViewById(R.id.headlines_fragment).setVisibility(View.GONE);
|
||||||
findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE);
|
findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
refreshFeeds();
|
||||||
|
}
|
||||||
m_activeFeed = null;
|
m_activeFeed = null;
|
||||||
initMainMenu();
|
initMainMenu();
|
||||||
refreshFeeds();
|
|
||||||
|
|
||||||
} else if (m_activeCategory != null) {
|
} else if (m_activeCategory != null) {
|
||||||
if (m_compatMode) {
|
if (m_compatMode) {
|
||||||
@ -756,7 +763,6 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFeedSelected(Feed feed) {
|
public void onFeedSelected(Feed feed) {
|
||||||
Log.d(TAG, "Selected feed: " + feed.toString());
|
|
||||||
viewFeed(feed, false);
|
viewFeed(feed, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -788,19 +794,34 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void viewCategory(FeedCategory cat) {
|
public void viewCategory(FeedCategory cat, boolean openAsFeed) {
|
||||||
m_activeCategory = cat;
|
|
||||||
|
|
||||||
initMainMenu();
|
|
||||||
|
|
||||||
|
if (!openAsFeed) {
|
||||||
findViewById(R.id.cats_fragment).setVisibility(View.GONE);
|
findViewById(R.id.cats_fragment).setVisibility(View.GONE);
|
||||||
findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE);
|
findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
m_activeCategory = cat;
|
||||||
|
|
||||||
FeedsFragment frag = new FeedsFragment();
|
FeedsFragment frag = new FeedsFragment();
|
||||||
|
|
||||||
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
|
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
|
||||||
ft.replace(R.id.feeds_fragment, frag);
|
ft.replace(R.id.feeds_fragment, frag);
|
||||||
ft.commit();
|
ft.commit();
|
||||||
|
} else {
|
||||||
|
findViewById(R.id.cats_fragment).setVisibility(View.GONE);
|
||||||
|
findViewById(R.id.headlines_fragment).setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
m_activeFeed = new Feed(cat.id, cat.title, true);
|
||||||
|
|
||||||
|
HeadlinesFragment frag = new HeadlinesFragment();
|
||||||
|
|
||||||
|
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
|
||||||
|
ft.replace(R.id.headlines_fragment, frag);
|
||||||
|
ft.commit();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
initMainMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openArticle(Article article, int compatAnimation) {
|
public void openArticle(Article article, int compatAnimation) {
|
||||||
@ -934,7 +955,7 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCatSelected(FeedCategory cat) {
|
public void onCatSelected(FeedCategory cat) {
|
||||||
m_activeCategory = cat;
|
Log.d(TAG, "onCatSelected");
|
||||||
viewCategory(cat);
|
viewCategory(cat, m_prefs.getBoolean("browse_cats_like_feeds", false));
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user