Merge pull request #795 from dosiecki/master

Android: Beta 2 for Lollipop Compat
This commit is contained in:
Samuel Clay 2015-10-30 11:17:37 -07:00
commit b28b49e029
80 changed files with 237 additions and 555 deletions

View file

@ -1,4 +1,5 @@
build.xml
custom_rules.xml
local.properties
*.java.swo
*.java.swp

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.newsblur"
android:versionCode="107"
android:versionName="4.6.0b1" >
android:versionCode="108"
android:versionName="4.6.0b2" >
<uses-sdk
android:minSdkVersion="14"
@ -18,8 +18,8 @@
android:icon="@drawable/logo"
android:label="@string/newsblur"
android:theme="@style/NewsBlurTheme"
android:name=".activity.NewsBlurApplication"
android:hardwareAccelerated="true" >
android:hardwareAccelerated="true"
android:fullBackupContent="@xml/backupscheme" >
<activity
android:name=".activity.Login"

View file

@ -0,0 +1,18 @@
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
<property name="fileExtensions" value="java, properties, xml" />
<module name="TreeWalker">
<module name="UnusedImports"/>
<module name="UpperEll"/>
<module name="ArrayTypeStyle"/>
<module name="OuterTypeFilename"/>
<module name="ArrayTrailingComma"/>
<module name="EqualsHashCode"/>
<module name="NoFinalizer"/>
<module name="HideUtilityClassConstructor"/>
</module>
</module>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -3,6 +3,17 @@
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/empty_view_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="40dp"
android:gravity="center_horizontal"
android:text="@string/loading"
style="?explainerText"
android:textSize="16sp" />
<android.support.v4.view.ViewPager
android:id="@+id/reading_pager"
android:layout_width="match_parent"

View file

@ -44,6 +44,11 @@
android:entries="@array/default_read_filter_entries"
android:entryValues="@array/default_read_filter_values"
android:defaultValue="@string/default_read_filter_value" />
<CheckBoxPreference
android:defaultValue="false"
android:key="pref_auto_open_first_unread"
android:title="@string/settings_auto_open_first_unread"
android:summary="@string/settings_auto_open_first_unread_sum" />
<CheckBoxPreference
android:defaultValue="true"
android:key="pref_show_content_preview"

View file

@ -2,11 +2,6 @@
<string name="newsblur">NewsBlur</string>
<string name="error_unset_message">An unknown error occurred</string>
<string name="error_http_connection">There was a problem connecting to NewsBlur</string>
<string name="error_read_connection">There was a problem communicating with NewsBlur</string>
<string name="error_offline">There was a problem connecting to the network</string>
<string name="login_username_hint">username</string>
<string name="login_password_hint">password</string>
<string name="login_registration_email_hint">email address</string>
@ -222,6 +217,10 @@
<item>Mark entire folder read</item>
<item>Cancel</item>
</string-array>
<string name="settings_auto_open_first_unread">Auto-Open First Story</string>
<string name="settings_auto_open_first_unread_sum">Automatically open first unread story from story list</string>
<string name="settings_social">Social</string>
<string name="settings_show_public_comments">Show Public Comments</string>
<string name="settings_reading">Reading</string>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<include domain="sharedpref" />
</full-backup-content>

View file

@ -1,6 +1,5 @@
package com.newsblur.activity;
import android.content.Intent;
import android.os.Bundle;
import android.app.FragmentTransaction;
import android.view.Menu;
@ -8,10 +7,8 @@ import android.view.MenuInflater;
import com.newsblur.R;
import com.newsblur.fragment.AllSharedStoriesItemListFragment;
import com.newsblur.fragment.FeedItemListFragment;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.FeedSet;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefConstants;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ReadFilter;
@ -28,7 +25,7 @@ public class AllSharedStoriesItemsList extends ItemsList {
itemListFragment = (AllSharedStoriesItemListFragment) fragmentManager.findFragmentByTag(AllSharedStoriesItemListFragment.class.getName());
if (itemListFragment == null) {
itemListFragment = AllSharedStoriesItemListFragment.newInstance(currentState, getDefaultFeedView());
itemListFragment = AllSharedStoriesItemListFragment.newInstance();
itemListFragment.setRetainInstance(true);
FragmentTransaction listTransaction = fragmentManager.beginTransaction();
listTransaction.add(R.id.activity_itemlist_container, itemListFragment, AllSharedStoriesItemListFragment.class.getName());
@ -68,11 +65,6 @@ public class AllSharedStoriesItemsList extends ItemsList {
return PrefsUtils.getReadFilterForFolder(this, PrefConstants.ALL_SHARED_STORIES_FOLDER_NAME);
}
@Override
protected DefaultFeedView getDefaultFeedView() {
return PrefsUtils.getDefaultFeedViewForFolder(this, PrefConstants.ALL_SHARED_STORIES_FOLDER_NAME);
}
@Override
public void defaultFeedViewChanged(DefaultFeedView value) {
PrefsUtils.setDefaultFeedViewForFolder(this, PrefConstants.ALL_SHARED_STORIES_FOLDER_NAME, value);

View file

@ -8,18 +8,14 @@ import android.view.MenuInflater;
import com.newsblur.R;
import com.newsblur.fragment.AllStoriesItemListFragment;
import com.newsblur.fragment.FeedItemListFragment;
import com.newsblur.fragment.MarkAllReadDialogFragment;
import com.newsblur.fragment.MarkAllReadDialogFragment.MarkAllReadDialogListener;
import com.newsblur.util.AppConstants;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.FeedSet;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefConstants;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ReadFilter;
import com.newsblur.util.StoryOrder;
import com.newsblur.util.StateFilter;
import com.newsblur.util.UIUtils;
public class AllStoriesItemsList extends ItemsList implements MarkAllReadDialogListener {
@ -32,7 +28,7 @@ public class AllStoriesItemsList extends ItemsList implements MarkAllReadDialogL
itemListFragment = (AllStoriesItemListFragment) fragmentManager.findFragmentByTag(AllStoriesItemListFragment.class.getName());
if (itemListFragment == null) {
itemListFragment = AllStoriesItemListFragment.newInstance(currentState, getDefaultFeedView());
itemListFragment = AllStoriesItemListFragment.newInstance();
itemListFragment.setRetainInstance(true);
FragmentTransaction listTransaction = fragmentManager.beginTransaction();
listTransaction.add(R.id.activity_itemlist_container, itemListFragment, AllStoriesItemListFragment.class.getName());
@ -84,11 +80,6 @@ public class AllStoriesItemsList extends ItemsList implements MarkAllReadDialogL
return PrefsUtils.getReadFilterForFolder(this, PrefConstants.ALL_STORIES_FOLDER_NAME);
}
@Override
protected DefaultFeedView getDefaultFeedView() {
return PrefsUtils.getDefaultFeedViewForFolder(this, PrefConstants.ALL_STORIES_FOLDER_NAME);
}
@Override
public void defaultFeedViewChanged(DefaultFeedView value) {
PrefsUtils.setDefaultFeedViewForFolder(this, PrefConstants.ALL_STORIES_FOLDER_NAME, value);

View file

@ -11,7 +11,6 @@ import com.newsblur.R;
import com.newsblur.domain.Feed;
import com.newsblur.fragment.DeleteFeedFragment;
import com.newsblur.fragment.FeedItemListFragment;
import com.newsblur.service.NBSyncService;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.FeedSet;
import com.newsblur.util.PrefsUtils;
@ -37,7 +36,7 @@ public class FeedItemsList extends ItemsList {
itemListFragment = (FeedItemListFragment) fragmentManager.findFragmentByTag(FeedItemListFragment.class.getName());
if (itemListFragment == null) {
itemListFragment = FeedItemListFragment.newInstance(feed, currentState, getDefaultFeedView());
itemListFragment = FeedItemListFragment.newInstance(feed);
itemListFragment.setRetainInstance(true);
FragmentTransaction listTransaction = fragmentManager.beginTransaction();
listTransaction.add(R.id.activity_itemlist_container, itemListFragment, FeedItemListFragment.class.getName());
@ -97,11 +96,6 @@ public class FeedItemsList extends ItemsList {
return PrefsUtils.getReadFilterForFeed(this, feed.feedId);
}
@Override
protected DefaultFeedView getDefaultFeedView() {
return PrefsUtils.getDefaultFeedViewForFeed(this, feed.feedId);
}
@Override
public void defaultFeedViewChanged(DefaultFeedView value) {
PrefsUtils.setDefaultFeedViewForFeed(this, feed.feedId, value);

View file

@ -5,19 +5,16 @@ import android.os.Bundle;
import com.newsblur.database.FeedReadingAdapter;
import com.newsblur.domain.Classifier;
import com.newsblur.domain.Feed;
import com.newsblur.service.NBSyncService;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.UIUtils;
public class FeedReading extends Reading {
Feed feed;
@Override
protected void onCreate(Bundle savedInstanceBundle) {
feed = (Feed) getIntent().getSerializableExtra(EXTRA_FEED);
super.onCreate(savedInstanceBundle);
Feed feed = FeedUtils.dbHelper.getFeed(fs.getSingleFeed());
Classifier classifier = FeedUtils.dbHelper.getClassifierForFeed(feed.feedId);
UIUtils.setCustomActionBar(this, feed.faviconUrl, feed.title);

View file

@ -4,7 +4,6 @@ import java.util.List;
import com.newsblur.R;
import com.newsblur.domain.FeedResult;
import com.newsblur.util.UIUtils;
import android.app.Activity;
import android.content.Context;

View file

@ -1,30 +1,20 @@
package com.newsblur.activity;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuInflater;
import android.widget.Toast;
import android.util.Log;
import com.newsblur.R;
import com.newsblur.fragment.FolderItemListFragment;
import com.newsblur.fragment.MarkAllReadDialogFragment;
import com.newsblur.fragment.MarkAllReadDialogFragment.MarkAllReadDialogListener;
import com.newsblur.util.AppConstants;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.FeedSet;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ReadFilter;
import com.newsblur.util.StateFilter;
import com.newsblur.util.StoryOrder;
import com.newsblur.util.UIUtils;
@ -44,7 +34,7 @@ public class FolderItemsList extends ItemsList implements MarkAllReadDialogListe
itemListFragment = (FolderItemListFragment) fragmentManager.findFragmentByTag(FolderItemListFragment.class.getName());
if (itemListFragment == null) {
itemListFragment = FolderItemListFragment.newInstance(folderName, currentState, getDefaultFeedView());
itemListFragment = FolderItemListFragment.newInstance();
itemListFragment.setRetainInstance(true);
FragmentTransaction listTransaction = fragmentManager.beginTransaction();
listTransaction.add(R.id.activity_itemlist_container, itemListFragment, FolderItemListFragment.class.getName());
@ -95,11 +85,6 @@ public class FolderItemsList extends ItemsList implements MarkAllReadDialogListe
return PrefsUtils.getReadFilterForFolder(this, folderName);
}
@Override
protected DefaultFeedView getDefaultFeedView() {
return PrefsUtils.getDefaultFeedViewForFolder(this, folderName);
}
@Override
public void defaultFeedViewChanged(DefaultFeedView value) {
PrefsUtils.setDefaultFeedViewForFolder(this, folderName, value);

View file

@ -8,14 +8,11 @@ import com.newsblur.util.UIUtils;
public class FolderReading extends Reading {
private String folderName;
@Override
protected void onCreate(Bundle savedInstanceBundle) {
super.onCreate(savedInstanceBundle);
folderName = getIntent().getStringExtra(Reading.EXTRA_FOLDERNAME);
UIUtils.setCustomActionBar(this, R.drawable.g_icn_folder_rss, folderName);
UIUtils.setCustomActionBar(this, R.drawable.g_icn_folder_rss, fs.getFolderName());
readingAdapter = new MixedFeedsReadingAdapter(getFragmentManager(), defaultFeedView, null);

View file

@ -25,7 +25,7 @@ public class GlobalSharedStoriesItemsList extends ItemsList {
itemListFragment = (GlobalSharedStoriesItemListFragment) fragmentManager.findFragmentByTag(GlobalSharedStoriesItemListFragment.class.getName());
if (itemListFragment == null) {
itemListFragment = GlobalSharedStoriesItemListFragment.newInstance(getDefaultFeedView(), currentState);
itemListFragment = GlobalSharedStoriesItemListFragment.newInstance();
itemListFragment.setRetainInstance(true);
FragmentTransaction listTransaction = fragmentManager.beginTransaction();
listTransaction.add(R.id.activity_itemlist_container, itemListFragment, GlobalSharedStoriesItemListFragment.class.getName());
@ -50,11 +50,6 @@ public class GlobalSharedStoriesItemsList extends ItemsList {
return true;
}
@Override
protected DefaultFeedView getDefaultFeedView() {
return PrefsUtils.getDefaultFeedViewForFolder(this, PrefConstants.GLOBAL_SHARED_STORIES_FOLDER_NAME);
}
@Override
public void defaultFeedViewChanged(DefaultFeedView value) {
PrefsUtils.setDefaultFeedViewForFolder(this, PrefConstants.GLOBAL_SHARED_STORIES_FOLDER_NAME, value);

View file

@ -1,13 +1,10 @@
package com.newsblur.activity;
import android.content.Intent;
import android.os.Bundle;
import android.app.FragmentManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.TextView;
import com.newsblur.R;
@ -16,21 +13,20 @@ import com.newsblur.fragment.ItemListFragment;
import com.newsblur.fragment.ReadFilterDialogFragment;
import com.newsblur.fragment.StoryOrderDialogFragment;
import com.newsblur.service.NBSyncService;
import com.newsblur.util.AppConstants;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.DefaultFeedViewChangedListener;
import com.newsblur.util.FeedSet;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ReadFilter;
import com.newsblur.util.ReadFilterChangedListener;
import com.newsblur.util.StateFilter;
import com.newsblur.util.StoryOrder;
import com.newsblur.util.StoryOrderChangedListener;
import com.newsblur.view.StateToggleButton.StateChangedListener;
import com.newsblur.util.UIUtils;
public abstract class ItemsList extends NbActivity implements StateChangedListener, StoryOrderChangedListener, ReadFilterChangedListener, DefaultFeedViewChangedListener {
public abstract class ItemsList extends NbActivity implements StoryOrderChangedListener, ReadFilterChangedListener, DefaultFeedViewChangedListener {
public static final String EXTRA_STATE = "currentIntelligenceState";
private static final String STORY_ORDER = "storyOrder";
private static final String READ_FILTER = "readFilter";
private static final String DEFAULT_FEED_VIEW = "defaultFeedView";
@ -39,7 +35,7 @@ public abstract class ItemsList extends NbActivity implements StateChangedListen
protected ItemListFragment itemListFragment;
protected FragmentManager fragmentManager;
private TextView overlayStatusText;
protected StateFilter currentState;
protected StateFilter intelState;
private FeedSet fs;
@ -49,8 +45,7 @@ public abstract class ItemsList extends NbActivity implements StateChangedListen
overridePendingTransition(R.anim.slide_in_from_right, R.anim.slide_out_to_left);
// our intel state is entirely determined by the state of the Main view
currentState = (StateFilter) getIntent().getSerializableExtra(EXTRA_STATE);
intelState = PrefsUtils.getStateFilter(this);
this.fs = createFeedSet();
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
@ -59,6 +54,12 @@ public abstract class ItemsList extends NbActivity implements StateChangedListen
fragmentManager = getFragmentManager();
this.overlayStatusText = (TextView) findViewById(R.id.itemlist_sync_status);
if (PrefsUtils.isAutoOpenFirstUnread(this)) {
if (FeedUtils.dbHelper.getUnreadCount(fs, intelState) > 0) {
UIUtils.startReadingActivity(fs, Reading.FIND_FIRST_UNREAD, this, false);
}
}
}
protected abstract FeedSet createFeedSet();
@ -113,7 +114,7 @@ public abstract class ItemsList extends NbActivity implements StateChangedListen
readFilter.show(getFragmentManager(), READ_FILTER);
return true;
} else if (item.getItemId() == R.id.menu_default_view) {
DefaultFeedView currentValue = getDefaultFeedView();
DefaultFeedView currentValue = PrefsUtils.getDefaultFeedView(this, fs);
DefaultFeedViewDialogFragment readFilter = DefaultFeedViewDialogFragment.newInstance(currentValue);
readFilter.show(getFragmentManager(), DEFAULT_FEED_VIEW);
return true;
@ -127,8 +128,6 @@ public abstract class ItemsList extends NbActivity implements StateChangedListen
protected abstract ReadFilter getReadFilter();
protected abstract DefaultFeedView getDefaultFeedView();
@Override
public void handleUpdate(int updateType) {
if ((updateType & UPDATE_REBUILD) != 0) {
@ -161,11 +160,6 @@ public abstract class ItemsList extends NbActivity implements StateChangedListen
}
}
@Override
public void changedState(StateFilter state) {
itemListFragment.changeState(state);
}
@Override
public void storyOrderChanged(StoryOrder newValue) {
updateStoryOrderPreference(newValue);

View file

@ -11,39 +11,41 @@ import android.view.Window;
import com.newsblur.R;
import com.newsblur.fragment.LoginRegisterFragment;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefConstants;
import com.newsblur.util.PrefsUtils;
public class Login extends Activity {
private FragmentManager fragmentManager;
private final static String currentTag = "currentFragment";
@Override
protected void onCreate(Bundle savedInstanceState) {
PrefsUtils.applyThemePreference(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
preferenceCheck();
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_login);
fragmentManager = getFragmentManager();
if (fragmentManager.findFragmentByTag(currentTag) == null) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
LoginRegisterFragment login = new LoginRegisterFragment();
transaction.add(R.id.login_container, login, currentTag);
transaction.commit();
}
}
// this is the first Activity launched; use it to init the global singletons in FeedUtils
FeedUtils.offerInitContext(this);
private void preferenceCheck() {
final SharedPreferences preferences = getSharedPreferences(PrefConstants.PREFERENCES, Context.MODE_PRIVATE);
if (preferences.getString(PrefConstants.PREF_COOKIE, null) != null) {
final Intent mainIntent = new Intent(this, Main.class);
startActivity(mainIntent);
}
}
// see if a user is already logged in; if so, jump to the Main activity
preferenceCheck();
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_login);
FragmentManager fragmentManager = getFragmentManager();
if (fragmentManager.findFragmentByTag(LoginRegisterFragment.class.getName()) == null) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
LoginRegisterFragment login = new LoginRegisterFragment();
transaction.add(R.id.login_container, login, LoginRegisterFragment.class.getName());
transaction.commit();
}
}
private void preferenceCheck() {
final SharedPreferences preferences = getSharedPreferences(PrefConstants.PREFERENCES, Context.MODE_PRIVATE);
if (preferences.getString(PrefConstants.PREF_COOKIE, null) != null) {
final Intent mainIntent = new Intent(this, Main.class);
startActivity(mainIntent);
}
}
}

View file

@ -10,7 +10,6 @@ import android.net.Uri;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;

View file

@ -1,26 +0,0 @@
package com.newsblur.activity;
import android.app.Application;
import com.newsblur.database.BlurDatabaseHelper;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.ImageLoader;
public class NewsBlurApplication extends Application {
private ImageLoader imageLoader;
private BlurDatabaseHelper dbHelper;
@Override
public void onCreate() {
super.onCreate();
imageLoader = new ImageLoader(this);
dbHelper = new BlurDatabaseHelper(this);
FeedUtils.offerDB(dbHelper);
}
public ImageLoader getImageLoader() {
return imageLoader;
}
}

View file

@ -4,14 +4,11 @@ import android.os.Bundle;
import android.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuInflater;
import android.widget.Toast;
import com.newsblur.R;
import com.newsblur.fragment.ReadStoriesItemListFragment;
import com.newsblur.fragment.FeedItemListFragment;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.FeedSet;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefConstants;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ReadFilter;
@ -28,7 +25,7 @@ public class ReadStoriesItemsList extends ItemsList {
itemListFragment = (ReadStoriesItemListFragment) fragmentManager.findFragmentByTag(ReadStoriesItemListFragment.class.getName());
if (itemListFragment == null) {
itemListFragment = ReadStoriesItemListFragment.newInstance(getDefaultFeedView());
itemListFragment = ReadStoriesItemListFragment.newInstance();
itemListFragment.setRetainInstance(true);
FragmentTransaction listTransaction = fragmentManager.beginTransaction();
listTransaction.add(R.id.activity_itemlist_container, itemListFragment, ReadStoriesItemListFragment.class.getName());
@ -53,11 +50,6 @@ public class ReadStoriesItemsList extends ItemsList {
return true;
}
@Override
protected DefaultFeedView getDefaultFeedView() {
return PrefsUtils.getDefaultFeedViewForFolder(this, PrefConstants.READ_STORIES_FOLDER_NAME);
}
@Override
public void defaultFeedViewChanged(DefaultFeedView value) {
PrefsUtils.setDefaultFeedViewForFolder(this, PrefConstants.READ_STORIES_FOLDER_NAME, value);

View file

@ -52,25 +52,23 @@ import com.newsblur.view.NonfocusScrollview.ScrollChangeListener;
public abstract class Reading extends NbActivity implements OnPageChangeListener, OnSeekBarChangeListener, ScrollChangeListener, LoaderManager.LoaderCallbacks<Cursor> {
public static final String EXTRA_FEEDSET = "feed_set";
public static final String EXTRA_FEED = "feed";
public static final String EXTRA_SOCIAL_FEED = "social_feed";
public static final String EXTRA_POSITION = "feed_position";
public static final String EXTRA_FOLDERNAME = "foldername";
public static final String EXTRA_DEFAULT_FEED_VIEW = "default_feed_view";
public static final String EXTRA_STORY_HASH = "story_hash";
private static final String TEXT_SIZE = "textsize";
private static final String BUNDLE_POSITION = "position";
private static final String BUNDLE_STARTING_UNREAD = "starting_unread";
private static final String BUNDLE_SELECTED_FEED_VIEW = "selectedFeedView";
private static final String BUNDLE_IS_FULLSCREEN = "is_fullscreen";
/** special value for starting story hash that jumps to the first unread. */
public static final String FIND_FIRST_UNREAD = "FIND_FIRST_UNREAD";
private static final int OVERLAY_RANGE_TOP_DP = 40;
private static final int OVERLAY_RANGE_BOT_DP = 60;
/** The minimum screen width (in DP) needed to show all the overlay controls. */
private static final int OVERLAY_MIN_WIDTH_DP = 355;
protected StateFilter currentState;
protected StateFilter intelState;
protected StoryOrder storyOrder;
protected ReadFilter readFilter;
@ -136,7 +134,7 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
storyHash = savedInstanceBundle.getString(EXTRA_STORY_HASH);
}
currentState = (StateFilter) getIntent().getSerializableExtra(ItemsList.EXTRA_STATE);
intelState = PrefsUtils.getStateFilter(this);
storyOrder = PrefsUtils.getStoryOrder(this, fs);
readFilter = PrefsUtils.getReadFilter(this, fs);
volumeKeyNavigation = PrefsUtils.getVolumeKeyNavigation(this);
@ -144,7 +142,7 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
if ((savedInstanceBundle != null) && savedInstanceBundle.containsKey(BUNDLE_SELECTED_FEED_VIEW)) {
defaultFeedView = (DefaultFeedView)savedInstanceBundle.getSerializable(BUNDLE_SELECTED_FEED_VIEW);
} else {
defaultFeedView = (DefaultFeedView) getIntent().getSerializableExtra(EXTRA_DEFAULT_FEED_VIEW);
defaultFeedView = PrefsUtils.getDefaultFeedView(this, fs);
}
// were we fullscreen before rotation?
@ -219,7 +217,7 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
finish();
return null;
}
return FeedUtils.dbHelper.getStoriesLoader(fs, currentState);
return FeedUtils.dbHelper.getStoriesLoader(fs, intelState);
}
@Override
@ -268,7 +266,8 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
while (stories.moveToNext()) {
if (stopLoading) return;
Story story = Story.fromCursor(stories);
if (story.storyHash.equals(storyHash)) {
if ( ((storyHash.equals(FIND_FIRST_UNREAD)) && (!story.read)) ||
(story.storyHash.equals(storyHash)) ) {
// now that the pager is getting the right story, make it visible
pager.setVisibility(View.VISIBLE);
pager.setCurrentItem(stories.getPosition(), false);
@ -312,7 +311,9 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
private int getUnreadCount() {
// saved stories and global shared stories don't have unreads
if (fs.isAllSaved() || fs.isGlobalShared()) return 0;
return FeedUtils.dbHelper.getUnreadCount(fs, currentState);
int result = FeedUtils.dbHelper.getUnreadCount(fs, intelState);
if (result < 0) return 0;
return result;
}
@Override
@ -358,7 +359,7 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
return true;
} else if (item.getItemId() == R.id.menu_textsize) {
TextSizeDialogFragment textSize = TextSizeDialogFragment.newInstance(PrefsUtils.getTextSize(this));
textSize.show(getFragmentManager(), TEXT_SIZE);
textSize.show(getFragmentManager(), TextSizeDialogFragment.class.getName());
return true;
} else if (item.getItemId() == R.id.menu_reading_save) {
if (story.starred) {

View file

@ -4,14 +4,11 @@ import android.os.Bundle;
import android.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuInflater;
import android.widget.Toast;
import com.newsblur.R;
import com.newsblur.fragment.SavedStoriesItemListFragment;
import com.newsblur.fragment.FeedItemListFragment;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.FeedSet;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefConstants;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ReadFilter;
@ -28,7 +25,7 @@ public class SavedStoriesItemsList extends ItemsList {
itemListFragment = (SavedStoriesItemListFragment) fragmentManager.findFragmentByTag(SavedStoriesItemListFragment.class.getName());
if (itemListFragment == null) {
itemListFragment = SavedStoriesItemListFragment.newInstance(getDefaultFeedView());
itemListFragment = SavedStoriesItemListFragment.newInstance();
itemListFragment.setRetainInstance(true);
FragmentTransaction listTransaction = fragmentManager.beginTransaction();
listTransaction.add(R.id.activity_itemlist_container, itemListFragment, SavedStoriesItemListFragment.class.getName());
@ -53,11 +50,6 @@ public class SavedStoriesItemsList extends ItemsList {
return true;
}
@Override
protected DefaultFeedView getDefaultFeedView() {
return PrefsUtils.getDefaultFeedViewForFolder(this, PrefConstants.SAVED_STORIES_FOLDER_NAME);
}
@Override
public void defaultFeedViewChanged(DefaultFeedView value) {
PrefsUtils.setDefaultFeedViewForFolder(this, PrefConstants.SAVED_STORIES_FOLDER_NAME, value);

View file

@ -1,21 +1,16 @@
package com.newsblur.activity;
import android.content.Intent;
import android.os.Bundle;
import android.app.FragmentTransaction;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.widget.Toast;
import com.newsblur.R;
import com.newsblur.domain.SocialFeed;
import com.newsblur.fragment.FeedItemListFragment;
import com.newsblur.fragment.SocialFeedItemListFragment;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.FeedSet;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefConstants;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ReadFilter;
import com.newsblur.util.StoryOrder;
@ -35,7 +30,7 @@ public class SocialFeedItemsList extends ItemsList {
UIUtils.setCustomActionBar(this, socialFeed.photoUrl, socialFeed.feedTitle);
if (itemListFragment == null) {
itemListFragment = SocialFeedItemListFragment.newInstance(socialFeed, currentState, getDefaultFeedView());
itemListFragment = SocialFeedItemListFragment.newInstance();
itemListFragment.setRetainInstance(true);
FragmentTransaction listTransaction = fragmentManager.beginTransaction();
listTransaction.add(R.id.activity_itemlist_container, itemListFragment, SocialFeedItemListFragment.class.getName());
@ -76,11 +71,6 @@ public class SocialFeedItemsList extends ItemsList {
return PrefsUtils.getReadFilterForFeed(this, socialFeed.userId);
}
@Override
protected DefaultFeedView getDefaultFeedView() {
return PrefsUtils.getDefaultFeedViewForFeed(this, socialFeed.userId);
}
@Override
public void defaultFeedViewChanged(DefaultFeedView value) {
PrefsUtils.setDefaultFeedViewForFeed(this, socialFeed.userId, value);

View file

@ -11,22 +11,16 @@ import com.newsblur.util.UIUtils;
public class SocialFeedReading extends Reading {
public static final String EXTRA_NAVIGATE_FROM_PROFILE = "navigate_from_profile";
private SocialFeed socialFeed;
private boolean openedFromProfile;
public static final String EXTRA_IGNORE_FILTERS = "ignore_filters";
private boolean ignoreFilters;
@Override
protected void onCreate(Bundle savedInstanceBundle) {
super.onCreate(savedInstanceBundle);
socialFeed = (SocialFeed) getIntent().getSerializableExtra(EXTRA_SOCIAL_FEED);
openedFromProfile = getIntent().hasExtra(EXTRA_NAVIGATE_FROM_PROFILE);
ignoreFilters = getIntent().hasExtra(EXTRA_IGNORE_FILTERS);
SocialFeed socialFeed = FeedUtils.dbHelper.getSocialFeed(fs.getSingleSocialFeed().getKey());
UIUtils.setCustomActionBar(this, socialFeed.photoUrl, socialFeed.feedTitle);
readingAdapter = new MixedFeedsReadingAdapter(getFragmentManager(), defaultFeedView, socialFeed.userId);
getLoaderManager().initLoader(0, null, this);
}
@ -34,7 +28,7 @@ public class SocialFeedReading extends Reading {
public Loader<Cursor> onCreateLoader(int loaderId, Bundle bundle) {
// If we have navigated from the profile we want to ignore the StateFilter and ReadFilter settings
// for the feed to ensure we can find the story.
if (openedFromProfile) {
if (ignoreFilters) {
return FeedUtils.dbHelper.getStoriesLoaderIgnoreFilters(fs);
} else {
return super.onCreateLoader(loaderId, bundle);

View file

@ -24,7 +24,6 @@ import com.newsblur.network.domain.StoriesResponse;
import com.newsblur.service.NBSyncService;
import com.newsblur.util.AppConstants;
import com.newsblur.util.FeedSet;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ReadingAction;
import com.newsblur.util.ReadFilter;

View file

@ -4,7 +4,6 @@ import android.database.Cursor;
import android.text.TextUtils;
import android.provider.BaseColumns;
import com.newsblur.util.AppConstants;
import com.newsblur.util.ReadFilter;
import com.newsblur.util.StateFilter;
import com.newsblur.util.StoryOrder;
@ -287,11 +286,11 @@ public class DatabaseConstants {
public static final String[] FEED_COLUMNS = {
FEED_TABLE + "." + FEED_ACTIVE, FEED_TABLE + "." + FEED_ID, FEED_TABLE + "." + FEED_FAVICON_URL, FEED_TABLE + "." + FEED_TITLE, FEED_TABLE + "." + FEED_LINK, FEED_TABLE + "." + FEED_ADDRESS, FEED_TABLE + "." + FEED_SUBSCRIBERS, FEED_TABLE + "." + FEED_UPDATED_SECONDS, FEED_TABLE + "." + FEED_FAVICON_FADE, FEED_TABLE + "." + FEED_FAVICON_COLOR, FEED_TABLE + "." + FEED_FAVICON_BORDER, FEED_TABLE + "." + FEED_FAVICON_TEXT,
FEED_TABLE + "." + FEED_POSITIVE_COUNT, FEED_TABLE + "." + FEED_NEUTRAL_COUNT, FEED_TABLE + "." + FEED_NEGATIVE_COUNT
FEED_TABLE + "." + FEED_POSITIVE_COUNT, FEED_TABLE + "." + FEED_NEUTRAL_COUNT, FEED_TABLE + "." + FEED_NEGATIVE_COUNT,
};
public static final String[] SOCIAL_FEED_COLUMNS = {
SOCIAL_FEED_ID, SOCIAL_FEED_USERNAME, SOCIAL_FEED_TITLE, SOCIAL_FEED_ICON, SOCIAL_FEED_POSITIVE_COUNT, SOCIAL_FEED_NEUTRAL_COUNT, SOCIAL_FEED_NEGATIVE_COUNT
SOCIAL_FEED_ID, SOCIAL_FEED_USERNAME, SOCIAL_FEED_TITLE, SOCIAL_FEED_ICON, SOCIAL_FEED_POSITIVE_COUNT, SOCIAL_FEED_NEUTRAL_COUNT, SOCIAL_FEED_NEGATIVE_COUNT,
};
public static final String SUM_STORY_TOTAL = "storyTotal";
@ -312,7 +311,7 @@ public class DatabaseConstants {
STORY_TABLE + "." + STORY_FEED_ID, STORY_TABLE + "." + STORY_ID, STORY_INTELLIGENCE_AUTHORS, STORY_INTELLIGENCE_FEED, STORY_INTELLIGENCE_TAGS,
STORY_INTELLIGENCE_TITLE, STORY_PERMALINK, STORY_READ, STORY_STARRED, STORY_STARRED_DATE, STORY_SHARE_COUNT, STORY_TAGS, STORY_TITLE,
STORY_SOCIAL_USER_ID, STORY_SOURCE_USER_ID, STORY_SHARED_USER_IDS, STORY_FRIEND_USER_IDS, STORY_PUBLIC_USER_IDS, STORY_SUM_TOTAL, STORY_HASH,
STORY_LAST_READ_DATE
STORY_LAST_READ_DATE,
};
public static final String MULTIFEED_STORIES_QUERY_BASE =

View file

@ -1,8 +1,5 @@
package com.newsblur.database;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Color;
@ -10,7 +7,6 @@ import android.graphics.Typeface;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.TextView;
import com.newsblur.R;

View file

@ -1,6 +1,5 @@
package com.newsblur.database;
import android.app.Fragment;
import android.app.FragmentManager;
import com.newsblur.activity.ReadingAdapter;

View file

@ -10,9 +10,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
@ -28,16 +26,13 @@ import android.widget.TextView;
import com.newsblur.R;
import com.newsblur.activity.AllSharedStoriesItemsList;
import com.newsblur.activity.AllStoriesItemsList;
import com.newsblur.activity.FolderItemsList;
import com.newsblur.activity.GlobalSharedStoriesItemsList;
import com.newsblur.activity.NewsBlurApplication;
import static com.newsblur.database.DatabaseConstants.getStr;
import com.newsblur.domain.Feed;
import com.newsblur.domain.Folder;
import com.newsblur.domain.SocialFeed;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.AppConstants;
import com.newsblur.util.ImageLoader;
import com.newsblur.util.StateFilter;
/**
@ -90,16 +85,12 @@ public class FolderListAdapter extends BaseExpandableListAdapter {
private int savedStoriesCount;
private Context context;
private LayoutInflater inflater;
private ImageLoader imageLoader;
private StateFilter currentState;
public FolderListAdapter(Context context, StateFilter currentState) {
this.context = context;
this.currentState = currentState;
imageLoader = ((NewsBlurApplication) context.getApplicationContext()).getImageLoader();
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@ -112,7 +103,6 @@ public class FolderListAdapter extends BaseExpandableListAdapter {
@Override
public void onClick(View v) {
Intent i = new Intent(context, GlobalSharedStoriesItemsList.class);
i.putExtra(GlobalSharedStoriesItemsList.EXTRA_STATE, currentState);
context.startActivity(i);
}
});
@ -122,7 +112,6 @@ public class FolderListAdapter extends BaseExpandableListAdapter {
@Override
public void onClick(View v) {
Intent i = new Intent(context, AllSharedStoriesItemsList.class);
i.putExtra(AllStoriesItemsList.EXTRA_STATE, currentState);
context.startActivity(i);
}
});
@ -164,7 +153,6 @@ public class FolderListAdapter extends BaseExpandableListAdapter {
public void onClick(View v) {
Intent i = new Intent(v.getContext(), FolderItemsList.class);
i.putExtra(FolderItemsList.EXTRA_FOLDER_NAME, canonicalFolderName);
i.putExtra(FolderItemsList.EXTRA_STATE, currentState);
context.startActivity(i);
}
});
@ -194,7 +182,7 @@ public class FolderListAdapter extends BaseExpandableListAdapter {
}
SocialFeed f = socialFeedsOrdered.get(childPosition);
((TextView) v.findViewById(R.id.row_socialfeed_name)).setText(f.feedTitle);
imageLoader.displayImage(f.photoUrl, ((ImageView) v.findViewById(R.id.row_socialfeed_icon)), false);
FeedUtils.imageLoader.displayImage(f.photoUrl, ((ImageView) v.findViewById(R.id.row_socialfeed_icon)), false);
TextView neutCounter = ((TextView) v.findViewById(R.id.row_socialsumneu));
if (f.neutralCount > 0 && currentState != StateFilter.BEST) {
neutCounter.setVisibility(View.VISIBLE);
@ -217,7 +205,7 @@ public class FolderListAdapter extends BaseExpandableListAdapter {
v = convertView;
}
((TextView) v.findViewById(R.id.row_feedname)).setText(f.title);
imageLoader.displayImage(f.faviconUrl, ((ImageView) v.findViewById(R.id.row_feedfavicon)), false);
FeedUtils.imageLoader.displayImage(f.faviconUrl, ((ImageView) v.findViewById(R.id.row_feedfavicon)), false);
TextView neutCounter = ((TextView) v.findViewById(R.id.row_feedneutral));
if (f.neutralCount > 0 && currentState != StateFilter.BEST) {
neutCounter.setVisibility(View.VISIBLE);

View file

@ -1,6 +1,5 @@
package com.newsblur.database;
import android.app.Fragment;
import android.app.FragmentManager;
import com.newsblur.activity.ReadingAdapter;

View file

@ -1,34 +1,27 @@
package com.newsblur.database;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.Typeface;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.TextView;
import com.newsblur.R;
import com.newsblur.activity.NewsBlurApplication;
import com.newsblur.domain.Story;
import com.newsblur.util.ImageLoader;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ThemeUtils;
public class MultipleFeedItemsAdapter extends StoryItemsAdapter {
private ImageLoader imageLoader;
private int storyTitleUnread, storyContentUnread, storyAuthorUnread, storyTitleRead, storyContentRead, storyAuthorRead, storyDateUnread, storyDateRead, storyFeedUnread, storyFeedRead;
private boolean ignoreReadStatus;
public MultipleFeedItemsAdapter(Context context, int layout, Cursor c, String[] from, int[] to, boolean ignoreReadStatus) {
super(context, layout, c, from, to);
imageLoader = ((NewsBlurApplication) context.getApplicationContext()).getImageLoader();
storyTitleUnread = ThemeUtils.getStoryTitleUnreadColor(context);
storyTitleRead = ThemeUtils.getStoryTitleReadColor(context);
@ -59,7 +52,7 @@ public class MultipleFeedItemsAdapter extends StoryItemsAdapter {
String feedFade = cursor.getString(cursor.getColumnIndex(DatabaseConstants.FEED_FAVICON_COLOR));
String faviconUrl = cursor.getString(cursor.getColumnIndex(DatabaseConstants.FEED_FAVICON_URL));
imageLoader.displayImage(faviconUrl, ((ImageView) v.findViewById(R.id.row_item_feedicon)), false);
FeedUtils.imageLoader.displayImage(faviconUrl, ((ImageView) v.findViewById(R.id.row_item_feedicon)), false);
if (!TextUtils.equals(feedColor, "#null") && !TextUtils.equals(feedFade, "#null")) {
borderOne.setBackgroundColor(Color.parseColor(feedColor));

View file

@ -4,8 +4,6 @@ import android.content.Context;
import android.database.Cursor;
import android.widget.SimpleCursorAdapter;
import java.util.List;
import com.newsblur.domain.Story;
public class StoryItemsAdapter extends SimpleCursorAdapter {

View file

@ -1,9 +1,6 @@
package com.newsblur.domain;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import android.content.ContentValues;
import android.database.Cursor;

View file

@ -15,7 +15,6 @@ import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.newsblur.R;
import com.newsblur.activity.AddFacebook;

View file

@ -1,21 +1,12 @@
package com.newsblur.fragment;
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import com.newsblur.R;
import com.newsblur.activity.AllSharedStoriesReading;
import com.newsblur.activity.FeedReading;
import com.newsblur.activity.ItemsList;
import com.newsblur.activity.Reading;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.StateFilter;
import com.newsblur.util.StoryOrder;
import com.newsblur.view.SocialItemViewBinder;
public class AllSharedStoriesItemListFragment extends ItemListFragment {
@ -32,24 +23,11 @@ public class AllSharedStoriesItemListFragment extends ItemListFragment {
super.onLoadFinished(loader, cursor);
}
public static ItemListFragment newInstance(StateFilter currentState, DefaultFeedView defaultFeedView) {
public static ItemListFragment newInstance() {
ItemListFragment everythingFragment = new AllSharedStoriesItemListFragment();
Bundle arguments = new Bundle();
arguments.putSerializable("currentState", currentState);
arguments.putSerializable("defaultFeedView", defaultFeedView);
everythingFragment.setArguments(arguments);
return everythingFragment;
}
@Override
public void onItemClick_(String storyHash) {
Intent i = new Intent(getActivity(), AllSharedStoriesReading.class);
i.putExtra(Reading.EXTRA_STORY_HASH, storyHash);
i.putExtra(Reading.EXTRA_FEEDSET, getFeedSet());
i.putExtra(ItemsList.EXTRA_STATE, currentState);
i.putExtra(Reading.EXTRA_DEFAULT_FEED_VIEW, defaultFeedView);
startActivity(i);
}
}

View file

@ -1,21 +1,12 @@
package com.newsblur.fragment;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.content.Loader;
import android.view.View;
import com.newsblur.R;
import com.newsblur.activity.AllStoriesReading;
import com.newsblur.activity.FeedReading;
import com.newsblur.activity.ItemsList;
import com.newsblur.activity.Reading;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.StateFilter;
import com.newsblur.util.StoryOrder;
import com.newsblur.view.SocialItemViewBinder;
public class AllStoriesItemListFragment extends ItemListFragment {
@ -32,24 +23,11 @@ public class AllStoriesItemListFragment extends ItemListFragment {
super.onLoadFinished(loader, cursor);
}
public static ItemListFragment newInstance(StateFilter currentState, DefaultFeedView defaultFeedView) {
public static ItemListFragment newInstance() {
ItemListFragment everythingFragment = new AllStoriesItemListFragment();
Bundle arguments = new Bundle();
arguments.putSerializable("currentState", currentState);
arguments.putSerializable("defaultFeedView", defaultFeedView);
everythingFragment.setArguments(arguments);
return everythingFragment;
}
@Override
public void onItemClick_(String storyHash) {
Intent i = new Intent(getActivity(), AllStoriesReading.class);
i.putExtra(Reading.EXTRA_STORY_HASH, storyHash);
i.putExtra(Reading.EXTRA_FEEDSET, getFeedSet());
i.putExtra(ItemsList.EXTRA_STATE, currentState);
i.putExtra(Reading.EXTRA_DEFAULT_FEED_VIEW, defaultFeedView);
startActivity(i);
}
}

View file

@ -7,7 +7,6 @@ import android.os.Bundle;
import android.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

View file

@ -1,37 +1,24 @@
package com.newsblur.fragment;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.content.Loader;
import android.view.View;
import com.newsblur.R;
import com.newsblur.activity.FeedReading;
import com.newsblur.activity.ItemsList;
import com.newsblur.activity.Reading;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.FeedItemsAdapter;
import com.newsblur.domain.Feed;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.StateFilter;
import com.newsblur.util.StoryOrder;
import com.newsblur.util.ReadFilter;
import com.newsblur.view.FeedItemViewBinder;
public class FeedItemListFragment extends ItemListFragment {
private Feed feed;
public static FeedItemListFragment newInstance(Feed feed, StateFilter currentState, DefaultFeedView defaultFeedView) {
public static FeedItemListFragment newInstance(Feed feed) {
FeedItemListFragment feedItemFragment = new FeedItemListFragment();
Bundle args = new Bundle();
args.putSerializable("currentState", currentState);
args.putSerializable("feed", feed);
args.putSerializable("defaultFeedView", defaultFeedView);
feedItemFragment.setArguments(args);
return feedItemFragment;
}
@ -53,15 +40,4 @@ public class FeedItemListFragment extends ItemListFragment {
super.onLoadFinished(loader, cursor);
}
@Override
public void onItemClick_(String storyHash) {
Intent i = new Intent(getActivity(), FeedReading.class);
i.putExtra(Reading.EXTRA_STORY_HASH, storyHash);
i.putExtra(Reading.EXTRA_FEEDSET, getFeedSet());
i.putExtra(Reading.EXTRA_FEED, feed);
i.putExtra(ItemsList.EXTRA_STATE, currentState);
i.putExtra(Reading.EXTRA_DEFAULT_FEED_VIEW, defaultFeedView);
startActivity(i);
}
}

View file

@ -1,45 +1,23 @@
package com.newsblur.fragment;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.content.Loader;
import android.view.View;
import com.newsblur.R;
import com.newsblur.activity.FeedReading;
import com.newsblur.activity.FolderReading;
import com.newsblur.activity.ItemsList;
import com.newsblur.activity.Reading;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.StateFilter;
import com.newsblur.util.StoryOrder;
import com.newsblur.view.FeedItemViewBinder;
public class FolderItemListFragment extends ItemListFragment {
private String folderName;
public static FolderItemListFragment newInstance(String folderName, StateFilter currentState, DefaultFeedView defaultFeedView) {
public static FolderItemListFragment newInstance() {
FolderItemListFragment feedItemFragment = new FolderItemListFragment();
Bundle args = new Bundle();
args.putSerializable("currentState", currentState);
args.putString("folderName", folderName);
args.putSerializable("defaultFeedView", defaultFeedView);
feedItemFragment.setArguments(args);
return feedItemFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
folderName = getArguments().getString("folderName");
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
if ((adapter == null) && (cursor != null)) {
@ -52,15 +30,4 @@ public class FolderItemListFragment extends ItemListFragment {
super.onLoadFinished(loader, cursor);
}
@Override
public void onItemClick_(String storyHash) {
Intent i = new Intent(getActivity(), FolderReading.class);
i.putExtra(Reading.EXTRA_STORY_HASH, storyHash);
i.putExtra(Reading.EXTRA_FEEDSET, getFeedSet());
i.putExtra(FeedReading.EXTRA_FOLDERNAME, folderName);
i.putExtra(ItemsList.EXTRA_STATE, currentState);
i.putExtra(Reading.EXTRA_DEFAULT_FEED_VIEW, defaultFeedView);
startActivity(i);
}
}

View file

@ -30,7 +30,6 @@ import com.newsblur.R;
import com.newsblur.activity.AllStoriesItemsList;
import com.newsblur.activity.FeedItemsList;
import com.newsblur.activity.Main;
import com.newsblur.activity.ItemsList;
import com.newsblur.activity.ReadStoriesItemsList;
import com.newsblur.activity.SavedStoriesItemsList;
import com.newsblur.activity.SocialFeedItemsList;
@ -283,7 +282,6 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
@OnGroupClick(R.id.folderfeed_list) boolean onGroupClick(ExpandableListView list, View group, int groupPosition, long id) {
if (adapter.isFolderRoot(groupPosition)) {
Intent i = new Intent(getActivity(), AllStoriesItemsList.class);
i.putExtra(ItemsList.EXTRA_STATE, currentState);
startActivity(i);
return true;
} else if (adapter.isRowReadStories(groupPosition)) {
@ -345,7 +343,6 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
SocialFeed socialFeed = adapter.getSocialFeed(childName);
Intent intent = new Intent(getActivity(), SocialFeedItemsList.class);
intent.putExtra(SocialFeedItemsList.EXTRA_SOCIAL_FEED, socialFeed);
intent.putExtra(ItemsList.EXTRA_STATE, currentState);
getActivity().startActivity(intent);
} else {
Feed feed = adapter.getFeed(childName);
@ -353,7 +350,6 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
Intent intent = new Intent(getActivity(), FeedItemsList.class);
intent.putExtra(FeedItemsList.EXTRA_FEED, feed);
intent.putExtra(FeedItemsList.EXTRA_FOLDER_NAME, folderName);
intent.putExtra(ItemsList.EXTRA_STATE, currentState);
getActivity().startActivity(intent);
}
return true;

View file

@ -1,6 +1,5 @@
package com.newsblur.fragment;
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
@ -9,23 +8,15 @@ import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
import com.newsblur.R;
import com.newsblur.activity.FeedReading;
import com.newsblur.activity.GlobalSharedStoriesReading;
import com.newsblur.activity.ItemsList;
import com.newsblur.activity.Reading;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.StateFilter;
import com.newsblur.view.SocialItemViewBinder;
public class GlobalSharedStoriesItemListFragment extends ItemListFragment {
public static ItemListFragment newInstance(DefaultFeedView defaultFeedView, StateFilter currentState) {
public static ItemListFragment newInstance() {
ItemListFragment fragment = new GlobalSharedStoriesItemListFragment();
Bundle args = new Bundle();
args.putSerializable("defaultFeedView", defaultFeedView);
args.putSerializable("currentState", currentState);
fragment.setArguments(args);
return fragment;
}
@ -42,16 +33,6 @@ public class GlobalSharedStoriesItemListFragment extends ItemListFragment {
super.onLoadFinished(loader, cursor);
}
@Override
public void onItemClick_(String storyHash) {
Intent i = new Intent(getActivity(), GlobalSharedStoriesReading.class);
i.putExtra(Reading.EXTRA_STORY_HASH, storyHash);
i.putExtra(Reading.EXTRA_FEEDSET, getFeedSet());
i.putExtra(Reading.EXTRA_DEFAULT_FEED_VIEW, defaultFeedView);
i.putExtra(ItemsList.EXTRA_STATE, currentState);
startActivity(i);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);

View file

@ -41,6 +41,7 @@ import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.StateFilter;
import com.newsblur.util.StoryOrder;
import com.newsblur.util.UIUtils;
import com.newsblur.util.ViewUtils;
import com.newsblur.view.ProgressThrobber;
@ -52,7 +53,7 @@ public abstract class ItemListFragment extends NbFragment implements OnScrollLis
@FindView(R.id.itemlistfragment_list) ListView itemList;
protected StoryItemsAdapter adapter;
protected DefaultFeedView defaultFeedView;
protected StateFilter currentState;
protected StateFilter intelState;
private boolean cursorSeenYet = false;
private boolean firstStorySeenYet = false;
private boolean stopLoading = false;
@ -67,7 +68,7 @@ public abstract class ItemListFragment extends NbFragment implements OnScrollLis
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
currentState = (StateFilter) getArguments().getSerializable("currentState");
intelState = PrefsUtils.getStateFilter(getActivity());
defaultFeedView = (DefaultFeedView)getArguments().getSerializable("defaultFeedView");
activity = (ItemsList) getActivity();
}
@ -210,11 +211,6 @@ public abstract class ItemListFragment extends NbFragment implements OnScrollLis
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) { }
public void changeState(StateFilter state) {
currentState = state;
hasUpdated();
}
protected FeedSet getFeedSet() {
return activity.getFeedSet();
}
@ -234,7 +230,7 @@ public abstract class ItemListFragment extends NbFragment implements OnScrollLis
try { getActivity().finish(); } catch (Exception e) {;}
return null;
}
return FeedUtils.dbHelper.getStoriesLoader(getFeedSet(), currentState);
return FeedUtils.dbHelper.getStoriesLoader(getFeedSet(), intelState);
}
@Override
@ -344,11 +340,9 @@ public abstract class ItemListFragment extends NbFragment implements OnScrollLis
int truePosition = position - 1;
Story story = adapter.getStory(truePosition);
if (getActivity().isFinishing()) return;
onItemClick_(story.storyHash);
UIUtils.startReadingActivity(getFeedSet(), story.storyHash, getActivity(), false);
}
public abstract void onItemClick_(String storyHash);
protected void setupBezelSwipeDetector(View v) {
final GestureDetector gestureDetector = new GestureDetector(getActivity(), new BezelSwipeDetector());
v.setOnTouchListener(new OnTouchListener() {

View file

@ -7,10 +7,8 @@ import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;

View file

@ -3,7 +3,6 @@ package com.newsblur.fragment;
import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import com.newsblur.service.NBSyncService;

View file

@ -17,11 +17,7 @@ import android.widget.Toast;
import com.newsblur.R;
import com.newsblur.activity.FeedItemsList;
import com.newsblur.activity.ItemsList;
import com.newsblur.activity.Profile;
import com.newsblur.activity.Reading;
import com.newsblur.activity.SavedStoriesReading;
import com.newsblur.activity.SocialFeedReading;
import com.newsblur.domain.Feed;
import com.newsblur.domain.SocialFeed;
import com.newsblur.domain.UserDetails;
@ -30,8 +26,7 @@ import com.newsblur.domain.ActivityDetails.Category;
import com.newsblur.network.APIManager;
import com.newsblur.util.FeedSet;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefConstants;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.UIUtils;
import com.newsblur.view.ActivityDetailsAdapter;
import com.newsblur.view.ProgressThrobber;
@ -146,15 +141,10 @@ public abstract class ProfileActivityDetailsFragment extends Fragment implements
} else {
Intent intent = new Intent(context, FeedItemsList.class);
intent.putExtra(FeedItemsList.EXTRA_FEED, feed);
intent.putExtra(ItemsList.EXTRA_STATE, PrefsUtils.getStateFilter(context));
context.startActivity(intent);
}
} else if (activity.category == Category.STAR) {
Intent i = new Intent(context, SavedStoriesReading.class);
i.putExtra(Reading.EXTRA_FEEDSET, FeedSet.allSaved());
i.putExtra(Reading.EXTRA_STORY_HASH, activity.storyHash);
i.putExtra(Reading.EXTRA_DEFAULT_FEED_VIEW, PrefsUtils.getDefaultFeedViewForFolder(context, PrefConstants.SAVED_STORIES_FOLDER_NAME));
context.startActivity(i);
UIUtils.startReadingActivity(FeedSet.allSaved(), activity.storyHash, context, false);
} else if (isSocialFeedCategory(activity)) {
// Strip the social: prefix from feedId
String socialFeedId = activity.feedId.substring(7);
@ -162,14 +152,7 @@ public abstract class ProfileActivityDetailsFragment extends Fragment implements
if (feed == null) {
Toast.makeText(context, R.string.profile_do_not_follow, Toast.LENGTH_SHORT).show();
} else {
Intent i = new Intent(context, SocialFeedReading.class);
i.putExtra(Reading.EXTRA_FEEDSET, FeedSet.singleSocialFeed(feed.userId, feed.username));
i.putExtra(Reading.EXTRA_SOCIAL_FEED, feed);
i.putExtra(ItemsList.EXTRA_STATE, PrefsUtils.getStateFilter(context));
i.putExtra(Reading.EXTRA_STORY_HASH, activity.storyHash);
i.putExtra(Reading.EXTRA_DEFAULT_FEED_VIEW, PrefsUtils.getDefaultFeedViewForFeed(context, socialFeedId));
i.putExtra(SocialFeedReading.EXTRA_NAVIGATE_FROM_PROFILE, true);
context.startActivity(i);
UIUtils.startReadingActivity(FeedSet.singleSocialFeed(feed.userId, feed.username), activity.storyHash, context, true);
}
}
}

View file

@ -16,10 +16,9 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.newsblur.R;
import com.newsblur.activity.NewsBlurApplication;
import com.newsblur.domain.UserDetails;
import com.newsblur.network.APIManager;
import com.newsblur.util.ImageLoader;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.UIUtils;
@ -30,14 +29,12 @@ public class ProfileDetailsFragment extends Fragment implements OnClickListener
private View locationIcon;
private ImageView imageView;
private boolean viewingSelf = false;
private ImageLoader imageLoader;
private Button followButton, unfollowButton;
private APIManager apiManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
imageLoader = ((NewsBlurApplication) getActivity().getApplicationContext()).getImageLoader();
apiManager = new APIManager(getActivity());
}
@ -102,7 +99,7 @@ public class ProfileDetailsFragment extends Fragment implements OnClickListener
followingCount.setText("" + user.followingCount);
if (!viewingSelf) {
imageLoader.displayImage(user.photoUrl, imageView);
FeedUtils.imageLoader.displayImage(user.photoUrl, imageView);
if (user.followedByYou) {
unfollowButton.setVisibility(View.VISIBLE);
followButton.setVisibility(View.GONE);

View file

@ -1,7 +1,5 @@
package com.newsblur.fragment;
import android.content.CursorLoader;
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
@ -10,13 +8,8 @@ import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
import com.newsblur.R;
import com.newsblur.activity.Reading;
import com.newsblur.activity.ReadStoriesReading;
import com.newsblur.activity.FeedReading;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.StoryOrder;
import com.newsblur.view.SocialItemViewBinder;
public class ReadStoriesItemListFragment extends ItemListFragment {
@ -26,10 +19,9 @@ public class ReadStoriesItemListFragment extends ItemListFragment {
super.onCreate(savedInstanceState);
}
public static ItemListFragment newInstance(DefaultFeedView defaultFeedView) {
public static ItemListFragment newInstance() {
ItemListFragment fragment = new ReadStoriesItemListFragment();
Bundle args = new Bundle();
args.putSerializable("defaultFeedView", defaultFeedView);
fragment.setArguments(args);
return fragment;
}
@ -46,15 +38,6 @@ public class ReadStoriesItemListFragment extends ItemListFragment {
super.onLoadFinished(loader, cursor);
}
@Override
public void onItemClick_(String storyHash) {
Intent i = new Intent(getActivity(), ReadStoriesReading.class);
i.putExtra(Reading.EXTRA_STORY_HASH, storyHash);
i.putExtra(Reading.EXTRA_FEEDSET, getFeedSet());
i.putExtra(Reading.EXTRA_DEFAULT_FEED_VIEW, defaultFeedView);
startActivity(i);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);

View file

@ -15,7 +15,6 @@ import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.app.DialogFragment;
import android.app.Fragment;
import android.text.Html;
import android.text.TextUtils;
import android.util.Log;
@ -37,7 +36,6 @@ import butterknife.OnClick;
import com.newsblur.R;
import com.newsblur.activity.NbActivity;
import com.newsblur.activity.NewsBlurApplication;
import com.newsblur.activity.Reading;
import com.newsblur.domain.Classifier;
import com.newsblur.domain.Story;
@ -46,7 +44,6 @@ import com.newsblur.service.NBSyncService;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.ImageCache;
import com.newsblur.util.ImageLoader;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.StoryUtils;
import com.newsblur.util.UIUtils;
@ -59,8 +56,6 @@ import java.util.Date;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.HashSet;
import java.util.Set;
public class ReadingItemFragment extends NbFragment implements ClassifierDialogFragment.TagUpdateCallback {
@ -68,7 +63,6 @@ public class ReadingItemFragment extends NbFragment implements ClassifierDialogF
public static final String TEXT_SIZE_VALUE = "textSizeChangeValue";
public Story story;
private LayoutInflater inflater;
private ImageLoader imageLoader;
private String feedColor, feedTitle, feedFade, feedBorder, feedIconUrl, faviconText;
private Classifier classifier;
@FindView(R.id.reading_webview) NewsblurWebview web;
@ -136,7 +130,6 @@ public class ReadingItemFragment extends NbFragment implements ClassifierDialogF
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
imageLoader = ((NewsBlurApplication) getActivity().getApplicationContext()).getImageLoader();
story = getArguments() != null ? (Story) getArguments().getSerializable("story") : null;
inflater = getActivity().getLayoutInflater();
@ -310,7 +303,7 @@ public class ReadingItemFragment extends NbFragment implements ClassifierDialogF
}
private void setupItemCommentsAndShares() {
new SetupCommentSectionTask(this, view, inflater, story, imageLoader).execute();
new SetupCommentSectionTask(this, view, inflater, story).execute();
}
private void setupItemMetadata() {
@ -328,7 +321,7 @@ public class ReadingItemFragment extends NbFragment implements ClassifierDialogF
int[] colors = {
Color.parseColor(feedColor),
Color.parseColor(feedFade)
Color.parseColor(feedFade),
};
GradientDrawable gradient = new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP,
colors);
@ -347,7 +340,7 @@ public class ReadingItemFragment extends NbFragment implements ClassifierDialogF
itemFeed.setVisibility(View.GONE);
feedIcon.setVisibility(View.GONE);
} else {
imageLoader.displayImage(feedIconUrl, feedIcon, false);
FeedUtils.imageLoader.displayImage(feedIconUrl, feedIcon, false);
itemFeed.setText(feedTitle);
}

View file

@ -6,7 +6,6 @@ import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.Button;

View file

@ -4,17 +4,14 @@ import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.newsblur.R;
import com.newsblur.domain.Story;
import com.newsblur.network.APIManager;
import com.newsblur.util.FeedUtils;
public class ReplyDialogFragment extends DialogFragment {

View file

@ -1,7 +1,5 @@
package com.newsblur.fragment;
import android.content.CursorLoader;
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
@ -10,13 +8,8 @@ import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
import com.newsblur.R;
import com.newsblur.activity.Reading;
import com.newsblur.activity.SavedStoriesReading;
import com.newsblur.activity.FeedReading;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.StoryOrder;
import com.newsblur.view.SocialItemViewBinder;
public class SavedStoriesItemListFragment extends ItemListFragment {
@ -26,10 +19,9 @@ public class SavedStoriesItemListFragment extends ItemListFragment {
super.onCreate(savedInstanceState);
}
public static ItemListFragment newInstance(DefaultFeedView defaultFeedView) {
public static ItemListFragment newInstance() {
ItemListFragment fragment = new SavedStoriesItemListFragment();
Bundle args = new Bundle();
args.putSerializable("defaultFeedView", defaultFeedView);
fragment.setArguments(args);
return fragment;
}
@ -46,15 +38,6 @@ public class SavedStoriesItemListFragment extends ItemListFragment {
super.onLoadFinished(loader, cursor);
}
@Override
public void onItemClick_(String storyHash) {
Intent i = new Intent(getActivity(), SavedStoriesReading.class);
i.putExtra(Reading.EXTRA_STORY_HASH, storyHash);
i.putExtra(Reading.EXTRA_FEEDSET, getFeedSet());
i.putExtra(Reading.EXTRA_DEFAULT_FEED_VIEW, defaultFeedView);
startActivity(i);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);

View file

@ -31,7 +31,6 @@ import com.newsblur.domain.UserDetails;
import com.newsblur.domain.UserProfile;
import com.newsblur.fragment.ReplyDialogFragment;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.ImageLoader;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ViewUtils;
import com.newsblur.view.FlowLayout;
@ -45,20 +44,18 @@ public class SetupCommentSectionTask extends AsyncTask<Void, Void, Void> {
private final ReadingItemFragment fragment;
private final Story story;
private final LayoutInflater inflater;
private final ImageLoader imageLoader;
private WeakReference<View> viewHolder;
private final Context context;
private UserDetails user;
private final FragmentManager manager;
private List<Comment> comments;
public SetupCommentSectionTask(ReadingItemFragment fragment, View view, LayoutInflater inflater, Story story, ImageLoader imageLoader) {
public SetupCommentSectionTask(ReadingItemFragment fragment, View view, LayoutInflater inflater, Story story) {
this.fragment = fragment;
this.context = fragment.getActivity();
this.manager = fragment.getFragmentManager();
this.inflater = inflater;
this.story = story;
this.imageLoader = imageLoader;
viewHolder = new WeakReference<View>(view);
user = PrefsUtils.getUserDetails(context);
}
@ -109,7 +106,7 @@ public class SetupCommentSectionTask extends AsyncTask<Void, Void, Void> {
ImageView favouriteImage = new ImageView(context);
UserProfile user = FeedUtils.dbHelper.getUserProfile(id);
if (user != null) {
imageLoader.displayImage(user.photoUrl, favouriteImage, 10f);
FeedUtils.imageLoader.displayImage(user.photoUrl, favouriteImage, 10f);
favouriteContainer.addView(favouriteImage);
}
}
@ -153,7 +150,7 @@ public class SetupCommentSectionTask extends AsyncTask<Void, Void, Void> {
final UserProfile replyUser = FeedUtils.dbHelper.getUserProfile(reply.userId);
if (replyUser != null) {
imageLoader.displayImage(replyUser.photoUrl, replyImage);
FeedUtils.imageLoader.displayImage(replyUser.photoUrl, replyImage);
replyImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
@ -200,11 +197,11 @@ public class SetupCommentSectionTask extends AsyncTask<Void, Void, Void> {
UserProfile sourceUser = FeedUtils.dbHelper.getUserProfile(comment.sourceUserId);
if (sourceUser != null) {
imageLoader.displayImage(sourceUser.photoUrl, sourceUserImage, 10f);
imageLoader.displayImage(userPhoto, usershareImage, 10f);
FeedUtils.imageLoader.displayImage(sourceUser.photoUrl, sourceUserImage, 10f);
FeedUtils.imageLoader.displayImage(userPhoto, usershareImage, 10f);
}
} else {
imageLoader.displayImage(userPhoto, commentImage, 10f);
FeedUtils.imageLoader.displayImage(userPhoto, commentImage, 10f);
}
commentImage.setOnClickListener(new OnClickListener() {
@ -265,7 +262,7 @@ public class SetupCommentSectionTask extends AsyncTask<Void, Void, Void> {
if (!commentingUserIds.contains(userId)) {
UserProfile user = FeedUtils.dbHelper.getUserProfile(userId);
if (user != null) {
ImageView image = ViewUtils.createSharebarImage(context, imageLoader, user.photoUrl, user.userId);
ImageView image = ViewUtils.createSharebarImage(context, user.photoUrl, user.userId);
sharedGrid.addView(image);
}
}
@ -275,7 +272,7 @@ public class SetupCommentSectionTask extends AsyncTask<Void, Void, Void> {
for (String userId : commentingUserIds) {
UserProfile user = FeedUtils.dbHelper.getUserProfile(userId);
if (user != null) {
ImageView image = ViewUtils.createSharebarImage(context, imageLoader, user.photoUrl, user.userId);
ImageView image = ViewUtils.createSharebarImage(context, user.photoUrl, user.userId);
commentGrid.addView(image);
}
}

View file

@ -1,40 +1,19 @@
package com.newsblur.fragment;
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import com.newsblur.R;
import com.newsblur.activity.ItemsList;
import com.newsblur.activity.Reading;
import com.newsblur.activity.SocialFeedReading;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.domain.SocialFeed;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.StateFilter;
import com.newsblur.util.StoryOrder;
import com.newsblur.view.SocialItemViewBinder;
public class SocialFeedItemListFragment extends ItemListFragment {
private SocialFeed socialFeed;
@Override
public void onCreate(Bundle savedInstanceState) {
socialFeed = (SocialFeed) getArguments().getSerializable("social_feed");
super.onCreate(savedInstanceState);
getLoaderManager().initLoader(ITEMLIST_LOADER , null, this);
}
public static SocialFeedItemListFragment newInstance(SocialFeed socialFeed, StateFilter currentState, DefaultFeedView defaultFeedView) {
public static SocialFeedItemListFragment newInstance() {
SocialFeedItemListFragment fragment = new SocialFeedItemListFragment();
Bundle args = new Bundle();
args.putSerializable("currentState", currentState);
args.putSerializable("social_feed", socialFeed);
args.putSerializable("defaultFeedView", defaultFeedView);
fragment.setArguments(args);
return fragment;
}
@ -51,15 +30,4 @@ public class SocialFeedItemListFragment extends ItemListFragment {
super.onLoadFinished(loader, cursor);
}
@Override
public void onItemClick_(String storyHash) {
Intent i = new Intent(getActivity(), SocialFeedReading.class);
i.putExtra(Reading.EXTRA_STORY_HASH, storyHash);
i.putExtra(Reading.EXTRA_FEEDSET, getFeedSet());
i.putExtra(Reading.EXTRA_SOCIAL_FEED, socialFeed);
i.putExtra(ItemsList.EXTRA_STATE, currentState);
i.putExtra(Reading.EXTRA_DEFAULT_FEED_VIEW, defaultFeedView);
startActivity(i);
}
}

View file

@ -9,7 +9,6 @@ import android.util.Log;
import com.google.gson.Gson;
import com.newsblur.R;
import com.newsblur.network.domain.LoginResponse;
import com.newsblur.network.domain.NewsBlurResponse;
import com.newsblur.util.AppConstants;

View file

@ -13,8 +13,6 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.newsblur.domain.Feed;
import com.newsblur.domain.Folder;
import com.newsblur.domain.SocialFeed;

View file

@ -2,9 +2,6 @@ package com.newsblur.network.domain;
import android.util.Log;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* A generic response to an API call that only encapsuates success versus failure.
*/

View file

@ -1,6 +1,5 @@
package com.newsblur.serialization;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;

View file

@ -1,6 +1,5 @@
package com.newsblur.serialization;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;

View file

@ -9,8 +9,6 @@ import android.util.Log;
import com.newsblur.util.AppConstants;
import com.newsblur.R;
/**
* First receiver in the chain that starts with the device. Simply schedules another broadcast
* that will periodicaly start the sync service.

View file

@ -9,9 +9,7 @@ import android.database.Cursor;
import android.os.IBinder;
import android.os.PowerManager;
import android.os.Process;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
import com.newsblur.R;
import com.newsblur.activity.NbActivity;
@ -28,7 +26,6 @@ import com.newsblur.network.domain.FeedFolderResponse;
import com.newsblur.network.domain.NewsBlurResponse;
import com.newsblur.network.domain.StoriesResponse;
import com.newsblur.network.domain.UnreadCountResponse;
import com.newsblur.network.domain.UnreadStoryHashesResponse;
import com.newsblur.util.AppConstants;
import com.newsblur.util.FeedSet;
import com.newsblur.util.FileCache;

View file

@ -5,8 +5,6 @@ import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.newsblur.R;
public class ServiceScheduleReceiver extends BroadcastReceiver {
@Override

View file

@ -7,17 +7,14 @@ import com.newsblur.network.domain.StoriesResponse;
import com.newsblur.network.domain.UnreadStoryHashesResponse;
import com.newsblur.util.AppConstants;
import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.StoryOrder;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.NavigableMap;
import java.util.Set;
import java.util.TreeMap;
public class UnreadsService extends SubService {

View file

@ -214,6 +214,10 @@ public class FeedSet implements Serializable {
return this.folderName;
}
public boolean isFolder() {
return (this.folderName != null);
}
/**
* Gets a flat set of feed IDs that can be passed to API calls that take raw numeric IDs or
* social IDs prefixed with "social:". Returns an empty set for feed sets that don't track

View file

@ -25,12 +25,15 @@ import com.newsblur.service.NBSyncService;
public class FeedUtils {
// these are app-level singletons stored here for convenience. however, they
// cannot be created lazily or via static init, they have to be created when
// the main app context is created and it offers a reference
public static BlurDatabaseHelper dbHelper;
public static ImageLoader imageLoader;
public static void offerDB(BlurDatabaseHelper _dbHelper) {
if (_dbHelper.isOpen()) {
dbHelper = _dbHelper;
}
public static void offerInitContext(Context context) {
dbHelper = new BlurDatabaseHelper(context);
imageLoader = new ImageLoader(context);
}
private static void triggerSync(Context c) {
@ -205,8 +208,7 @@ public class FeedUtils {
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.putExtra(Intent.EXTRA_SUBJECT, Html.fromHtml(story.title));
final String shareString = context.getResources().getString(R.string.share);
intent.putExtra(Intent.EXTRA_TEXT, String.format(shareString, new Object[]{Html.fromHtml(story.title),
story.permalink}));
intent.putExtra(Intent.EXTRA_TEXT, String.format(shareString, new Object[]{Html.fromHtml(story.title), story.permalink}));
context.startActivity(Intent.createChooser(intent, "Send using"));
}

View file

@ -47,6 +47,7 @@ public class PrefConstants {
public static final String SAVED_STORIES_FOLDER_NAME = "saved_stories";
public static final String READING_ENTER_IMMERSIVE_SINGLE_TAP = "immersive_enter_single_tap";
public static final String STORIES_AUTO_OPEN_FIRST = "pref_auto_open_first_unread";
public static final String STORIES_SHOW_PREVIEWS = "pref_show_content_preview";
public static final String ENABLE_OFFLINE = "enable_offline";

View file

@ -2,7 +2,6 @@ package com.newsblur.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
@ -368,6 +367,28 @@ public class PrefsUtils {
editor.commit();
}
public static DefaultFeedView getDefaultFeedView(Context context, FeedSet fs) {
if (fs.isAllSaved()) {
return getDefaultFeedViewForFolder(context, PrefConstants.SAVED_STORIES_FOLDER_NAME);
} else if (fs.isGlobalShared()) {
return getDefaultFeedViewForFolder(context, PrefConstants.GLOBAL_SHARED_STORIES_FOLDER_NAME);
} else if (fs.isAllSocial()) {
return getDefaultFeedViewForFolder(context, PrefConstants.ALL_SHARED_STORIES_FOLDER_NAME);
} else if (fs.isAllNormal()) {
return getDefaultFeedViewForFolder(context, PrefConstants.ALL_STORIES_FOLDER_NAME);
} else if (fs.isFolder()) {
return getDefaultFeedViewForFolder(context, fs.getFolderName());
} else if (fs.getSingleFeed() != null) {
return getDefaultFeedViewForFeed(context, fs.getSingleFeed());
} else if (fs.getSingleSocialFeed() != null) {
return getDefaultFeedViewForFeed(context, fs.getSingleSocialFeed().getKey());
} else if (fs.isAllRead()) {
return getDefaultFeedViewForFolder(context, PrefConstants.READ_STORIES_FOLDER_NAME);
} else {
return DefaultFeedView.STORY;
}
}
public static StoryOrder getStoryOrder(Context context, FeedSet fs) {
if (fs.isAllNormal()) {
return getStoryOrderForFolder(context, PrefConstants.ALL_STORIES_FOLDER_NAME);
@ -456,6 +477,11 @@ public class PrefsUtils {
return prefs.getBoolean(PrefConstants.STORIES_SHOW_PREVIEWS, true);
}
public static boolean isAutoOpenFirstUnread(Context context) {
SharedPreferences prefs = context.getSharedPreferences(PrefConstants.PREFERENCES, 0);
return prefs.getBoolean(PrefConstants.STORIES_AUTO_OPEN_FIRST, false);
}
public static boolean isOfflineEnabled(Context context) {
SharedPreferences prefs = context.getSharedPreferences(PrefConstants.PREFERENCES, 0);
return prefs.getBoolean(PrefConstants.ENABLE_OFFLINE, false);

View file

@ -2,7 +2,6 @@ package com.newsblur.util;
import android.content.ContentValues;
import android.database.Cursor;
import android.text.TextUtils;
import com.newsblur.activity.NbActivity;
import com.newsblur.database.BlurDatabaseHelper;
@ -10,9 +9,6 @@ import com.newsblur.database.DatabaseConstants;
import com.newsblur.network.domain.NewsBlurResponse;
import com.newsblur.network.APIManager;
import java.util.HashSet;
import java.util.Set;
public class ReadingAction {
private enum ActionType {

View file

@ -8,16 +8,13 @@ import android.app.Activity;
import android.app.ActionBar;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@ -27,7 +24,7 @@ import android.widget.TextView;
import android.widget.Toast;
import com.newsblur.R;
import com.newsblur.activity.NewsBlurApplication;
import com.newsblur.activity.*;
public class UIUtils {
@ -93,7 +90,7 @@ public class UIUtils {
*/
public static void setCustomActionBar(Activity activity, String imageUrl, String title) {
ImageView iconView = setupCustomActionbar(activity, title);
((NewsBlurApplication) activity.getApplicationContext()).getImageLoader().displayImage(imageUrl, iconView, false);
FeedUtils.imageLoader.displayImage(imageUrl, iconView, false);
}
public static void setCustomActionBar(Activity activity, int imageId, String title) {
@ -166,4 +163,35 @@ public class UIUtils {
}
});
}
public static void startReadingActivity(FeedSet fs, String startingHash, Context context, boolean ignoreFilters) {
Class activityClass;
if (fs.isAllSaved()) {
activityClass = SavedStoriesReading.class;
} else if (fs.isGlobalShared()) {
activityClass = GlobalSharedStoriesReading.class;
} else if (fs.isAllSocial()) {
activityClass = AllSharedStoriesReading.class;
} else if (fs.isAllNormal()) {
activityClass = AllStoriesReading.class;
} else if (fs.isFolder()) {
activityClass = FolderReading.class;
} else if (fs.getSingleFeed() != null) {
activityClass = FeedReading.class;
} else if (fs.getSingleSocialFeed() != null) {
activityClass = SocialFeedReading.class;
} else if (fs.isAllRead()) {
activityClass = ReadStoriesReading.class;
} else {
Log.e(UIUtils.class.getName(), "can't launch reading activity for unknown feedset type");
return;
}
Intent i = new Intent(context, activityClass);
i.putExtra(Reading.EXTRA_FEEDSET, fs);
i.putExtra(Reading.EXTRA_STORY_HASH, startingHash);
if (ignoreFilters) {
i.putExtra(SocialFeedReading.EXTRA_IGNORE_FILTERS, true);
}
context.startActivity(i);
}
}

View file

@ -47,7 +47,7 @@ public class ViewUtils {
}
}
public static ImageView createSharebarImage(final Context context, final ImageLoader imageLoader, final String photoUrl, final String userId) {
public static ImageView createSharebarImage(final Context context, final String photoUrl, final String userId) {
ImageView image = new ImageView(context);
int imageLength = UIUtils.dp2px(context, 15);
image.setMaxHeight(imageLength);
@ -62,7 +62,7 @@ public class ViewUtils {
image.setMaxWidth(imageLength);
image.setLayoutParams(imageParameters);
imageLoader.displayImage(photoUrl, image, 10f);
FeedUtils.imageLoader.displayImage(photoUrl, image, 10f);
image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {

View file

@ -11,30 +11,26 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.newsblur.R;
import com.newsblur.activity.NewsBlurApplication;
import com.newsblur.domain.UserDetails;
import com.newsblur.domain.ActivityDetails;
import com.newsblur.domain.ActivityDetails.Category;
import com.newsblur.network.APIConstants;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.ImageLoader;
import com.newsblur.util.PrefsUtils;
public abstract class ActivityDetailsAdapter extends ArrayAdapter<ActivityDetails> {
private LayoutInflater inflater;
private ImageLoader imageLoader;
protected final String ago;
protected ForegroundColorSpan linkColor, contentColor, quoteColor;
private String TAG = "ActivitiesAdapter";
private Context context;
protected UserDetails currentUserDetails;
protected final boolean userIsYou;
public ActivityDetailsAdapter(final Context context, UserDetails user) {
super(context, R.id.row_activity_text);
inflater = LayoutInflater.from(context);
imageLoader = ((NewsBlurApplication) context.getApplicationContext()).getImageLoader();
this.context = context;
currentUserDetails = user;
@ -70,13 +66,13 @@ public abstract class ActivityDetailsAdapter extends ArrayAdapter<ActivityDetail
activityTime.setText(activity.timeSince.toUpperCase() + " " + ago);
if (activity.category == Category.FEED_SUBSCRIPTION) {
imageLoader.displayImage(APIConstants.S3_URL_FEED_ICONS + activity.feedId + ".png", imageView);
FeedUtils.imageLoader.displayImage(APIConstants.S3_URL_FEED_ICONS + activity.feedId + ".png", imageView);
} else if (activity.category == Category.SHARED_STORY) {
imageLoader.displayImage(currentUserDetails.photoUrl, imageView, 10f);
FeedUtils.imageLoader.displayImage(currentUserDetails.photoUrl, imageView, 10f);
} else if (activity.category == Category.STAR) {
imageView.setImageResource(R.drawable.clock);
} else if (activity.user != null) {
imageLoader.displayImage(activity.user.photoUrl, imageView);
FeedUtils.imageLoader.displayImage(activity.user.photoUrl, imageView);
} else {
imageView.setImageResource(R.drawable.logo);
}

View file

@ -12,7 +12,6 @@ import android.widget.TextView;
import com.newsblur.R;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.domain.Story;
import com.newsblur.util.StoryUtils;
import java.util.Date;

View file

@ -4,8 +4,6 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
@ -19,7 +17,6 @@ import android.widget.FrameLayout;
import com.newsblur.activity.Reading;
import com.newsblur.fragment.ReadingItemFragment;
import com.newsblur.util.AppConstants;
public class NewsblurWebview extends WebView {

View file

@ -3,7 +3,6 @@ package com.newsblur.view;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;

View file

@ -9,8 +9,6 @@ import android.util.Log;
import android.view.animation.*;
import android.view.View;
import com.newsblur.R;
/**
* A indeterminate loading indicator that pulses between colours. Inspired by the
* 4.X-series impl of MaterialProgressDrawable (but platform-stable, public access,

View file

@ -11,10 +11,8 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.newsblur.R;
import com.newsblur.activity.NewsBlurApplication;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.domain.Story;
import com.newsblur.util.ImageLoader;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.StoryUtils;
import java.util.Date;
@ -22,12 +20,10 @@ import java.util.Date;
public class SocialItemViewBinder implements ViewBinder {
private final Context context;
private ImageLoader imageLoader;
private boolean ignoreIntel;
public SocialItemViewBinder(final Context context, boolean ignoreIntel) {
this.context = context;
this.imageLoader = ((NewsBlurApplication) context.getApplicationContext()).getImageLoader();
this.ignoreIntel = ignoreIntel;
}
@ -41,7 +37,7 @@ public class SocialItemViewBinder implements ViewBinder {
final int hasBeenRead = cursor.getInt(cursor.getColumnIndex(DatabaseConstants.STORY_READ));
if (TextUtils.equals(cursor.getColumnName(columnIndex), DatabaseConstants.FEED_FAVICON_URL)) {
String faviconUrl = cursor.getString(columnIndex);
imageLoader.displayImage(faviconUrl, ((ImageView) view), true);
FeedUtils.imageLoader.displayImage(faviconUrl, ((ImageView) view), true);
return true;
} else if (TextUtils.equals(columnName, DatabaseConstants.SUM_STORY_TOTAL)) {
if (! this.ignoreIntel) {

View file

@ -6,10 +6,8 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.newsblur.R;
import com.newsblur.util.AppConstants;
import com.newsblur.util.StateFilter;
public class StateToggleButton extends LinearLayout implements OnClickListener {