Implement switching story order for feeds and folders

This commit is contained in:
Mark Anderson 2013-05-26 22:37:47 +01:00
parent 3eb8441c2e
commit c87c10e465
18 changed files with 119 additions and 72 deletions

View file

@ -11,15 +11,13 @@
android:paddingTop="10dip"
>
<RadioButton android:id="@+id/radio_oldest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/oldest"
android:onClick="onRadioButtonClicked"/>
<RadioButton android:id="@+id/radio_newest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/newest"
android:onClick="onRadioButtonClicked"/>
android:text="@string/newest"/>
<RadioButton android:id="@+id/radio_oldest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/oldest"/>
</RadioGroup>

View file

@ -3,4 +3,7 @@
<item android:id="@+id/menu_mark_all_as_read"
android:title="@string/menu_mark_all_as_read"
android:showAsAction="ifRoom" android:icon="@drawable/markread" />
<item android:id="@+id/menu_story_order"
android:title="@string/menu_story_order"
android:showAsAction="never" />
</menu>

View file

@ -136,6 +136,6 @@
<string name="delete_feed_message">Delete feed \&quot;%s\&quot;?</string>
<string name="oldest">Oldest</string>
<string name="newest">Newest</string>
<string name="newest">Newest First</string>
<string name="menu_story_order">Story Order</string>
</resources>

View file

@ -21,7 +21,6 @@ import com.newsblur.util.StoryOrder;
public class AllSharedStoriesItemsList extends ItemsList {
private ArrayList<String> feedIds;
private boolean stopLoading = false;
@Override
protected void onCreate(Bundle bundle) {
@ -81,12 +80,6 @@ public class AllSharedStoriesItemsList extends ItemsList {
@Override
public void markItemListAsRead() { }
@Override
public void setNothingMoreToUpdate() {
stopLoading = true;
}
@Override
public void closeAfterUpdate() { }
@ -96,4 +89,8 @@ public class AllSharedStoriesItemsList extends ItemsList {
return PrefsUtils.getStoryOrderForFolder(this, PrefConstants.ALL_SHARED_STORIES_FOLDER_NAME);
}
@Override
public void updateStoryOrderPreference(StoryOrder newValue) {
PrefsUtils.setStoryOrderForFolder(this, PrefConstants.ALL_SHARED_STORIES_FOLDER_NAME, newValue);
}
}

View file

@ -30,7 +30,6 @@ public class AllStoriesItemsList extends ItemsList {
private ArrayList<String> feedIds;
private APIManager apiManager;
private ContentResolver resolver;
private boolean stopLoading = false;
@Override
protected void onCreate(Bundle bundle) {
@ -128,12 +127,6 @@ public class AllStoriesItemsList extends ItemsList {
return true;
}
@Override
public void setNothingMoreToUpdate() {
stopLoading = true;
}
@Override
public void closeAfterUpdate() { }
@ -143,4 +136,8 @@ public class AllStoriesItemsList extends ItemsList {
return PrefsUtils.getStoryOrderForFolder(this, PrefConstants.ALL_STORIES_FOLDER_NAME);
}
@Override
public void updateStoryOrderPreference(StoryOrder newValue) {
PrefsUtils.setStoryOrderForFolder(this, PrefConstants.ALL_STORIES_FOLDER_NAME, newValue);
}
}

View file

@ -34,7 +34,6 @@ public class FeedItemsList extends ItemsList {
private String feedTitle;
private String folderName;
private APIManager apiManager;
private boolean stopLoading = false;
@Override
protected void onCreate(Bundle bundle) {
@ -136,11 +135,6 @@ public class FeedItemsList extends ItemsList {
}
}
@Override
public void setNothingMoreToUpdate() {
stopLoading = true;
}
@Override
public void closeAfterUpdate() {
finish();
@ -151,5 +145,8 @@ public class FeedItemsList extends ItemsList {
return PrefsUtils.getStoryOrderForFeed(this, feedId);
}
@Override
public void updateStoryOrderPreference(StoryOrder newValue) {
PrefsUtils.setStoryOrderForFeed(this, feedId, newValue);
}
}

View file

@ -29,7 +29,6 @@ public class FolderItemsList extends ItemsList {
private String folderName;
private ArrayList<String> feedIds;
private APIManager apiManager;
private boolean stopLoading = false;
@Override
protected void onCreate(Bundle bundle) {
@ -113,13 +112,6 @@ public class FolderItemsList extends ItemsList {
}.execute(folderName);
}
@Override
public void setNothingMoreToUpdate() {
stopLoading = true;
}
@Override
public void closeAfterUpdate() { }
@ -128,4 +120,9 @@ public class FolderItemsList extends ItemsList {
protected StoryOrder getStoryOrder() {
return PrefsUtils.getStoryOrderForFolder(this, folderName);
}
@Override
public void updateStoryOrderPreference(StoryOrder newValue) {
PrefsUtils.setStoryOrderForFolder(this, folderName, newValue);
}
}

View file

@ -13,9 +13,10 @@ import com.newsblur.fragment.ItemListFragment;
import com.newsblur.fragment.StoryOrderDialogFragment;
import com.newsblur.fragment.SyncUpdateFragment;
import com.newsblur.util.StoryOrder;
import com.newsblur.util.StoryOrderChangedListener;
import com.newsblur.view.StateToggleButton.StateChangedListener;
public abstract class ItemsList extends NbFragmentActivity implements SyncUpdateFragment.SyncUpdateFragmentInterface, StateChangedListener {
public abstract class ItemsList extends NbFragmentActivity implements SyncUpdateFragment.SyncUpdateFragmentInterface, StateChangedListener, StoryOrderChangedListener {
public static final String EXTRA_STATE = "currentIntelligenceState";
public static final String EXTRA_BLURBLOG_USERNAME = "blurblogName";
@ -32,6 +33,8 @@ public abstract class ItemsList extends NbFragmentActivity implements SyncUpdate
protected int currentState;
private Menu menu;
protected boolean stopLoading = false;
@Override
protected void onCreate(Bundle bundle) {
requestWindowFeature(Window.FEATURE_PROGRESS);
@ -104,12 +107,24 @@ public abstract class ItemsList extends NbFragmentActivity implements SyncUpdate
setSupportProgressBarIndeterminateVisibility(true);
}
}
@Override
public void setNothingMoreToUpdate() {
stopLoading = true;
}
@Override
public void changedState(int state) {
itemListFragment.changeState(state);
}
@Override
public void storyOrderChanged(StoryOrder newValue) {
updateStoryOrderPreference(newValue);
itemListFragment.setStoryOrder(newValue);
stopLoading = false;
triggerRefresh();
}
public abstract void updateStoryOrderPreference(StoryOrder newValue);
}

View file

@ -21,7 +21,6 @@ import com.newsblur.util.StoryOrder;
public class SocialFeedItemsList extends ItemsList {
private String userIcon, userId, username, title;
private boolean stopLoading = false;
private APIManager apiManager;
@Override
@ -97,13 +96,6 @@ public class SocialFeedItemsList extends ItemsList {
}.execute(userId);
}
@Override
public void setNothingMoreToUpdate() {
stopLoading = true;
}
@Override
public void closeAfterUpdate() { }
@ -113,4 +105,8 @@ public class SocialFeedItemsList extends ItemsList {
return PrefsUtils.getStoryOrderForFolder(this, PrefConstants.ALL_SHARED_STORIES_FOLDER_NAME);
}
@Override
public void updateStoryOrderPreference(StoryOrder newValue) {
PrefsUtils.setStoryOrderForFolder(this, PrefConstants.ALL_SHARED_STORIES_FOLDER_NAME, newValue);
}
}

View file

@ -144,5 +144,8 @@ public class AllSharedStoriesItemListFragment extends ItemListFragment implement
return cursorLoader;
}
@Override
public void setStoryOrder(StoryOrder storyOrder) {
this.storyOrder = storyOrder;
}
}

View file

@ -38,7 +38,6 @@ public class AllStoriesItemListFragment extends ItemListFragment implements Load
private boolean requestedPage;
private int currentPage = 0;
// TODO update on property change
private StoryOrder storyOrder;
public static int ITEMLIST_LOADER = 0x01;
@ -141,5 +140,8 @@ public class AllStoriesItemListFragment extends ItemListFragment implements Load
return cursorLoader;
}
@Override
public void setStoryOrder(StoryOrder storyOrder) {
this.storyOrder = storyOrder;
}
}

View file

@ -2,20 +2,15 @@ package com.newsblur.fragment;
import java.util.ArrayList;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.content.OperationApplicationException;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
@ -62,7 +57,6 @@ public class FeedItemListFragment extends ItemListFragment implements LoaderMana
private Feed feed;
private Cursor feedCursor;
// TODO update on property change
private StoryOrder storyOrder;
public static FeedItemListFragment newInstance(String feedId, int currentState, StoryOrder storyOrder) {
@ -217,4 +211,9 @@ public class FeedItemListFragment extends ItemListFragment implements LoaderMana
inflater.inflate(R.menu.context_story, menu);
}
@Override
public void setStoryOrder(StoryOrder storyOrder) {
this.storyOrder = storyOrder;
}
}

View file

@ -48,7 +48,6 @@ public class FolderItemListFragment extends ItemListFragment implements LoaderMa
private boolean doRequest = true;
private Folder folder;
// TODO update on property change
private StoryOrder storyOrder;
public static int ITEMLIST_LOADER = 0x01;
@ -165,5 +164,9 @@ public class FolderItemListFragment extends ItemListFragment implements LoaderMa
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) { }
@Override
public void setStoryOrder(StoryOrder storyOrder) {
this.storyOrder = storyOrder;
}
}

View file

@ -1,5 +1,7 @@
package com.newsblur.fragment;
import com.newsblur.util.StoryOrder;
import android.support.v4.app.Fragment;
public abstract class ItemListFragment extends Fragment {
@ -8,5 +10,6 @@ public abstract class ItemListFragment extends Fragment {
public abstract void hasUpdated();
public abstract void changeState(final int state);
public abstract void setStoryOrder(StoryOrder storyOrder);
}

View file

@ -10,7 +10,6 @@ import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -161,5 +160,9 @@ public class SocialFeedItemListFragment extends ItemListFragment implements Load
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) { }
@Override
public void setStoryOrder(StoryOrder storyOrder) {
this.storyOrder = storyOrder;
}
}

View file

@ -6,6 +6,7 @@ import android.support.v4.app.DialogFragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
@ -13,10 +14,12 @@ import android.widget.RadioButton;
import com.newsblur.R;
import com.newsblur.util.StoryOrder;
import com.newsblur.util.StoryOrderChangedListener;
public class StoryOrderDialogFragment extends DialogFragment {
public class StoryOrderDialogFragment extends DialogFragment implements OnClickListener {
private static String CURRENT_ORDER = "currentOrder";
private StoryOrder currentValue;
public static StoryOrderDialogFragment newInstance(StoryOrder currentValue) {
StoryOrderDialogFragment dialog = new StoryOrderDialogFragment();
@ -34,23 +37,35 @@ public class StoryOrderDialogFragment extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
StoryOrder currentValue = (StoryOrder) getArguments().getSerializable(CURRENT_ORDER);
currentValue = (StoryOrder) getArguments().getSerializable(CURRENT_ORDER);
View v = inflater.inflate(R.layout.storyorder_dialog, null);
RadioButton newestButton = (RadioButton) v.findViewById(R.id.radio_newest);
newestButton.setOnClickListener(this);
newestButton.setChecked(currentValue == StoryOrder.NEWEST);
RadioButton oldestButton = (RadioButton) v.findViewById(R.id.radio_oldest);
if (currentValue == StoryOrder.NEWEST) {
newestButton.setChecked(true);
} else {
oldestButton.setChecked(true);
}
oldestButton.setOnClickListener(this);
oldestButton.setChecked(currentValue == StoryOrder.OLDEST);
getDialog().getWindow().setFlags(WindowManager.LayoutParams.FLAG_DITHER, WindowManager.LayoutParams.FLAG_DITHER);
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().getAttributes().gravity = Gravity.BOTTOM;
//seekBar.setOnSeekBarChangeListener((OnSeekBarChangeListener) getActivity());
return v;
}
@Override
public void onClick(View v) {
StoryOrderChangedListener listener = (StoryOrderChangedListener)getActivity();
if (v.getId() == R.id.radio_oldest) {
if (currentValue == StoryOrder.NEWEST) {
listener.storyOrderChanged(StoryOrder.OLDEST);
}
} else {
if (currentValue == StoryOrder.OLDEST) {
listener.storyOrderChanged(StoryOrder.NEWEST);
}
}
dismiss();
}
}

View file

@ -198,4 +198,18 @@ public class PrefsUtils {
SharedPreferences prefs = context.getSharedPreferences(PrefConstants.PREFERENCES, 0);
return ReadFilter.valueOf(prefs.getString(PrefConstants.FOLDER_READ_FILTER_PREFIX + folderName, ReadFilter.getDefaultValue().toString()));
}
public static void setStoryOrderForFolder(Context context, String folderName, StoryOrder newValue) {
SharedPreferences prefs = context.getSharedPreferences(PrefConstants.PREFERENCES, 0);
Editor editor = prefs.edit();
editor.putString(PrefConstants.FOLDER_STORY_ORDER_PREFIX + folderName, newValue.toString());
editor.commit();
}
public static void setStoryOrderForFeed(Context context, String feedId, StoryOrder newValue) {
SharedPreferences prefs = context.getSharedPreferences(PrefConstants.PREFERENCES, 0);
Editor editor = prefs.edit();
editor.putString(PrefConstants.FEED_STORY_ORDER_PREFIX + feedId, newValue.toString());
editor.commit();
}
}

View file

@ -0,0 +1,5 @@
package com.newsblur.util;
public interface StoryOrderChangedListener {
void storyOrderChanged(StoryOrder newValue);
}