#1339 ButterKnife to view binding part 1

This commit is contained in:
Andrei 2020-06-29 19:44:17 -07:00
parent 9d54a48329
commit 495c450964
13 changed files with 273 additions and 245 deletions

View file

@ -45,6 +45,7 @@ android {
compileOptions.with {
sourceCompatibility = JavaVersion.VERSION_1_7
}
viewBinding.enabled = true
// force old processing behaviour that butterknife 7 depends on, until we can afford to upgrade
android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true

View file

@ -5,32 +5,27 @@ import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.View;
import android.widget.TextView;
import butterknife.ButterKnife;
import butterknife.Bind;
import com.newsblur.R;
import com.newsblur.databinding.ActivityAddfeedexternalBinding;
import com.newsblur.fragment.AddFeedFragment;
import com.newsblur.util.UIUtils;
import com.newsblur.util.ViewUtils;
import com.newsblur.view.ProgressThrobber;
public class AddFeedExternal extends NbActivity implements AddFeedFragment.AddFeedProgressListener {
@Bind(R.id.loading_throb) ProgressThrobber progressView;
@Bind(R.id.progress_text) TextView progressText;
private ActivityAddfeedexternalBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityAddfeedexternalBinding.inflate(getLayoutInflater());
getActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.activity_addfeedexternal);
ButterKnife.bind(this);
setContentView(binding.getRoot());
progressView.setEnabled(!ViewUtils.isPowerSaveMode(this));
progressView.setColors(UIUtils.getColor(this, R.color.refresh_1),
binding.loadingThrob.setEnabled(!ViewUtils.isPowerSaveMode(this));
binding.loadingThrob.setColors(UIUtils.getColor(this, R.color.refresh_1),
UIUtils.getColor(this, R.color.refresh_2),
UIUtils.getColor(this, R.color.refresh_3),
UIUtils.getColor(this, R.color.refresh_4));
@ -48,9 +43,9 @@ public class AddFeedExternal extends NbActivity implements AddFeedFragment.AddFe
public void addFeedStarted() {
runOnUiThread(new Runnable() {
public void run() {
progressText.setText(R.string.adding_feed_progress);
progressText.setVisibility(View.VISIBLE);
progressView.setVisibility(View.VISIBLE);
binding.progressText.setText(R.string.adding_feed_progress);
binding.progressText.setVisibility(View.VISIBLE);
binding.loadingThrob.setVisibility(View.VISIBLE);
}
});
}

View file

@ -10,15 +10,11 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import butterknife.ButterKnife;
import butterknife.Bind;
import com.newsblur.R;
import com.newsblur.databinding.ActivityItemslistBinding;
import com.newsblur.fragment.ItemSetFragment;
import com.newsblur.fragment.ReadFilterDialogFragment;
import com.newsblur.fragment.SaveSearchFragment;
@ -47,10 +43,9 @@ public abstract class ItemsList extends NbActivity implements StoryOrderChangedL
private static final String READ_FILTER = "readFilter";
private static final String DEFAULT_FEED_VIEW = "defaultFeedView";
private static final String BUNDLE_ACTIVE_SEARCH_QUERY = "activeSearchQuery";
private ActivityItemslistBinding binding;
protected ItemSetFragment itemSetFragment;
@Bind(R.id.itemlist_sync_status) TextView overlayStatusText;
@Bind(R.id.itemlist_search_query) EditText searchQueryInput;
protected StateFilter intelState;
protected FeedSet fs;
@ -80,8 +75,8 @@ public abstract class ItemsList extends NbActivity implements StoryOrderChangedL
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
setContentView(R.layout.activity_itemslist);
ButterKnife.bind(this);
binding = ActivityItemslistBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
FragmentManager fragmentManager = getSupportFragmentManager();
itemSetFragment = (ItemSetFragment) fragmentManager.findFragmentByTag(ItemSetFragment.class.getName());
@ -100,16 +95,16 @@ public abstract class ItemsList extends NbActivity implements StoryOrderChangedL
activeSearchQuery = fs.getSearchQuery();
}
if (activeSearchQuery != null) {
searchQueryInput.setText(activeSearchQuery);
searchQueryInput.setVisibility(View.VISIBLE);
binding.itemlistSearchQuery.setText(activeSearchQuery);
binding.itemlistSearchQuery.setVisibility(View.VISIBLE);
fs.setSearchQuery(activeSearchQuery);
}
searchQueryInput.setOnKeyListener(new OnKeyListener() {
binding.itemlistSearchQuery.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && (event.getAction() == KeyEvent.ACTION_DOWN)) {
searchQueryInput.setVisibility(View.GONE);
searchQueryInput.setText("");
binding.itemlistSearchQuery.setVisibility(View.GONE);
binding.itemlistSearchQuery.setText("");
checkSearchQuery();
return true;
}
@ -125,8 +120,8 @@ public abstract class ItemsList extends NbActivity implements StoryOrderChangedL
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (searchQueryInput != null) {
String q = searchQueryInput.getText().toString().trim();
if (binding.itemlistSearchQuery != null) {
String q = binding.itemlistSearchQuery.getText().toString().trim();
if (q.length() > 0) {
outState.putString(BUNDLE_ACTIVE_SEARCH_QUERY, q);
}
@ -229,7 +224,7 @@ public abstract class ItemsList extends NbActivity implements StoryOrderChangedL
menu.findItem(R.id.menu_theme_black).setChecked(true);
}
if (!TextUtils.isEmpty(searchQueryInput.getText())) {
if (!TextUtils.isEmpty(binding.itemlistSearchQuery.getText())) {
menu.findItem(R.id.menu_save_search).setVisible(true);
} else {
menu.findItem(R.id.menu_save_search).setVisible(false);
@ -261,11 +256,11 @@ public abstract class ItemsList extends NbActivity implements StoryOrderChangedL
textSize.show(getSupportFragmentManager(), TextSizeDialogFragment.class.getName());
return true;
} else if (item.getItemId() == R.id.menu_search_stories) {
if (searchQueryInput.getVisibility() != View.VISIBLE) {
searchQueryInput.setVisibility(View.VISIBLE);
searchQueryInput.requestFocus();
if (binding.itemlistSearchQuery.getVisibility() != View.VISIBLE) {
binding.itemlistSearchQuery.setVisibility(View.VISIBLE);
binding.itemlistSearchQuery.requestFocus();
} else {
searchQueryInput.setVisibility(View.GONE);
binding.itemlistSearchQuery.setVisibility(View.GONE);
checkSearchQuery();
}
} else if (item.getItemId() == R.id.menu_theme_light) {
@ -293,7 +288,7 @@ public abstract class ItemsList extends NbActivity implements StoryOrderChangedL
if (item.getItemId() == R.id.menu_save_search) {
String feedId = getSaveSearchFeedId();
if (feedId != null) {
String query = searchQueryInput.getText().toString();
String query = binding.itemlistSearchQuery.getText().toString();
SaveSearchFragment frag = SaveSearchFragment.newInstance(feedId, query);
frag.show(getSupportFragmentManager(), SaveSearchFragment.class.getName());
}
@ -334,23 +329,23 @@ public abstract class ItemsList extends NbActivity implements StoryOrderChangedL
}
private void updateStatusIndicators() {
if (overlayStatusText != null) {
if (binding.itemlistSyncStatus != null) {
String syncStatus = NBSyncService.getSyncStatusMessage(this, true);
if (syncStatus != null) {
if (AppConstants.VERBOSE_LOG) {
syncStatus = syncStatus + UIUtils.getMemoryUsageDebug(this);
}
overlayStatusText.setText(syncStatus);
overlayStatusText.setVisibility(View.VISIBLE);
binding.itemlistSyncStatus.setText(syncStatus);
binding.itemlistSyncStatus.setVisibility(View.VISIBLE);
} else {
overlayStatusText.setVisibility(View.GONE);
binding.itemlistSyncStatus.setVisibility(View.GONE);
}
}
}
private void checkSearchQuery() {
String oldQuery = fs.getSearchQuery();
String q = searchQueryInput.getText().toString().trim();
String q = binding.itemlistSearchQuery.getText().toString().trim();
if (q.length() < 1) {
q = null;
}

View file

@ -17,19 +17,12 @@ import android.view.MenuItem;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.AbsListView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import butterknife.ButterKnife;
import butterknife.Bind;
import butterknife.OnClick;
import com.newsblur.R;
import com.newsblur.databinding.ActivityMainBinding;
import com.newsblur.fragment.FeedIntelligenceSelectorFragment;
import com.newsblur.fragment.FolderListFragment;
import com.newsblur.fragment.LoginAsDialogFragment;
@ -54,15 +47,7 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
private FragmentManager fragmentManager;
private SwipeRefreshLayout swipeLayout;
private boolean wasSwipeEnabled = false;
@Bind(R.id.main_sync_status) TextView overlayStatusText;
@Bind(R.id.empty_view_image) ImageView emptyViewImage;
@Bind(R.id.empty_view_text) TextView emptyViewText;
@Bind(R.id.main_menu_button) Button menuButton;
@Bind(R.id.main_user_image) ImageView userImage;
@Bind(R.id.main_user_name) TextView userName;
@Bind(R.id.main_unread_count_neut_text) TextView unreadCountNeutText;
@Bind(R.id.main_unread_count_posi_text) TextView unreadCountPosiText;
@Bind(R.id.feedlist_search_query) EditText searchQueryInput;
private ActivityMainBinding binding;
@Override
public void onCreate(Bundle savedInstanceState) {
@ -70,16 +55,15 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
super.onCreate(savedInstanceState);
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
getActionBar().hide();
// set the status bar to an generic loading message when the activity is first created so
// that something is displayed while the service warms up
overlayStatusText.setText(R.string.loading);
overlayStatusText.setVisibility(View.VISIBLE);
binding.mainSyncStatus.setText(R.string.loading);
binding.mainSyncStatus.setVisibility(View.VISIBLE);
swipeLayout = (SwipeRefreshLayout)findViewById(R.id.swipe_container);
swipeLayout.setColorSchemeResources(R.color.refresh_1, R.color.refresh_2, R.color.refresh_3, R.color.refresh_4);
@ -97,25 +81,25 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
Bitmap userPicture = PrefsUtils.getUserImage(this);
if (userPicture != null) {
userPicture = UIUtils.clipAndRound(userPicture, 5, false);
userImage.setImageBitmap(userPicture);
binding.mainUserImage.setImageBitmap(userPicture);
}
userName.setText(PrefsUtils.getUserDetails(this).username);
searchQueryInput.setOnKeyListener(new OnKeyListener() {
binding.mainUserName.setText(PrefsUtils.getUserDetails(this).username);
binding.feedlistSearchQuery.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && (event.getAction() == KeyEvent.ACTION_DOWN)) {
searchQueryInput.setVisibility(View.GONE);
searchQueryInput.setText("");
binding.feedlistSearchQuery.setVisibility(View.GONE);
binding.feedlistSearchQuery.setText("");
checkSearchQuery();
return true;
}
if ((keyCode == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN)) {
checkSearchQuery();
return true;
}
}
return false;
}
});
searchQueryInput.addTextChangedListener(new TextWatcher() {
binding.feedlistSearchQuery.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
checkSearchQuery();
}
@ -124,6 +108,31 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
});
FeedUtils.currentFolderName = null;
binding.mainMenuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickMenuButton();
}
});
binding.mainAddButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickAddButton();
}
});
binding.mainProfileButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickProfileButton();
}
});
binding.mainUserImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickUserButton();
}
});
}
@Override
@ -149,8 +158,8 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
}
if (folderFeedList.getSearchQuery() != null) {
searchQueryInput.setText(folderFeedList.getSearchQuery());
searchQueryInput.setVisibility(View.VISIBLE);
binding.feedlistSearchQuery.setText(folderFeedList.getSearchQuery());
binding.feedlistSearchQuery.setVisibility(View.VISIBLE);
}
// triggerSync() might not actually do enough to push a UI update if background sync has been
@ -172,8 +181,8 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
if ( !( (state == StateFilter.ALL) ||
(state == StateFilter.SOME) ||
(state == StateFilter.BEST) ) ) {
searchQueryInput.setText("");
searchQueryInput.setVisibility(View.GONE);
binding.feedlistSearchQuery.setText("");
binding.feedlistSearchQuery.setVisibility(View.GONE);
checkSearchQuery();
}
@ -201,8 +210,8 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
}
public void updateUnreadCounts(int neutCount, int posiCount) {
unreadCountNeutText.setText(Integer.toString(neutCount));
unreadCountPosiText.setText(Integer.toString(posiCount));
binding.mainUnreadCountNeutText.setText(Integer.toString(neutCount));
binding.mainUnreadCountPosiText.setText(Integer.toString(posiCount));
}
/**
@ -213,22 +222,22 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
public void updateFeedCount(int feedCount) {
if (feedCount < 1 ) {
if (NBSyncService.isFeedCountSyncRunning() || (!folderFeedList.firstCursorSeenYet)) {
emptyViewImage.setVisibility(View.INVISIBLE);
emptyViewText.setVisibility(View.INVISIBLE);
binding.emptyViewImage.setVisibility(View.INVISIBLE);
binding.emptyViewText.setVisibility(View.INVISIBLE);
} else {
emptyViewImage.setVisibility(View.VISIBLE);
binding.emptyViewImage.setVisibility(View.VISIBLE);
if (folderFeedList.currentState == StateFilter.BEST) {
emptyViewText.setText(R.string.empty_list_view_no_focus_stories);
binding.emptyViewText.setText(R.string.empty_list_view_no_focus_stories);
} else if (folderFeedList.currentState == StateFilter.SAVED) {
emptyViewText.setText(R.string.empty_list_view_no_saved_stories);
binding.emptyViewText.setText(R.string.empty_list_view_no_saved_stories);
} else {
emptyViewText.setText(R.string.empty_list_view_no_unread_stories);
binding.emptyViewText.setText(R.string.empty_list_view_no_unread_stories);
}
emptyViewText.setVisibility(View.VISIBLE);
binding.emptyViewText.setVisibility(View.VISIBLE);
}
} else {
emptyViewImage.setVisibility(View.INVISIBLE);
emptyViewText.setVisibility(View.INVISIBLE);
binding.emptyViewImage.setVisibility(View.INVISIBLE);
binding.emptyViewText.setVisibility(View.INVISIBLE);
}
}
@ -239,16 +248,16 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
swipeLayout.setRefreshing(false);
}
if (overlayStatusText != null) {
if (binding.mainSyncStatus != null) {
String syncStatus = NBSyncService.getSyncStatusMessage(this, false);
if (syncStatus != null) {
if (AppConstants.VERBOSE_LOG) {
syncStatus = syncStatus + UIUtils.getMemoryUsageDebug(this);
}
overlayStatusText.setText(syncStatus);
overlayStatusText.setVisibility(View.VISIBLE);
binding.mainSyncStatus.setText(syncStatus);
binding.mainSyncStatus.setVisibility(View.VISIBLE);
} else {
overlayStatusText.setVisibility(View.GONE);
binding.mainSyncStatus.setVisibility(View.GONE);
}
}
}
@ -260,8 +269,8 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
folderFeedList.clearRecents();
}
@OnClick(R.id.main_menu_button) void onClickMenuButton() {
PopupMenu pm = new PopupMenu(this, menuButton);
private void onClickMenuButton() {
PopupMenu pm = new PopupMenu(this, binding.mainMenuButton);
Menu menu = pm.getMenu();
pm.getMenuInflater().inflate(R.menu.main, menu);
@ -308,12 +317,12 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
onRefresh();
return true;
} else if (item.getItemId() == R.id.menu_search_feeds) {
if (searchQueryInput.getVisibility() != View.VISIBLE) {
searchQueryInput.setVisibility(View.VISIBLE);
searchQueryInput.requestFocus();
if (binding.feedlistSearchQuery.getVisibility() != View.VISIBLE) {
binding.feedlistSearchQuery.setVisibility(View.VISIBLE);
binding.feedlistSearchQuery.requestFocus();
} else {
searchQueryInput.setText("");
searchQueryInput.setVisibility(View.GONE);
binding.feedlistSearchQuery.setText("");
binding.feedlistSearchQuery.setVisibility(View.GONE);
checkSearchQuery();
}
} else if (item.getItemId() == R.id.menu_add_feed) {
@ -364,17 +373,17 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
return false;
}
@OnClick(R.id.main_add_button) void onClickAddButton() {
private void onClickAddButton() {
Intent i = new Intent(this, SearchForFeeds.class);
startActivity(i);
}
@OnClick(R.id.main_profile_button) void onClickProfileButton() {
private void onClickProfileButton() {
Intent i = new Intent(this, Profile.class);
startActivity(i);
}
@OnClick(R.id.main_user_image) void onClickUserButton() {
private void onClickUserButton() {
Intent i = new Intent(this, Profile.class);
startActivity(i);
}
@ -404,7 +413,7 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
}
private void checkSearchQuery() {
String q = searchQueryInput.getText().toString().trim();
String q = binding.feedlistSearchQuery.getText().toString().trim();
if (q.length() < 1) {
q = null;
}

View file

@ -9,10 +9,9 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.TextView;
import com.newsblur.R;
import com.newsblur.databinding.ActivityWidgetConfigBinding;
import com.newsblur.domain.Feed;
import com.newsblur.domain.Folder;
import com.newsblur.util.FeedOrderFilter;
@ -31,28 +30,21 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import butterknife.Bind;
import butterknife.ButterKnife;
public class WidgetConfig extends NbActivity {
@Bind(R.id.list_view)
ExpandableListView listView;
@Bind(R.id.text_no_subscriptions)
TextView textNoSubscriptions;
private WidgetConfigAdapter adapter;
private ArrayList<Feed> feeds;
private ArrayList<Folder> folders;
private Map<String, Feed> feedMap = new HashMap<>();
private ArrayList<String> folderNames = new ArrayList<>();
private ArrayList<ArrayList<Feed>> folderChildren = new ArrayList<>();
private ActivityWidgetConfigBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_widget_config);
ButterKnife.bind(this);
binding = ActivityWidgetConfigBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
getActionBar().setDisplayHomeAsUpEnabled(true);
setupList();
loadFeeds();
@ -164,7 +156,7 @@ public class WidgetConfig extends NbActivity {
private void setupList() {
adapter = new WidgetConfigAdapter(this);
listView.setAdapter(adapter);
binding.listView.setAdapter(adapter);
}
private void loadFeeds() {
@ -288,7 +280,7 @@ public class WidgetConfig extends NbActivity {
private void setAdapterData() {
adapter.setData(this.folderNames, this.folderChildren, this.feeds);
listView.setVisibility(this.feeds.isEmpty() ? View.GONE : View.VISIBLE);
textNoSubscriptions.setVisibility(this.feeds.isEmpty() ? View.VISIBLE : View.GONE);
binding.listView.setVisibility(this.feeds.isEmpty() ? View.GONE : View.VISIBLE);
binding.textNoSubscriptions.setVisibility(this.feeds.isEmpty() ? View.VISIBLE : View.GONE);
}
}

View file

@ -332,6 +332,7 @@ public class StoryViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
boolean gestureL2R = false;
boolean gestureDebounce = false;
public StoryViewHolder(View view) {
super(view);
ButterKnife.bind(StoryViewHolder.this, view);
@ -472,10 +473,12 @@ public class StoryViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
}
public class StoryRowViewHolder extends StoryViewHolder {
@Bind(R.id.story_item_author) TextView storyAuthor;
@Bind(R.id.story_item_content) TextView storySnippet;
TextView storyAuthor;
TextView storySnippet;
public StoryRowViewHolder(View view) {
super(view);
storyAuthor = view.findViewById(R.id.story_item_author);
storySnippet = view.findViewById(R.id.story_item_content);
}
}
@ -660,12 +663,13 @@ public class StoryViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
}
}
public class FooterViewHolder extends RecyclerView.ViewHolder {
@Bind(R.id.footer_view_inner) FrameLayout innerView;
public static class FooterViewHolder extends RecyclerView.ViewHolder {
FrameLayout innerView;
public FooterViewHolder(View view) {
super(view);
ButterKnife.bind(FooterViewHolder.this, view);
innerView = view.findViewById(R.id.footer_view_inner);
}
}

View file

@ -19,12 +19,9 @@ import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ListAdapter;
import android.widget.ListView;
import butterknife.ButterKnife;
import butterknife.Bind;
import com.newsblur.R;
import com.newsblur.databinding.DialogChoosefoldersBinding;
import com.newsblur.domain.Feed;
import com.newsblur.domain.Folder;
import com.newsblur.util.FeedUtils;
@ -33,8 +30,6 @@ public class ChooseFoldersFragment extends DialogFragment {
private Feed feed;
@Bind(R.id.choose_folders_list) ListView listView;
public static ChooseFoldersFragment newInstance(Feed feed) {
ChooseFoldersFragment fragment = new ChooseFoldersFragment();
Bundle args = new Bundle();
@ -62,7 +57,7 @@ public class ChooseFoldersFragment extends DialogFragment {
final Activity activity = getActivity();
LayoutInflater inflater = LayoutInflater.from(activity);
View v = inflater.inflate(R.layout.dialog_choosefolders, null);
ButterKnife.bind(this, v);
DialogChoosefoldersBinding binding = DialogChoosefoldersBinding.bind(v);
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(String.format(getResources().getString(R.string.title_choose_folders), feed.title));
@ -107,7 +102,7 @@ public class ChooseFoldersFragment extends DialogFragment {
return v;
}
};
listView.setAdapter(adapter);
binding.chooseFoldersList.setAdapter(adapter);
Dialog dialog = builder.create();
dialog.getWindow().getAttributes().gravity = Gravity.BOTTOM;

View file

@ -26,9 +26,6 @@ import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;
import butterknife.ButterKnife;
import butterknife.Bind;
import com.newsblur.R;
import com.newsblur.activity.AllSharedStoriesItemsList;
import com.newsblur.activity.AllStoriesItemsList;
@ -43,6 +40,7 @@ import com.newsblur.activity.ReadStoriesItemsList;
import com.newsblur.activity.SavedStoriesItemsList;
import com.newsblur.activity.SocialFeedItemsList;
import com.newsblur.database.FolderListAdapter;
import com.newsblur.databinding.FragmentFolderfeedlistBinding;
import com.newsblur.domain.Feed;
import com.newsblur.domain.SavedSearch;
import com.newsblur.domain.SocialFeed;
@ -70,7 +68,7 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
private FolderListAdapter adapter;
public StateFilter currentState = StateFilter.SOME;
private SharedPreferences sharedPreferences;
@Bind(R.id.folderfeed_list) ExpandableListView list;
private FragmentFolderfeedlistBinding binding;
public boolean firstCursorSeenYet = false;
// the two-step context menu for feeds requires us to temp store the feed long-pressed so
@ -199,20 +197,20 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_folderfeedlist, container);
ButterKnife.bind(this, v);
binding = FragmentFolderfeedlistBinding.bind(v);
list.setGroupIndicator(UIUtils.getDrawable(getActivity(), R.drawable.transparent));
list.setOnCreateContextMenuListener(this);
list.setOnChildClickListener(this);
list.setOnGroupClickListener(this);
list.setOnGroupCollapseListener(this);
list.setOnGroupExpandListener(this);
binding.folderfeedList.setGroupIndicator(UIUtils.getDrawable(getActivity(), R.drawable.transparent));
binding.folderfeedList.setOnCreateContextMenuListener(this);
binding.folderfeedList.setOnChildClickListener(this);
binding.folderfeedList.setOnGroupClickListener(this);
binding.folderfeedList.setOnGroupCollapseListener(this);
binding.folderfeedList.setOnGroupExpandListener(this);
adapter.listBackref = new WeakReference(list); // see note in adapter about backref
list.setAdapter(adapter);
adapter.listBackref = new WeakReference(binding.folderfeedList); // see note in adapter about backref
binding.folderfeedList.setAdapter(adapter);
// Main activity needs to listen for scrolls to prevent refresh from firing unnecessarily
list.setOnScrollListener((android.widget.AbsListView.OnScrollListener) getActivity());
binding.folderfeedList.setOnScrollListener((android.widget.AbsListView.OnScrollListener) getActivity());
return v;
}
@ -224,18 +222,18 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
*/
public void checkOpenFolderPreferences() {
// make sure we didn't beat construction
if ((this.list == null) || (this.sharedPreferences == null)) return;
if ((this.binding.folderfeedList == null) || (this.sharedPreferences == null)) return;
for (int i = 0; i < adapter.getGroupCount(); i++) {
String flatGroupName = adapter.getGroupUniqueName(i);
if (sharedPreferences.getBoolean(AppConstants.FOLDER_PRE + "_" + flatGroupName, true)) {
if (list.isGroupExpanded(i) == false) {
list.expandGroup(i);
if (binding.folderfeedList.isGroupExpanded(i) == false) {
binding.folderfeedList.expandGroup(i);
adapter.setFolderClosed(flatGroupName, false);
}
} else {
if (list.isGroupExpanded(i) == true) {
list.collapseGroup(i);
if (binding.folderfeedList.isGroupExpanded(i) == true) {
binding.folderfeedList.collapseGroup(i);
adapter.setFolderClosed(flatGroupName, true);
}
}

View file

@ -1,28 +1,22 @@
package com.newsblur.fragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioButton;
import butterknife.ButterKnife;
import butterknife.Bind;
import butterknife.OnClick;
import com.newsblur.R;
import com.newsblur.databinding.InfrequentCutoffDialogBinding;
public class InfrequentCutoffDialogFragment extends DialogFragment {
private static String CURRENT_CUTOFF = "currentCutoff";
private int currentValue;
@Bind(R.id.radio_5) RadioButton button5;
@Bind(R.id.radio_15) RadioButton button15;
@Bind(R.id.radio_30) RadioButton button30;
@Bind(R.id.radio_60) RadioButton button60;
@Bind(R.id.radio_90) RadioButton button90;
private InfrequentCutoffDialogBinding binding;
public static InfrequentCutoffDialogFragment newInstance(int currentValue) {
InfrequentCutoffDialogFragment dialog = new InfrequentCutoffDialogFragment();
@ -42,13 +36,13 @@ public class InfrequentCutoffDialogFragment extends DialogFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
currentValue = getArguments().getInt(CURRENT_CUTOFF);
View v = inflater.inflate(R.layout.infrequent_cutoff_dialog, null);
ButterKnife.bind(this, v);
binding = InfrequentCutoffDialogBinding.bind(v);
button5.setChecked(currentValue == 5);
button15.setChecked(currentValue == 15);
button30.setChecked(currentValue == 30);
button60.setChecked(currentValue == 60);
button90.setChecked(currentValue == 90);
binding.radio5.setChecked(currentValue == 5);
binding.radio15.setChecked(currentValue == 15);
binding.radio30.setChecked(currentValue == 30);
binding.radio60.setChecked(currentValue == 60);
binding.radio90.setChecked(currentValue == 90);
getDialog().setTitle(R.string.infrequent_choice_title);
getDialog().getWindow().getAttributes().gravity = Gravity.BOTTOM;
@ -56,31 +50,66 @@ public class InfrequentCutoffDialogFragment extends DialogFragment {
return v;
}
@OnClick(R.id.radio_5) void select5() {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
binding.radio5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
select5();
}
});
binding.radio15.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
select15();
}
});
binding.radio30.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
select30();
}
});
binding.radio60.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
select60();
}
});
binding.radio90.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
select90();
}
});
}
private void select5() {
if (currentValue != 5) {
((InfrequentCutoffChangedListener) getActivity()).infrequentCutoffChanged(5);
}
dismiss();
}
@OnClick(R.id.radio_15) void select15() {
private void select15() {
if (currentValue != 15) {
((InfrequentCutoffChangedListener) getActivity()).infrequentCutoffChanged(15);
}
dismiss();
}
@OnClick(R.id.radio_30) void select30() {
private void select30() {
if (currentValue != 30) {
((InfrequentCutoffChangedListener) getActivity()).infrequentCutoffChanged(30);
}
dismiss();
}
@OnClick(R.id.radio_60) void select60() {
private void select60() {
if (currentValue != 60) {
((InfrequentCutoffChangedListener) getActivity()).infrequentCutoffChanged(60);
}
dismiss();
}
@OnClick(R.id.radio_90) void select90() {
private void select90() {
if (currentValue != 90) {
((InfrequentCutoffChangedListener) getActivity()).infrequentCutoffChanged(90);
}

View file

@ -15,17 +15,13 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import butterknife.ButterKnife;
import butterknife.Bind;
import com.newsblur.R;
import com.newsblur.activity.ItemsList;
import com.newsblur.activity.NbActivity;
import com.newsblur.database.StoryViewAdapter;
import com.newsblur.databinding.FragmentItemgridBinding;
import com.newsblur.domain.Story;
import com.newsblur.service.NBSyncService;
import com.newsblur.util.FeedSet;
@ -50,21 +46,17 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
private final static int GRID_SPACING_DP = 5;
private int gridSpacingPx;
@Bind(R.id.itemgridfragment_grid) RecyclerView itemGrid;
private GridLayoutManager layoutManager;
private StoryViewAdapter adapter;
// an optional pending scroll state to restore.
private Parcelable gridState;
// loading indicator for when stories are absent or stale (at top of list)
@Bind(R.id.top_loading_throb) ProgressThrobber topProgressView;
// R.id.top_loading_throb
// loading indicator for when stories are present and fresh (at bottom of list)
protected ProgressThrobber bottomProgressView;
@Bind(R.id.empty_view) View emptyView;
@Bind(R.id.empty_view_text) TextView emptyViewText;
@Bind(R.id.empty_view_image) ImageView emptyViewImage;
private View fleuronFooter;
// the fleuron has padding that can't be calculated until after layout, but only changes
// rarely thereafter
@ -76,6 +68,8 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
public int indexOfLastUnread = -1;
public boolean fullFlingComplete = false;
private FragmentItemgridBinding binding;
public static ItemSetFragment newInstance() {
ItemSetFragment fragment = new ItemSetFragment();
Bundle arguments = new Bundle();
@ -123,13 +117,13 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_itemgrid, null);
ButterKnife.bind(this, v);
binding = FragmentItemgridBinding.bind(v);
// disable the throbbers if animations are going to have a zero time scale
boolean isDisableAnimations = ViewUtils.isPowerSaveMode(getActivity());
topProgressView.setEnabled(!isDisableAnimations);
topProgressView.setColors(UIUtils.getColor(getActivity(), R.color.refresh_1),
binding.topLoadingThrob.setEnabled(!isDisableAnimations);
binding.topLoadingThrob.setColors(UIUtils.getColor(getActivity(), R.color.refresh_1),
UIUtils.getColor(getActivity(), R.color.refresh_2),
UIUtils.getColor(getActivity(), R.color.refresh_3),
UIUtils.getColor(getActivity(), R.color.refresh_4));
@ -145,11 +139,11 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
fleuronFooter = inflater.inflate(R.layout.row_fleuron, null);
fleuronFooter.setVisibility(View.INVISIBLE);
itemGrid.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
binding.itemgridfragmentGrid.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
itemGridWidthPx = itemGrid.getMeasuredWidth();
itemGrid.getViewTreeObserver().removeOnGlobalLayoutListener(this);
itemGridWidthPx = binding.itemgridfragmentGrid.getMeasuredWidth();
binding.itemgridfragmentGrid.getViewTreeObserver().removeOnGlobalLayoutListener(this);
updateStyle();
}
});
@ -158,11 +152,11 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
calcColumnCount(listStyle);
layoutManager = new GridLayoutManager(getActivity(), columnCount);
itemGrid.setLayoutManager(layoutManager);
binding.itemgridfragmentGrid.setLayoutManager(layoutManager);
setupAnimSpeeds();
calcGridSpacing(listStyle);
itemGrid.addItemDecoration(new RecyclerView.ItemDecoration() {
binding.itemgridfragmentGrid.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.set(gridSpacingPx, gridSpacingPx, gridSpacingPx, gridSpacingPx);
@ -172,7 +166,7 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
adapter = new StoryViewAdapter(((NbActivity) getActivity()), this, getFeedSet(), listStyle);
adapter.addFooterView(footerView);
adapter.addFooterView(fleuronFooter);
itemGrid.setAdapter(adapter);
binding.itemgridfragmentGrid.setAdapter(adapter);
// the layout manager needs to know that the footer rows span all the way across
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@ -187,14 +181,14 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
}
});
itemGrid.addOnScrollListener(new RecyclerView.OnScrollListener() {
binding.itemgridfragmentGrid.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
ItemSetFragment.this.onScrolled(recyclerView, dx, dy);
}
});
setupGestureDetector(itemGrid);
setupGestureDetector(binding.itemgridfragmentGrid);
return v;
}
@ -281,13 +275,13 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
}
protected void updateAdapter(Cursor cursor) {
adapter.swapCursor(cursor, itemGrid, gridState);
adapter.swapCursor(cursor, binding.itemgridfragmentGrid, gridState);
gridState = null;
adapter.updateFeedSet(getFeedSet());
if ((cursor != null) && (cursor.getCount() > 0)) {
emptyView.setVisibility(View.INVISIBLE);
binding.emptyView.setVisibility(View.INVISIBLE);
} else {
emptyView.setVisibility(View.VISIBLE);
binding.emptyView.setVisibility(View.VISIBLE);
}
// though we have stories, we might not yet have as many as we want
@ -305,38 +299,38 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
calcFleuronPadding();
if (getFeedSet().isMuted()) {
emptyViewText.setText(R.string.empty_list_view_muted_feed);
emptyViewText.setTypeface(null, Typeface.NORMAL);
emptyViewImage.setVisibility(View.VISIBLE);
topProgressView.setVisibility(View.INVISIBLE);
binding.emptyViewText.setText(R.string.empty_list_view_muted_feed);
binding.emptyViewText.setTypeface(null, Typeface.NORMAL);
binding.emptyViewImage.setVisibility(View.VISIBLE);
binding.topLoadingThrob.setVisibility(View.INVISIBLE);
bottomProgressView.setVisibility(View.INVISIBLE);
return;
}
if ( (!cursorSeenYet) || NBSyncService.isFeedSetSyncing(getFeedSet(), getActivity()) ) {
emptyViewText.setText(R.string.empty_list_view_loading);
emptyViewText.setTypeface(null, Typeface.ITALIC);
emptyViewImage.setVisibility(View.INVISIBLE);
binding.emptyViewText.setText(R.string.empty_list_view_loading);
binding.emptyViewText.setTypeface(null, Typeface.ITALIC);
binding.emptyViewImage.setVisibility(View.INVISIBLE);
if (NBSyncService.isFeedSetStoriesFresh(getFeedSet())) {
topProgressView.setVisibility(View.INVISIBLE);
binding.topLoadingThrob.setVisibility(View.INVISIBLE);
bottomProgressView.setVisibility(View.VISIBLE);
} else {
topProgressView.setVisibility(View.VISIBLE);
binding.topLoadingThrob.setVisibility(View.VISIBLE);
bottomProgressView.setVisibility(View.GONE);
}
fleuronFooter.setVisibility(View.INVISIBLE);
} else {
ReadFilter readFilter = PrefsUtils.getReadFilter(getActivity(), getFeedSet());
if (readFilter == ReadFilter.UNREAD) {
emptyViewText.setText(R.string.empty_list_view_no_stories_unread);
binding.emptyViewText.setText(R.string.empty_list_view_no_stories_unread);
} else {
emptyViewText.setText(R.string.empty_list_view_no_stories);
binding.emptyViewText.setText(R.string.empty_list_view_no_stories);
}
emptyViewText.setTypeface(null, Typeface.NORMAL);
emptyViewImage.setVisibility(View.VISIBLE);
binding.emptyViewText.setTypeface(null, Typeface.NORMAL);
binding.emptyViewImage.setVisibility(View.VISIBLE);
topProgressView.setVisibility(View.INVISIBLE);
binding.topLoadingThrob.setVisibility(View.INVISIBLE);
bottomProgressView.setVisibility(View.INVISIBLE);
if (cursorSeenYet && NBSyncService.isFeedSetExhausted(getFeedSet()) && (adapter.getRawStoryCount() > 0)) {
fleuronFooter.setVisibility(View.VISIBLE);
@ -411,7 +405,7 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
targetMovDuration = 0L;
}
RecyclerView.ItemAnimator anim = itemGrid.getItemAnimator();
RecyclerView.ItemAnimator anim = binding.itemgridfragmentGrid.getItemAnimator();
anim.setAddDuration((long) ((anim.getAddDuration() + targetAddDuration)/2L));
anim.setMoveDuration((long) ((anim.getMoveDuration() + targetMovDuration)/2L));
}
@ -429,7 +423,7 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
// past the last item, which can be confusing to users who don't know about or need the offset
if ( (!fullFlingComplete) &&
(layoutManager.findLastCompletelyVisibleItemPosition() >= adapter.getStoryCount()) ) {
itemGrid.stopScroll();
binding.itemgridfragmentGrid.stopScroll();
// but after halting at the end once, do allow scrolling past the bottom
fullFlingComplete = true;
}
@ -439,7 +433,7 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
(layoutManager.findLastCompletelyVisibleItemPosition() >= indexOfLastUnread) ) {
// but don't interrupt if already past the last unread
if (indexOfLastUnread >= layoutManager.findFirstCompletelyVisibleItemPosition()) {
itemGrid.stopScroll();
binding.itemgridfragmentGrid.stopScroll();
}
indexOfLastUnread = -1;
}
@ -507,7 +501,7 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
*/
private void calcFleuronPadding() {
if (fleuronResized) return;
int listHeight = itemGrid.getMeasuredHeight();
int listHeight = binding.itemgridfragmentGrid.getMeasuredHeight();
View innerView = fleuronFooter.findViewById(R.id.fleuron);
ViewGroup.LayoutParams oldLayout = innerView.getLayoutParams();
ViewGroup.MarginLayoutParams newLayout = new LinearLayout.LayoutParams(oldLayout);
@ -526,7 +520,7 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
@Override
public void onSaveInstanceState (Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(BUNDLE_GRIDSTATE, itemGrid.getLayoutManager().onSaveInstanceState());
outState.putParcelable(BUNDLE_GRIDSTATE, binding.itemgridfragmentGrid.getLayoutManager().onSaveInstanceState());
}
}

View file

@ -1,19 +1,17 @@
package com.newsblur.fragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.RadioButton;
import butterknife.ButterKnife;
import butterknife.Bind;
import butterknife.OnClick;
import com.newsblur.R;
import com.newsblur.databinding.ReadfilterDialogBinding;
import com.newsblur.util.ReadFilter;
import com.newsblur.util.ReadFilterChangedListener;
@ -21,8 +19,7 @@ public class ReadFilterDialogFragment extends DialogFragment {
private static String CURRENT_FILTER = "currentFilter";
private ReadFilter currentValue;
@Bind(R.id.radio_all) RadioButton allButton;
@Bind(R.id.radio_unread) RadioButton unreadButton;
private ReadfilterDialogBinding binding;
public static ReadFilterDialogFragment newInstance(ReadFilter currentValue) {
ReadFilterDialogFragment dialog = new ReadFilterDialogFragment();
@ -42,10 +39,10 @@ public class ReadFilterDialogFragment extends DialogFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
currentValue = (ReadFilter) getArguments().getSerializable(CURRENT_FILTER);
View v = inflater.inflate(R.layout.readfilter_dialog, null);
ButterKnife.bind(this, v);
binding = ReadfilterDialogBinding.bind(v);
allButton.setChecked(currentValue == ReadFilter.ALL);
unreadButton.setChecked(currentValue == ReadFilter.UNREAD);
binding.radioAll.setChecked(currentValue == ReadFilter.ALL);
binding.radioUnread.setChecked(currentValue == ReadFilter.UNREAD);
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().getAttributes().gravity = Gravity.BOTTOM;
@ -53,14 +50,31 @@ public class ReadFilterDialogFragment extends DialogFragment {
return v;
}
@OnClick(R.id.radio_all) void selectAll() {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
binding.radioAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectAll();
}
});
binding.radioUnread.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectUnread();
}
});
}
private void selectAll() {
if (currentValue != ReadFilter.ALL) {
((ReadFilterChangedListener) getActivity()).readFilterChanged(ReadFilter.ALL);
}
dismiss();
}
@OnClick(R.id.radio_unread) void selectUnread() {
private void selectUnread() {
if (currentValue != ReadFilter.UNREAD) {
((ReadFilterChangedListener) getActivity()).readFilterChanged(ReadFilter.UNREAD);
}

View file

@ -1,16 +1,13 @@
package com.newsblur.fragment;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import butterknife.ButterKnife;
import butterknife.Bind;
import com.newsblur.R;
import com.newsblur.activity.Reading;
import com.newsblur.databinding.FragmentReadingpagerBinding;
/*
* A fragment to hold the story pager. Eventually this fragment should hold much of the UI and logic
@ -21,8 +18,6 @@ import com.newsblur.activity.Reading;
*/
public class ReadingPagerFragment extends NbFragment {
@Bind(R.id.reading_pager) ViewPager pager;
public static ReadingPagerFragment newInstance() {
ReadingPagerFragment fragment = new ReadingPagerFragment();
Bundle arguments = new Bundle();
@ -33,12 +28,12 @@ public class ReadingPagerFragment extends NbFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_readingpager, null);
ButterKnife.bind(this, v);
FragmentReadingpagerBinding binding = FragmentReadingpagerBinding.bind(v);
Reading activity = ((Reading) getActivity());
pager.addOnPageChangeListener(activity);
activity.offerPager(pager, getChildFragmentManager());
binding.readingPager.addOnPageChangeListener(activity);
activity.offerPager(binding.readingPager, getChildFragmentManager());
return v;
}

View file

@ -7,13 +7,9 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.RadioButton;
import butterknife.ButterKnife;
import butterknife.Bind;
import butterknife.OnClick;
import com.newsblur.R;
import com.newsblur.databinding.StoryorderDialogBinding;
import com.newsblur.util.StoryOrder;
import com.newsblur.util.StoryOrderChangedListener;
@ -21,8 +17,6 @@ public class StoryOrderDialogFragment extends DialogFragment {
private static String CURRENT_ORDER = "currentOrder";
private StoryOrder currentValue;
@Bind(R.id.radio_newest) RadioButton newestButton;
@Bind(R.id.radio_oldest) RadioButton oldestButton;
public static StoryOrderDialogFragment newInstance(StoryOrder currentValue) {
StoryOrderDialogFragment dialog = new StoryOrderDialogFragment();
@ -42,25 +36,38 @@ public class StoryOrderDialogFragment extends DialogFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
currentValue = (StoryOrder) getArguments().getSerializable(CURRENT_ORDER);
View v = inflater.inflate(R.layout.storyorder_dialog, null);
ButterKnife.bind(this, v);
StoryorderDialogBinding binding = StoryorderDialogBinding.bind(v);
newestButton.setChecked(currentValue == StoryOrder.NEWEST);
oldestButton.setChecked(currentValue == StoryOrder.OLDEST);
binding.radioNewest.setChecked(currentValue == StoryOrder.NEWEST);
binding.radioOldest.setChecked(currentValue == StoryOrder.OLDEST);
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().getAttributes().gravity = Gravity.BOTTOM;
binding.radioNewest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectNewest();
}
});
binding.radioOldest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectOldest();
}
});
return v;
}
@OnClick(R.id.radio_newest) void selectNewest() {
private void selectNewest() {
if (currentValue != StoryOrder.NEWEST) {
((StoryOrderChangedListener) getActivity()).storyOrderChanged(StoryOrder.NEWEST);
}
dismiss();
}
@OnClick(R.id.radio_oldest) void selectOldest() {
private void selectOldest() {
if (currentValue != StoryOrder.OLDEST) {
((StoryOrderChangedListener) getActivity()).storyOrderChanged(StoryOrder.OLDEST);
}