Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/news-android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-12-27 19:50:39 +0300
committerStefan Niedermann <info@niedermann.it>2020-12-27 19:50:39 +0300
commitf0e6f36ad5cbb7391d4e6333ec19a60198750520 (patch)
tree4fa39d27ba8aa7608886ae054727b47df78fcea0 /News-Android-App/src/main/java
parent3f8032247e5367ec28e8174191bb1e334f07b04c (diff)
Use ViewBinding instead of ButterKnife
Diffstat (limited to 'News-Android-App/src/main/java')
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastArrayAdapter.java57
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastFeedArrayAdapter.java23
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java95
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java83
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java73
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java90
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailFragment.java88
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java97
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java64
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListDialogFragment.java96
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java62
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java143
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java28
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SyncIntervalSelectorActivity.java15
14 files changed, 433 insertions, 581 deletions
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastArrayAdapter.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastArrayAdapter.java
index 09efbe57..5e9b45b7 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastArrayAdapter.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastArrayAdapter.java
@@ -5,16 +5,14 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
-import android.widget.FrameLayout;
-import android.widget.ProgressBar;
-import android.widget.TextView;
import android.widget.Toast;
+import androidx.annotation.NonNull;
+
import org.greenrobot.eventbus.EventBus;
-import butterknife.BindView;
-import butterknife.ButterKnife;
import de.luhmer.owncloudnewsreader.R;
+import de.luhmer.owncloudnewsreader.databinding.PodcastRowBinding;
import de.luhmer.owncloudnewsreader.events.podcast.AudioPodcastClicked;
import de.luhmer.owncloudnewsreader.events.podcast.StartDownloadPodcast;
import de.luhmer.owncloudnewsreader.helper.NewsFileUtils;
@@ -38,15 +36,16 @@ public class PodcastArrayAdapter extends ArrayAdapter<PodcastItem> {
if (view != null) {
holder = (ViewHolder) view.getTag();
} else {
- view = inflater.inflate(R.layout.podcast_row, parent, false);
- holder = new ViewHolder(view);
+ PodcastRowBinding binding = PodcastRowBinding.inflate(inflater, parent, false);
+ view = binding.getRoot();
+ holder = new ViewHolder(binding);
view.setTag(holder);
}
final PodcastItem podcastItem = getItem(position);
- holder.tvTitle.setText(podcastItem.title);
- holder.tvBody.setText(podcastItem.mimeType);
+ holder.binding.tvTitle.setText(podcastItem.title);
+ holder.binding.tvBody.setText(podcastItem.mimeType);
view.setOnClickListener(new View.OnClickListener() {
@Override
@@ -56,10 +55,10 @@ public class PodcastArrayAdapter extends ArrayAdapter<PodcastItem> {
});
- holder.flDownloadPodcast.setOnClickListener(new View.OnClickListener() {
+ holder.binding.flDownloadPodcastWrapper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- holder.flDownloadPodcast.setVisibility(View.GONE);
+ holder.binding.flDownloadPodcastWrapper.setVisibility(View.GONE);
Toast.makeText(getContext(), "Starting download.. Please wait", Toast.LENGTH_SHORT).show();
@@ -67,14 +66,14 @@ public class PodcastArrayAdapter extends ArrayAdapter<PodcastItem> {
}
});
- holder.flPlayPodcast.setOnClickListener(new View.OnClickListener() {
+ holder.binding.flPlayPodcastWrapper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
playPodcast(position);
}
});
- holder.flDeletePodcast.setOnClickListener(new View.OnClickListener() {
+ holder.binding.flDeletePodcastWrapper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(NewsFileUtils.deletePodcastFile(getContext(), podcastItem.link)) {
@@ -86,25 +85,25 @@ public class PodcastArrayAdapter extends ArrayAdapter<PodcastItem> {
});
- holder.pbDownloadPodcast.setProgress(podcastItem.downloadProgress);
+ holder.binding.pbDownloadPodcast.setProgress(podcastItem.downloadProgress);
if(podcastItem.downloadProgress >= 0) {
- holder.tvDownloadPodcastProgress.setVisibility(View.VISIBLE);
- holder.pbDownloadPodcast.setVisibility(View.VISIBLE);
- holder.tvDownloadPodcastProgress.setText(podcastItem.downloadProgress + "%");
+ holder.binding.tvDownloadPodcastProgress.setVisibility(View.VISIBLE);
+ holder.binding.pbDownloadPodcast.setVisibility(View.VISIBLE);
+ holder.binding.tvDownloadPodcastProgress.setText(podcastItem.downloadProgress + "%");
}
else {
- holder.tvDownloadPodcastProgress.setVisibility(View.GONE);
- holder.pbDownloadPodcast.setVisibility(View.GONE);
+ holder.binding.tvDownloadPodcastProgress.setVisibility(View.GONE);
+ holder.binding.pbDownloadPodcast.setVisibility(View.GONE);
}
if(podcastItem.downloadProgress.equals(PodcastItem.DOWNLOAD_NOT_STARTED)) {
- holder.flDownloadPodcast.setVisibility(View.VISIBLE);
+ holder.binding.flDownloadPodcastWrapper.setVisibility(View.VISIBLE);
} else {
- holder.flDownloadPodcast.setVisibility(View.GONE);
+ holder.binding.flDownloadPodcastWrapper.setVisibility(View.GONE);
}
- holder.flDeletePodcast.setVisibility((podcastItem.downloadProgress.equals(PodcastItem.DOWNLOAD_COMPLETED)) ? View.VISIBLE : View.GONE );
+ holder.binding.flDeletePodcastWrapper.setVisibility((podcastItem.downloadProgress.equals(PodcastItem.DOWNLOAD_COMPLETED)) ? View.VISIBLE : View.GONE );
/*
File podcastFile = new File(PodcastDownloadService.getUrlToPodcastFile(getContext(), podcastItem.link, true));
@@ -132,18 +131,10 @@ public class PodcastArrayAdapter extends ArrayAdapter<PodcastItem> {
static class ViewHolder {
- @BindView(R.id.tv_title) TextView tvTitle;
- @BindView(R.id.tv_body) TextView tvBody;
- @BindView(R.id.fl_downloadPodcastWrapper) FrameLayout flDownloadPodcast;
- @BindView(R.id.fl_PlayPodcastWrapper) FrameLayout flPlayPodcast;
- @BindView(R.id.fl_deletePodcastWrapper) FrameLayout flDeletePodcast;
- @BindView(R.id.pbDownloadPodcast) ProgressBar pbDownloadPodcast;
- @BindView(R.id.tvDownloadPodcastProgress) TextView tvDownloadPodcastProgress;
-
-
+ @NonNull final PodcastRowBinding binding;
- public ViewHolder(View view) {
- ButterKnife.bind(this, view);
+ public ViewHolder(@NonNull PodcastRowBinding binding) {
+ this.binding = binding;
}
}
}
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastFeedArrayAdapter.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastFeedArrayAdapter.java
index ff993dde..f30dd4e9 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastFeedArrayAdapter.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastFeedArrayAdapter.java
@@ -7,11 +7,12 @@ import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
+import androidx.annotation.NonNull;
+
import org.greenrobot.eventbus.EventBus;
-import butterknife.BindView;
-import butterknife.ButterKnife;
import de.luhmer.owncloudnewsreader.R;
+import de.luhmer.owncloudnewsreader.databinding.PodcastFeedRowBinding;
import de.luhmer.owncloudnewsreader.events.podcast.PodcastFeedClicked;
import de.luhmer.owncloudnewsreader.model.PodcastFeedItem;
@@ -32,15 +33,16 @@ public class PodcastFeedArrayAdapter extends ArrayAdapter<PodcastFeedItem> {
if (view != null) {
holder = (ViewHolder) view.getTag();
} else {
- view = inflater.inflate(R.layout.podcast_feed_row, parent, false);
- holder = new ViewHolder(view);
- view.setTag(holder);
+ PodcastFeedRowBinding binding = PodcastFeedRowBinding.inflate(inflater, parent, false);
+ view = binding.getRoot();
+ holder = new ViewHolder(binding);
+ binding.getRoot().setTag(holder);
}
final PodcastFeedItem feedItem = getItem(position);
- holder.tvTitle.setText(feedItem.mFeed.getFeedTitle());
- holder.tvBody.setText(feedItem.mPodcastCount + " Podcasts available");
+ holder.binding.tvTitle.setText(feedItem.mFeed.getFeedTitle());
+ holder.binding.tvBody.setText(feedItem.mPodcastCount + " Podcasts available");
view.setOnClickListener(new View.OnClickListener() {
@Override
@@ -56,11 +58,10 @@ public class PodcastFeedArrayAdapter extends ArrayAdapter<PodcastFeedItem> {
static class ViewHolder {
- @BindView(R.id.tv_title) TextView tvTitle;
- @BindView(R.id.tv_body) TextView tvBody;
+ @NonNull final PodcastFeedRowBinding binding;
- public ViewHolder(View view) {
- ButterKnife.bind(this, view);
+ public ViewHolder(@NonNull PodcastFeedRowBinding binding) {
+ this.binding = binding;
}
}
}
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java
index 7495f74e..de94ffb9 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java
@@ -25,7 +25,6 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.util.SparseArray;
import android.view.LayoutInflater;
@@ -34,23 +33,21 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
-import android.widget.ImageButton;
-import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
-import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
+import androidx.annotation.NonNull;
import androidx.core.view.ViewCompat;
-import butterknife.BindView;
-import butterknife.ButterKnife;
import de.luhmer.owncloudnewsreader.R;
import de.luhmer.owncloudnewsreader.SettingsActivity;
import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm;
import de.luhmer.owncloudnewsreader.database.model.Feed;
import de.luhmer.owncloudnewsreader.database.model.Folder;
+import de.luhmer.owncloudnewsreader.databinding.SubscriptionListItemBinding;
+import de.luhmer.owncloudnewsreader.databinding.SubscriptionListSubItemBinding;
import de.luhmer.owncloudnewsreader.helper.FavIconHandler;
import de.luhmer.owncloudnewsreader.helper.StopWatch;
import de.luhmer.owncloudnewsreader.helper.ThemeChooser;
@@ -150,8 +147,9 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter
viewHolder = (ChildHolder) convertView.getTag();
} else {
LinearLayout view = new LinearLayout(mContext);
- convertView = inflater.inflate(R.layout.subscription_list_sub_item, view, true);
- viewHolder = new ChildHolder(convertView);
+ SubscriptionListSubItemBinding binding = SubscriptionListSubItemBinding.inflate(LayoutInflater.from(mContext), view, true);
+ convertView = binding.getRoot();
+ viewHolder = new ChildHolder(binding);
convertView.setTag(viewHolder);
}
@@ -159,7 +157,7 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter
if(item != null)
{
String headerText = (item.header != null) ? item.header : "";
- viewHolder.tV_HeaderText.setText(headerText);
+ viewHolder.binding.summary.setText(headerText);
String unreadCount;
@@ -170,30 +168,27 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter
}
if(unreadCount != null)
- viewHolder.tV_UnreadCount.setText(unreadCount);
+ viewHolder.binding.tvUnreadCount.setText(unreadCount);
else
- viewHolder.tV_UnreadCount.setText("");
+ viewHolder.binding.tvUnreadCount.setText("");
- favIconHandler.loadFavIconForFeed(item.favIcon, viewHolder.imgView_FavIcon);
+ favIconHandler.loadFavIconForFeed(item.favIcon, viewHolder.binding.iVFavicon);
}
else
{
- viewHolder.tV_HeaderText.setText(mContext.getString(R.string.login_dialog_text_something_went_wrong));
- viewHolder.tV_UnreadCount.setText("");
- viewHolder.imgView_FavIcon.setImageDrawable(null);
+ viewHolder.binding.summary.setText(mContext.getString(R.string.login_dialog_text_something_went_wrong));
+ viewHolder.binding.tvUnreadCount.setText("");
+ viewHolder.binding.iVFavicon.setImageDrawable(null);
}
return convertView;
}
static class ChildHolder {
- @BindView(R.id.list_item_layout) View listItemLayout;
- @BindView(R.id.summary) TextView tV_HeaderText;
- @BindView(R.id.tv_unreadCount) TextView tV_UnreadCount;
- @BindView(R.id.iVFavicon) ImageView imgView_FavIcon;
+ @NonNull final SubscriptionListSubItemBinding binding;
- public ChildHolder(View view) {
- ButterKnife.bind(this, view);
+ public ChildHolder(@NonNull SubscriptionListSubItemBinding binding) {
+ this.binding = binding;
}
}
@@ -242,16 +237,16 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter
final AbstractItem group = (AbstractItem) getGroup(groupPosition);
if (convertView == null) {
- LinearLayout view = new LinearLayout(mContext);
- convertView = inflater.inflate(R.layout.subscription_list_item, view, true);
- viewHolder = new GroupHolder(convertView);
- view.setTag(viewHolder);
+ SubscriptionListItemBinding binding = SubscriptionListItemBinding.inflate(LayoutInflater.from(mContext), new LinearLayout(mContext), true);
+ viewHolder = new GroupHolder(binding);
+ convertView = binding.getRoot();
+ binding.getRoot().setTag(viewHolder);
} else {
viewHolder = (GroupHolder) convertView.getTag();
}
- viewHolder.txt_Summary.setText(group.header);
- viewHolder.listItemLayout.setOnClickListener(new OnClickListener() {
+ viewHolder.binding.summary.setText(group.header);
+ viewHolder.binding.listItemLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
@@ -269,7 +264,7 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter
}
});
- viewHolder.listItemLayout.setOnLongClickListener(new View.OnLongClickListener() {
+ viewHolder.binding.listItemLayout.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
@@ -286,12 +281,12 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter
});
- viewHolder.txt_UnreadCount.setText("");
+ viewHolder.binding.tVFeedsCount.setText("");
boolean skipGetUnread = false;
if(group.idFolder != null && group.idFolder == ITEMS_WITHOUT_FOLDER.getValue()) {
String unreadCount = unreadCountFeeds.get((int) group.id_database);
if(unreadCount != null) {
- viewHolder.txt_UnreadCount.setText(unreadCount);
+ viewHolder.binding.tVFeedsCount.setText(unreadCount);
}
skipGetUnread = true;
@@ -300,7 +295,7 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter
if(!skipGetUnread) {
String unreadCount = unreadCountFolders.get((int) group.id_database);
if(unreadCount != null)
- viewHolder.txt_UnreadCount.setText(unreadCount);
+ viewHolder.binding.tVFeedsCount.setText(unreadCount);
}
@@ -310,25 +305,25 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter
if(group.idFolder != null)
{
- viewHolder.imgView.setVisibility(View.GONE);
+ viewHolder.binding.imgViewExpandableIndicator.setVisibility(View.GONE);
if(group.idFolder == ITEMS_WITHOUT_FOLDER.getValue())
{
ConcreteFeedItem concreteFeedItem = ((ConcreteFeedItem) group);
- favIconHandler.loadFavIconForFeed(concreteFeedItem.favIcon, viewHolder.faviconView);
+ favIconHandler.loadFavIconForFeed(concreteFeedItem.favIcon, viewHolder.binding.imgViewFavicon);
}
} else {
if(group.id_database == ALL_STARRED_ITEMS.getValue()) {
- viewHolder.imgView.setVisibility(View.GONE);
- viewHolder.faviconView.setVisibility(View.VISIBLE);
+ viewHolder.binding.imgViewExpandableIndicator.setVisibility(View.GONE);
+ viewHolder.binding.imgViewFavicon.setVisibility(View.VISIBLE);
rotation = 0;
- viewHolder.faviconView.setImageResource(getBtn_rating_star_off_normal_holo_light());
+ viewHolder.binding.imgViewFavicon.setImageResource(getBtn_rating_star_off_normal_holo_light());
} else if (getChildrenCount( groupPosition ) == 0 ) {
- viewHolder.imgView.setVisibility(View.GONE);
- viewHolder.faviconView.setVisibility(View.INVISIBLE);
+ viewHolder.binding.imgViewExpandableIndicator.setVisibility(View.GONE);
+ viewHolder.binding.imgViewFavicon.setVisibility(View.INVISIBLE);
} else {
- viewHolder.imgView.setVisibility(View.VISIBLE);
- viewHolder.faviconView.setVisibility(View.INVISIBLE);
- viewHolder.imgView.setImageResource(R.drawable.ic_action_expand_less);
+ viewHolder.binding.imgViewExpandableIndicator.setVisibility(View.VISIBLE);
+ viewHolder.binding.imgViewFavicon.setVisibility(View.INVISIBLE);
+ viewHolder.binding.imgViewExpandableIndicator.setImageResource(R.drawable.ic_action_expand_less);
if(isExpanded) {
rotation = 180;
@@ -342,7 +337,7 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter
contentDescriptionId = R.string.content_desc_expand;
}
- viewHolder.imgView.setOnClickListener(new OnClickListener() {
+ viewHolder.binding.imgViewExpandableIndicator.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(isExpanded)
@@ -354,8 +349,8 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter
}
}
- viewHolder.imgView.setRotation(rotation);
- viewHolder.imgView.setContentDescription(viewHolder.imgView.getContext().getString(contentDescriptionId));
+ viewHolder.binding.imgViewExpandableIndicator.setRotation(rotation);
+ viewHolder.binding.imgViewExpandableIndicator.setContentDescription(viewHolder.binding.imgViewExpandableIndicator.getContext().getString(contentDescriptionId));
return convertView;
}
@@ -373,14 +368,10 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter
}
static class GroupHolder {
- @BindView(R.id.list_item_layout) View listItemLayout;
- @BindView(R.id.summary) TextView txt_Summary;
- @BindView(R.id.tV_feedsCount) TextView txt_UnreadCount;
- @BindView(R.id.img_View_expandable_indicator) ImageButton imgView;
- @BindView(R.id.img_view_favicon) ImageView faviconView;
-
- public GroupHolder(View view) {
- ButterKnife.bind(this, view);
+ @NonNull final SubscriptionListItemBinding binding;
+
+ public GroupHolder(@NonNull SubscriptionListItemBinding binding) {
+ this.binding = binding;
}
}
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java
index 29b6ce7a..da8feb32 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java
@@ -66,10 +66,8 @@ import java.net.URL;
import javax.inject.Inject;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm;
+import de.luhmer.owncloudnewsreader.databinding.ActivityLoginDialogBinding;
import de.luhmer.owncloudnewsreader.di.ApiProvider;
import de.luhmer.owncloudnewsreader.model.NextcloudNewsVersion;
import de.luhmer.owncloudnewsreader.ssl.MemorizingTrustManager;
@@ -106,15 +104,7 @@ public class LoginDialogActivity extends AppCompatActivity {
private String mOc_root_path;
// UI references.
- protected @BindView(R.id.username) EditText mUsernameView;
- protected @BindView(R.id.password) EditText mPasswordView;
- protected @BindView(R.id.password_container) TextInputLayout mPasswordContainerView;
- protected @BindView(R.id.edt_owncloudRootPath) EditText mOc_root_path_View;
- protected @BindView(R.id.cb_AllowAllSSLCertificates) CheckBox mCbDisableHostnameVerificationView;
- protected @BindView(R.id.imgView_ShowPassword) ImageView mImageViewShowPwd;
- protected @BindView(R.id.tv_manual_login) TextView mTvManualLogin;
- protected @BindView(R.id.old_login_wrapper) RelativeLayout mOldLoginWrapper;
-
+ protected ActivityLoginDialogBinding binding;
private SingleSignOnAccount importedAccount = null;
private boolean mPasswordVisible = false;
@@ -124,13 +114,17 @@ public class LoginDialogActivity extends AppCompatActivity {
public void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
((NewsReaderApplication) getApplication()).getAppComponent().injectActivity(this);
- setContentView(R.layout.activity_login_dialog);
- ButterKnife.bind(this);
+
+ binding = ActivityLoginDialogBinding.inflate(getLayoutInflater());
+ setContentView(binding.getRoot());
+ binding.btnSingleSignOn.setOnClickListener((v) -> startSingleSignOn());
+ binding.btnLogin.setOnClickListener((v) -> startManualLogin());
+ binding.tvManualLogin.setOnClickListener((v) -> manualLogin());
// Manual Login
- mImageViewShowPwd.setOnClickListener(ImgViewShowPasswordListener);
- mPasswordView.addTextChangedListener(PasswordTextChangedListener);
+ binding.imgViewShowPassword.setOnClickListener(ImgViewShowPasswordListener);
+ binding.password.addTextChangedListener(PasswordTextChangedListener);
mUsername = mPrefs.getString(SettingsActivity.EDT_USERNAME_STRING, "");
mPassword = mPrefs.getString(SettingsActivity.EDT_PASSWORD_STRING, "");
@@ -138,16 +132,16 @@ public class LoginDialogActivity extends AppCompatActivity {
boolean mCbDisableHostnameVerification = mPrefs.getBoolean(SettingsActivity.CB_DISABLE_HOSTNAME_VERIFICATION_STRING, false);
if(!mPassword.isEmpty()) {
- mImageViewShowPwd.setVisibility(View.GONE);
+ binding.imgViewShowPassword.setVisibility(View.GONE);
}
// Set up the login form.
- mUsernameView.setText(mUsername);
- mPasswordView.setText(mPassword);
- mOc_root_path_View.setText(mOc_root_path);
+ binding.username.setText(mUsername);
+ binding.password.setText(mPassword);
+ binding.edtOwncloudRootPath.setText(mOc_root_path);
- mCbDisableHostnameVerificationView.setChecked(mCbDisableHostnameVerification);
- mCbDisableHostnameVerificationView.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+ binding.cbAllowAllSSLCertificates.setChecked(mCbDisableHostnameVerification);
+ binding.cbAllowAllSSLCertificates.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@SuppressLint("ApplySharedPref")
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
@@ -181,14 +175,13 @@ public class LoginDialogActivity extends AppCompatActivity {
super.onStop();
}
- @OnClick(R.id.btnSingleSignOn)
public void startSingleSignOn() {
if (!VersionCheckHelper.verifyMinVersion(LoginDialogActivity.this, MIN_NEXTCLOUD_FILES_APP_VERSION_CODE)) {
// Dialog will be shown automatically
return;
}
- mOldLoginWrapper.setVisibility(View.GONE);
+ binding.oldLoginWrapper.setVisibility(View.GONE);
try {
AccountImporter.pickNewAccount(LoginDialogActivity.this);
@@ -199,14 +192,12 @@ public class LoginDialogActivity extends AppCompatActivity {
}
}
- @OnClick(R.id.btnLogin)
public void startManualLogin() {
attemptLogin();
}
- @OnClick(R.id.tv_manual_login)
public void manualLogin() {
- mOldLoginWrapper.setVisibility(View.VISIBLE);
+ binding.oldLoginWrapper.setVisibility(View.VISIBLE);
}
private TextWatcher PasswordTextChangedListener = new TextWatcher() {
@@ -223,7 +214,7 @@ public class LoginDialogActivity extends AppCompatActivity {
@Override
public void afterTextChanged(Editable s) {
if(s.toString().isEmpty()) {
- mImageViewShowPwd.setVisibility(View.VISIBLE);
+ binding.imgViewShowPassword.setVisibility(View.VISIBLE);
}
}
};
@@ -234,9 +225,9 @@ public class LoginDialogActivity extends AppCompatActivity {
mPasswordVisible = !mPasswordVisible;
if(mPasswordVisible) {
- mPasswordView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
+ binding.password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
} else {
- mPasswordView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
+ binding.password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
}
};
@@ -285,40 +276,40 @@ public class LoginDialogActivity extends AppCompatActivity {
*/
public void attemptLogin() {
// Reset errors.
- mUsernameView.setError(null);
- mPasswordView.setError(null);
- mOc_root_path_View.setError(null);
+ binding.username.setError(null);
+ binding.password.setError(null);
+ binding.edtOwncloudRootPath.setError(null);
// Append "https://" is url doesn't contain it already
- mOc_root_path = mOc_root_path_View.getText().toString().trim();
+ mOc_root_path = binding.edtOwncloudRootPath.getText().toString().trim();
if(!mOc_root_path.startsWith("http")) {
- mOc_root_path_View.setText("https://" + mOc_root_path);
+ binding.edtOwncloudRootPath.setText("https://" + mOc_root_path);
}
// Store values at the time of the login attempt.
- mUsername = mUsernameView.getText().toString().trim();
- mPassword = mPasswordView.getText().toString();
- mOc_root_path = mOc_root_path_View.getText().toString().trim();
+ mUsername = binding.username.getText().toString().trim();
+ mPassword = binding.password.getText().toString();
+ mOc_root_path = binding.edtOwncloudRootPath.getText().toString().trim();
boolean cancel = false;
View focusView = null;
// Check for a valid password.
if (TextUtils.isEmpty(mPassword)) {
- mPasswordView.setError(getString(R.string.error_field_required));
- focusView = mPasswordView;
+ binding.password.setError(getString(R.string.error_field_required));
+ focusView = binding.password;
cancel = true;
}
// Check for a valid email address.
if (TextUtils.isEmpty(mUsername)) {
- mUsernameView.setError(getString(R.string.error_field_required));
- focusView = mUsernameView;
+ binding.username.setError(getString(R.string.error_field_required));
+ focusView = binding.username;
cancel = true;
}
if (TextUtils.isEmpty(mOc_root_path)) {
- mOc_root_path_View.setError(getString(R.string.error_field_required));
- focusView = mOc_root_path_View;
+ binding.edtOwncloudRootPath.setError(getString(R.string.error_field_required));
+ focusView = binding.edtOwncloudRootPath;
cancel = true;
} else {
try {
@@ -331,8 +322,8 @@ public class LoginDialogActivity extends AppCompatActivity {
getString(R.string.login_dialog_text_security_warning), this);
}
} catch (MalformedURLException e) {
- mOc_root_path_View.setError(getString(R.string.error_invalid_url));
- focusView = mOc_root_path_View;
+ binding.edtOwncloudRootPath.setError(getString(R.string.error_invalid_url));
+ focusView = binding.edtOwncloudRootPath;
cancel = true;
}
}
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java
index 29e2adc9..d114fc8c 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java
@@ -17,15 +17,11 @@ import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.Spinner;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
@@ -54,12 +50,10 @@ import java.util.Map;
import javax.inject.Inject;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm;
import de.luhmer.owncloudnewsreader.database.model.Feed;
import de.luhmer.owncloudnewsreader.database.model.Folder;
+import de.luhmer.owncloudnewsreader.databinding.ActivityNewFeedBinding;
import de.luhmer.owncloudnewsreader.di.ApiProvider;
import de.luhmer.owncloudnewsreader.helper.AsyncTaskHelper;
import de.luhmer.owncloudnewsreader.helper.OpmlXmlParser;
@@ -79,12 +73,7 @@ public class NewFeedActivity extends AppCompatActivity {
private final static int REQUEST_CODE_OPML_IMPORT = 2;
// UI references.
- protected @BindView(R.id.et_feed_url) EditText mFeedUrlView;
- protected @BindView(R.id.sp_folder) Spinner mFolderView;
- protected @BindView(R.id.new_feed_progress) View mProgressView;
- protected @BindView(R.id.new_feed_form) View mLoginFormView;
- protected @BindView(R.id.btn_addFeed) Button mAddFeedButton;
- protected @BindView(R.id.toolbar) Toolbar toolbar;
+ protected ActivityNewFeedBinding binding;
private List<Folder> folders;
protected @Inject ApiProvider mApi;
@@ -96,13 +85,16 @@ public class NewFeedActivity extends AppCompatActivity {
ThemeChooser.chooseTheme(this);
super.onCreate(savedInstanceState);
ThemeChooser.afterOnCreate(this);
- setContentView(R.layout.activity_new_feed);
- ButterKnife.bind(this);
+ binding = ActivityNewFeedBinding.inflate(getLayoutInflater());
+ setContentView(binding.getRoot());
+ binding.btnAddFeed.setOnClickListener((v) -> btnAddFeedClick());
+ binding.btnImportOpml.setOnClickListener((v) -> importOpml());
+ binding.btnExportOpml.setOnClickListener((v) -> exportOpml());
- if (toolbar != null) {
- setSupportActionBar(toolbar);
+ if (binding.toolbarLayout.toolbar != null) {
+ setSupportActionBar(binding.toolbarLayout.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@@ -118,7 +110,7 @@ public class NewFeedActivity extends AppCompatActivity {
}
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, folderNames);
- mFolderView.setAdapter(spinnerArrayAdapter);
+ binding.spFolder.setAdapter(spinnerArrayAdapter);
Intent intent = getIntent();
String action = intent.getAction();
@@ -140,22 +132,20 @@ public class NewFeedActivity extends AppCompatActivity {
//Uri uri = intent.getData();
Log.v("tag" , "Content intent detected: " + action + " : " + url);
- mFeedUrlView.setText(url);
+ binding.etFeedUrl.setText(url);
}
}
- @OnClick(R.id.btn_addFeed)
public void btnAddFeedClick() {
//Hide keyboard
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(mFeedUrlView.getWindowToken(), 0);
+ imm.hideSoftInputFromWindow(binding.etFeedUrl.getWindowToken(), 0);
attemptAddNewFeed();
}
- @OnClick(R.id.btn_import_opml)
public void importOpml() {
String permission = Manifest.permission.READ_EXTERNAL_STORAGE;
@@ -181,9 +171,6 @@ public class NewFeedActivity extends AppCompatActivity {
.start();
}
-
-
- @OnClick(R.id.btn_export_opml)
public void exportOpml() {
String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
@@ -348,13 +335,13 @@ public class NewFeedActivity extends AppCompatActivity {
* errors are presented and no actual login attempt is made.
*/
public void attemptAddNewFeed() {
- Folder folder = folders.get(mFolderView.getSelectedItemPosition());
+ Folder folder = folders.get(binding.spFolder.getSelectedItemPosition());
// Reset errors.
- mFeedUrlView.setError(null);
+ binding.etFeedUrl.setError(null);
// Store values at the time of the login attempt.
- String urlToFeed = mFeedUrlView.getText().toString();
+ String urlToFeed = binding.etFeedUrl.getText().toString();
boolean cancel = false;
View focusView = null;
@@ -362,12 +349,12 @@ public class NewFeedActivity extends AppCompatActivity {
// Check for a valid email address.
if (TextUtils.isEmpty(urlToFeed)) {
- mFeedUrlView.setError(getString(R.string.error_field_required));
- focusView = mFeedUrlView;
+ binding.etFeedUrl.setError(getString(R.string.error_field_required));
+ focusView = binding.etFeedUrl;
cancel = true;
} else if (!isUrlValid(urlToFeed)) {
- mFeedUrlView.setError(getString(R.string.error_invalid_url));
- focusView = mFeedUrlView;
+ binding.etFeedUrl.setError(getString(R.string.error_invalid_url));
+ focusView = binding.etFeedUrl;
cancel = true;
}
@@ -403,13 +390,13 @@ public class NewFeedActivity extends AppCompatActivity {
} catch (JSONException e) {
Log.e(TAG, "Extracting error message failed: " + errorMessage, e);
}
- mFeedUrlView.setError(errorMessage);
+ binding.etFeedUrl.setError(errorMessage);
Log.e(TAG, errorMessage);
} catch (IOException e) {
Log.e(TAG, "IOException", e);
- mFeedUrlView.setError(getString(R.string.login_dialog_text_something_went_wrong));
+ binding.etFeedUrl.setError(getString(R.string.login_dialog_text_something_went_wrong));
}
- mFeedUrlView.requestFocus();
+ binding.etFeedUrl.requestFocus();
}
});
}
@@ -419,8 +406,8 @@ public class NewFeedActivity extends AppCompatActivity {
runOnUiThread(() -> {
showProgress(false);
- mFeedUrlView.setError(getString(R.string.login_dialog_text_something_went_wrong) + " - " + OkHttpSSLClient.HandleExceptions((Exception) t).getMessage());
- mFeedUrlView.requestFocus();
+ binding.etFeedUrl.setError(getString(R.string.login_dialog_text_something_went_wrong) + " - " + OkHttpSSLClient.HandleExceptions((Exception) t).getMessage());
+ binding.etFeedUrl.requestFocus();
});
}
});
@@ -451,21 +438,21 @@ public class NewFeedActivity extends AppCompatActivity {
public void showProgress(final boolean show) {
int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);
- mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
- mLoginFormView.animate().setDuration(shortAnimTime).alpha(
+ binding.newFeedForm.setVisibility(show ? View.GONE : View.VISIBLE);
+ binding.newFeedForm.animate().setDuration(shortAnimTime).alpha(
show ? 0 : 1).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
- mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
+ binding.newFeedForm.setVisibility(show ? View.GONE : View.VISIBLE);
}
});
- mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
- mProgressView.animate().setDuration(shortAnimTime).alpha(
+ binding.newFeedProgress.setVisibility(show ? View.VISIBLE : View.GONE);
+ binding.newFeedProgress.animate().setDuration(shortAnimTime).alpha(
show ? 1 : 0).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
- mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
+ binding.newFeedProgress.setVisibility(show ? View.VISIBLE : View.GONE);
}
});
}
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java
index 86878af3..16859f1c 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java
@@ -36,10 +36,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ProgressBar;
-import androidx.appcompat.widget.AppCompatImageButton;
-import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
@@ -54,14 +51,14 @@ import java.util.Set;
import javax.inject.Inject;
-import butterknife.BindView;
-import butterknife.ButterKnife;
import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm;
import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm.SORT_DIRECTION;
import de.luhmer.owncloudnewsreader.database.model.RssItem;
+import de.luhmer.owncloudnewsreader.databinding.ActivityNewsDetailBinding;
import de.luhmer.owncloudnewsreader.helper.ThemeUtils;
import de.luhmer.owncloudnewsreader.model.PodcastItem;
import de.luhmer.owncloudnewsreader.model.TTSItem;
+import de.luhmer.owncloudnewsreader.view.PodcastSlidingUpPanelLayout;
import de.luhmer.owncloudnewsreader.widget.WidgetProvider;
@@ -79,18 +76,7 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
* {@link FragmentStatePagerAdapter}.
*/
private SectionsPagerAdapter mSectionsPagerAdapter;
- protected @BindView(R.id.toolbar) Toolbar toolbar;
- // protected @BindView(R.id.bottomAppBar) BottomAppBar bottomAppBar;
- protected @BindView(R.id.progressIndicator) ProgressBar progressIndicator;
- //protected @BindView(R.id.btn_disable_incognito) ImageButton mBtnDisableIncognito;
- protected @BindView(R.id.fa_detail_bar) View fastActionDetailBar;
- protected @BindView(R.id.fa_collapse_layout) View fastActionCollapseLayout;
- protected @BindView(R.id.fa_star) AppCompatImageButton fastActionStar;
- protected @BindView(R.id.fa_mark_as_read) AppCompatImageButton fastActionRead;
- protected @BindView(R.id.fa_toggle) AppCompatImageButton fastActionToggle;
- protected @BindView(R.id.fa_open_in_browser) AppCompatImageButton fastActionOpenInBrowser;
- protected @BindView(R.id.fa_share) AppCompatImageButton fastActionShare;
-
+ protected ActivityNewsDetailBinding binding;
/**
* The {@link ViewPager} that will host the section contents.
@@ -116,6 +102,9 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
super.onCreate(savedInstanceState);
+ binding = ActivityNewsDetailBinding.inflate(getLayoutInflater());
+ setContentView(binding.getRoot());
+
/*
//make full transparent statusBar
if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
@@ -144,10 +133,6 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
}
*/
-
-
- setContentView(R.layout.activity_news_detail);
-
/*
// For Debugging the WebView using Chrome Remote Debugging
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
@@ -155,10 +140,8 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
}
*/
- ButterKnife.bind(this);
-
- if (toolbar != null) {
- setSupportActionBar(toolbar);
+ if (binding.toolbarLayout.toolbar != null) {
+ setSupportActionBar(binding.toolbarLayout.toolbar);
}
/*
if (bottomAppBar != null) {
@@ -200,7 +183,7 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
// primary sections of the app.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
- progressIndicator.setMax(mSectionsPagerAdapter.getCount());
+ binding.progressIndicator.setMax(mSectionsPagerAdapter.getCount());
// Set up the ViewPager with the sections adapter.
mViewPager = findViewById(R.id.pager);
@@ -232,7 +215,12 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
updateActionBarIcons();
}
- /**
+ @Override
+ protected PodcastSlidingUpPanelLayout getPodcastSlidingUpPanelLayout() {
+ return binding.slidingLayout;
+ }
+
+ /**
* Init fast action bar based on user settings.
* Only show if user selected setting CB_SHOW_FAST_ACTIONS. Otherwise hide.
*
@@ -243,18 +231,18 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
if (mShowFastActions) {
// Set click listener for buttons on action bar
- fastActionOpenInBrowser.setOnClickListener(v -> this.openInBrowser(currentPosition));
- fastActionToggle.setOnClickListener(v -> this.toggleFastActionBar()); // toggle expand / collapse
- fastActionStar.setOnClickListener(v -> NewsDetailActivity.this.toggleRssItemStarredState());
- fastActionRead.setOnClickListener(v -> NewsDetailActivity.this.markRead(currentPosition));
- fastActionShare.setOnClickListener(v -> this.share(currentPosition));
+ binding.faDetailBar.faOpenInBrowser.setOnClickListener(v -> this.openInBrowser(currentPosition));
+ binding.faDetailBar.faToggle.setOnClickListener(v -> this.toggleFastActionBar()); // toggle expand / collapse
+ binding.faDetailBar.faStar.setOnClickListener(v -> NewsDetailActivity.this.toggleRssItemStarredState());
+ binding.faDetailBar.faMarkAsRead.setOnClickListener(v -> NewsDetailActivity.this.markRead(currentPosition));
+ binding.faDetailBar.faShare.setOnClickListener(v -> this.share(currentPosition));
- fastActionDetailBar.setVisibility(View.VISIBLE);
+ binding.faDetailBar.getRoot().setVisibility(View.VISIBLE);
// initially the bar should be opened in the expanded state
this.toggleFastActionBar();
} else {
- fastActionDetailBar.setVisibility(View.INVISIBLE);
+ binding.faDetailBar.getRoot().setVisibility(View.INVISIBLE);
}
}
@@ -262,21 +250,21 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
* Expands or shrinks the fast action bar to show/hide secondary functions
*/
private void toggleFastActionBar() {
- int currentState = fastActionCollapseLayout.getVisibility();
+ int currentState = binding.faDetailBar.faCollapseLayout.getVisibility();
switch (currentState) {
case View.GONE:
- fastActionToggle.setImageResource(R.drawable.ic_fa_expand);
- fastActionCollapseLayout.setVisibility(View.VISIBLE);
+ binding.faDetailBar.faToggle.setImageResource(R.drawable.ic_fa_expand);
+ binding.faDetailBar.faCollapseLayout.setVisibility(View.VISIBLE);
break;
case View.VISIBLE:
- fastActionToggle.setImageResource(R.drawable.ic_fa_shrink);
- fastActionCollapseLayout.setVisibility(View.GONE);
+ binding.faDetailBar.faToggle.setImageResource(R.drawable.ic_fa_shrink);
+ binding.faDetailBar.faCollapseLayout.setVisibility(View.GONE);
break;
default:
break;
}
//((Animatable)fastActionToggle.getDrawable()).start();
- fastActionToggle.setScaleX(-1);
+ binding.faDetailBar.faToggle.setScaleX(-1);
}
private void toggleIncognitoMode() {
@@ -369,7 +357,7 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
stopVideoOnCurrentPage();
currentPosition = position;
resumeVideoPlayersOnCurrentPage();
- progressIndicator.setProgress(position + 1);
+ binding.progressIndicator.setProgress(position + 1);
if(rssItems.get(position).getFeed() != null) {
// Try getting the feed title and use it for the action bar title
@@ -429,10 +417,10 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
if(menuItem_Starred != null) {
if (isStarred) {
menuItem_Starred.setIcon(R.drawable.ic_action_star_dark);
- fastActionStar.setImageResource(R.drawable.ic_action_star_dark);
+ binding.faDetailBar.faStar.setImageResource(R.drawable.ic_action_star_dark);
} else {
menuItem_Starred.setIcon(R.drawable.ic_action_star_border_dark);
- fastActionStar.setImageResource(R.drawable.ic_action_star_border_dark);
+ binding.faDetailBar.faStar.setImageResource(R.drawable.ic_action_star_border_dark);
}
}
@@ -440,11 +428,11 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
if (isRead) {
menuItem_Read.setIcon(R.drawable.ic_check_box_white);
menuItem_Read.setChecked(true);
- fastActionRead.setImageResource(R.drawable.ic_check_box_white);
+ binding.faDetailBar.faMarkAsRead.setImageResource(R.drawable.ic_check_box_white);
} else {
menuItem_Read.setIcon(R.drawable.ic_check_box_outline_blank_white);
menuItem_Read.setChecked(false);
- fastActionRead.setImageResource(R.drawable.ic_check_box_outline_blank_white);
+ binding.faDetailBar.faMarkAsRead.setImageResource(R.drawable.ic_check_box_outline_blank_white);
}
}
}
@@ -552,8 +540,8 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
NewsDetailFragment newsDetailFragment = getNewsDetailFragmentAtPosition(currentPosition);
String link = "about:blank";
- if(newsDetailFragment != null && newsDetailFragment.mWebView != null) {
- link = newsDetailFragment.mWebView.getUrl();
+ if(newsDetailFragment != null && newsDetailFragment.binding.webview != null) {
+ link = newsDetailFragment.binding.webview.getUrl();
}
if("about:blank".equals(link)) {
@@ -578,9 +566,9 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
NewsDetailFragment fragment = getNewsDetailFragmentAtPosition(currentPosition);
if(fragment != null) { // could be null if not instantiated yet
- if(!fragment.mWebView.getUrl().equals("about:blank") && !fragment.mWebView.getUrl().trim().equals("")) {
- content = fragment.mWebView.getUrl();
- title = fragment.mWebView.getTitle();
+ if(!fragment.binding.webview.getUrl().equals("about:blank") && !fragment.binding.webview.getUrl().trim().equals("")) {
+ content = fragment.binding.webview.getUrl();
+ title = fragment.binding.webview.getTitle();
}
}
@@ -667,7 +655,7 @@ public class NewsDetailActivity extends PodcastFragmentActivity {
public void initIncognitoMode() {
int color = getResources().getColor(isIncognitoEnabled() ? R.color.material_grey_900 : R.color.colorPrimary);
- ThemeUtils.colorizeToolbar(toolbar, color);
+ ThemeUtils.colorizeToolbar(binding.toolbarLayout.toolbar, color);
//ThemeUtils.colorizeToolbar(bottomAppBar, color);
//ThemeUtils.changeStatusBarColor(this, color);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailFragment.java
index 8b8090fb..2c2e1920 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailFragment.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailFragment.java
@@ -38,8 +38,6 @@ import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
-import android.widget.ProgressBar;
-import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.browser.customtabs.CustomTabsIntent;
@@ -60,11 +58,10 @@ import java.util.Map;
import javax.inject.Inject;
-import butterknife.BindView;
-import butterknife.ButterKnife;
import de.luhmer.owncloudnewsreader.adapter.ProgressBarWebChromeClient;
import de.luhmer.owncloudnewsreader.async_tasks.RssItemToHtmlTask;
import de.luhmer.owncloudnewsreader.database.model.RssItem;
+import de.luhmer.owncloudnewsreader.databinding.FragmentNewsDetailBinding;
import de.luhmer.owncloudnewsreader.helper.AdBlocker;
import de.luhmer.owncloudnewsreader.helper.AsyncTaskHelper;
import de.luhmer.owncloudnewsreader.helper.ColorHelper;
@@ -77,10 +74,7 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
public final String TAG = getClass().getCanonicalName();
- protected @BindView(R.id.webview) WebView mWebView;
- protected @BindView(R.id.progressBarLoading) ProgressBar mProgressBarLoading;
- protected @BindView(R.id.progressbar_webview) ProgressBar mProgressbarWebView;
- protected @BindView(R.id.tv_offline_version) TextView mTvOfflineVersion;
+ protected FragmentNewsDetailBinding binding;
protected @Inject SharedPreferences mPrefs;
@@ -109,7 +103,7 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
super.onResume();
resumeCurrentPage();
- registerForContextMenu(mWebView);
+ registerForContextMenu(binding.webview);
}
@Override
@@ -121,23 +115,23 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
@Override
public void onDestroy() {
super.onDestroy();
- if(mWebView != null) {
- mWebView.destroy();
+ if(binding.webview != null) {
+ binding.webview.destroy();
}
}
public void pauseCurrentPage() {
- if(mWebView != null) {
- mWebView.onPause();
- mWebView.pauseTimers();
+ if(binding.webview != null) {
+ binding.webview.onPause();
+ binding.webview.pauseTimers();
}
}
public void resumeCurrentPage() {
- if(mWebView != null) {
- mWebView.onResume();
- mWebView.resumeTimers();
+ if(binding.webview != null) {
+ binding.webview.onResume();
+ binding.webview.resumeTimers();
}
}
@@ -157,47 +151,45 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
*/
public void navigateBack() {
if (isLastPageRssItem()) {
- mWebView.clearHistory();
+ binding.webview.clearHistory();
startLoadRssItemToWebViewTask();
} else if (!isCurrentPageRssItem()){
- mWebView.goBack();
+ binding.webview.goBack();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View rootView = inflater.inflate(R.layout.fragment_news_detail, container, false);
+ binding = FragmentNewsDetailBinding.inflate(inflater, container, false);
section_number = (Integer) getArguments().get(ARG_SECTION_NUMBER);
- ButterKnife.bind(this, rootView);
-
// Do not reload webview if retained
if(savedInstanceState == null) {
startLoadRssItemToWebViewTask();
} else {
- mWebView.restoreState(savedInstanceState);
- mProgressBarLoading.setVisibility(View.GONE);
+ binding.webview.restoreState(savedInstanceState);
+ binding.progressBarLoading.setVisibility(View.GONE);
// Make sure to sync the incognitio on retained views
syncIncognitoState();
- this.addBottomPaddingForFastActions(mWebView);
+ this.addBottomPaddingForFastActions(binding.webview);
}
// setUpGestureDetector();
- return rootView;
+ return binding.getRoot();
}
protected void syncIncognitoState() {
NewsDetailActivity ndActivity = ((NewsDetailActivity)getActivity());
boolean isIncognito = ndActivity.isIncognitoEnabled();
- mWebView.getSettings().setBlockNetworkLoads(isIncognito);
- mWebView.getSettings().setBlockNetworkImage(isIncognito);
+ binding.webview.getSettings().setBlockNetworkLoads(isIncognito);
+ binding.webview.getSettings().setBlockNetworkImage(isIncognito);
}
@Override
public void onSaveInstanceState(Bundle outState) {
- mWebView.saveState(outState);
+ binding.webview.saveState(outState);
}
/**
@@ -240,14 +232,14 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
protected void startLoadRssItemToWebViewTask() {
Log.d(TAG, "startLoadRssItemToWebViewTask() called");
- mWebView.setVisibility(View.GONE);
- mProgressBarLoading.setVisibility(View.VISIBLE);
+ binding.webview.setVisibility(View.GONE);
+ binding.progressBarLoading.setVisibility(View.VISIBLE);
NewsDetailActivity ndActivity = ((NewsDetailActivity)getActivity());
assert ndActivity != null;
int backgroundColor = ContextCompat.getColor(ndActivity, R.color.news_detail_background_color);
- mWebView.setBackgroundColor(backgroundColor);
+ binding.webview.setBackgroundColor(backgroundColor);
ndActivity.setBackgroundColorOfViewPager(backgroundColor);
init_webView();
@@ -258,13 +250,13 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
@Override
public void onRssItemParsed(String htmlPage) {
- mWebView.setVisibility(View.VISIBLE);
- mProgressBarLoading.setVisibility(View.GONE);
+ binding.webview.setVisibility(View.VISIBLE);
+ binding.progressBarLoading.setVisibility(View.GONE);
- setSoftwareRenderModeForWebView(htmlPage, mWebView);
+ setSoftwareRenderModeForWebView(htmlPage, binding.webview);
html = htmlPage;
- mWebView.loadDataWithBaseURL("file:///android_asset/", htmlPage, "text/html", "UTF-8", RSS_ITEM_PAGE_URL);
+ binding.webview.loadDataWithBaseURL("file:///android_asset/", htmlPage, "text/html", "UTF-8", RSS_ITEM_PAGE_URL);
}
/**
@@ -295,9 +287,9 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
private void init_webView() {
int backgroundColor = ColorHelper.getColorFromAttribute(getContext(),
R.attr.news_detail_background_color);
- mWebView.setBackgroundColor(backgroundColor);
+ binding.webview.setBackgroundColor(backgroundColor);
- WebSettings webSettings = mWebView.getSettings();
+ WebSettings webSettings = binding.webview.getSettings();
//webSettings.setPluginState(WebSettings.PluginState.ON);
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowContentAccess(true);
@@ -311,9 +303,9 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
syncIncognitoState();
- mWebView.setWebChromeClient(new ProgressBarWebChromeClient(mProgressbarWebView));
+ binding.webview.setWebChromeClient(new ProgressBarWebChromeClient(binding.progressbarWebview));
- mWebView.setWebViewClient(new WebViewClient() {
+ binding.webview.setWebViewClient(new WebViewClient() {
private Map<String, Boolean> loadedUrls = new HashMap<>();
@@ -345,7 +337,7 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
});
/*
- mWebView.setOnTouchListener((v, event) -> {
+ binding.webview.setOnTouchListener((v, event) -> {
mGestureDetector.onTouchEvent(event);
return false;
});
@@ -387,10 +379,10 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
File webArchiveFile = DownloadWebPageService.getWebPageArchiveFileForUrl(getActivity(), url);
if(webArchiveFile.exists()) { // Test if WebArchive exists for url
- mTvOfflineVersion.setVisibility(View.VISIBLE);
- mWebView.loadUrl("file://" + webArchiveFile.getAbsolutePath());
+ binding.tvOfflineVersion.setVisibility(View.VISIBLE);
+ binding.webview.loadUrl("file://" + webArchiveFile.getAbsolutePath());
} else {
- mTvOfflineVersion.setVisibility(View.GONE);
+ binding.tvOfflineVersion.setVisibility(View.GONE);
switch (selectedBrowser) {
case 0: // Custom Tabs
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder()
@@ -406,7 +398,7 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
startActivity(browserIntent);
break;
case 2: // Built in
- mWebView.loadUrl(url);
+ binding.webview.loadUrl(url);
break;
default:
throw new IllegalStateException("Unknown selection!");
@@ -504,7 +496,7 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
* the original rss item page
*/
private boolean isLastPageRssItem() {
- WebBackForwardList list = mWebView.copyBackForwardList();
+ WebBackForwardList list = binding.webview.copyBackForwardList();
WebHistoryItem lastItem = list.getItemAtIndex(list.getCurrentIndex() - 1);
return lastItem != null && lastItem.getUrl().equals(RSS_ITEM_PAGE_URL);
}
@@ -514,8 +506,8 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li
* the original rss item page
*/
private boolean isCurrentPageRssItem() {
- if(mWebView.copyBackForwardList().getCurrentItem() != null) {
- String currentPageUrl = mWebView.copyBackForwardList().getCurrentItem().getOriginalUrl();
+ if(binding.webview.copyBackForwardList().getCurrentItem() != null) {
+ String currentPageUrl = binding.webview.copyBackForwardList().getCurrentItem().getOriginalUrl();
return currentPageUrl.equals("data:text/html;charset=utf-8;base64,");
}
return true;
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java
index 4d31498b..26c1f033 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java
@@ -44,7 +44,6 @@ import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
-import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.core.content.ContextCompat;
@@ -62,14 +61,13 @@ import java.util.List;
import javax.inject.Inject;
-import butterknife.BindView;
-import butterknife.ButterKnife;
import de.luhmer.owncloudnewsreader.adapter.NewsListRecyclerAdapter;
import de.luhmer.owncloudnewsreader.adapter.ViewHolder;
import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm;
import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm.SORT_DIRECTION;
import de.luhmer.owncloudnewsreader.database.model.RssItem;
import de.luhmer.owncloudnewsreader.database.model.RssItemDao;
+import de.luhmer.owncloudnewsreader.databinding.FragmentNewsreaderDetailBinding;
import de.luhmer.owncloudnewsreader.helper.AsyncTaskHelper;
import de.luhmer.owncloudnewsreader.helper.PostDelayHandler;
import de.luhmer.owncloudnewsreader.helper.Search;
@@ -94,14 +92,7 @@ public class NewsReaderDetailFragment extends Fragment {
protected final String TAG = getClass().getCanonicalName();
- @BindView(R.id.pb_loading)
- ProgressBar pbLoading;
- @BindView(R.id.tv_no_items_available)
- View tvNoItemsAvailable;
- @BindView(R.id.list)
- RecyclerView recyclerView;
- @BindView(R.id.swipeRefresh)
- SwipeRefreshLayout swipeRefresh;
+ FragmentNewsreaderDetailBinding binding;
private Long idFeed;
private Drawable leftSwipeDrawable;
@@ -152,7 +143,7 @@ public class NewsReaderDetailFragment extends Fragment {
@Override
public void onError(Throwable e) {
- pbLoading.setVisibility(View.GONE);
+ binding.pbLoading.setVisibility(View.GONE);
Toast.makeText(mActivity, e.getLocalizedMessage(), Toast.LENGTH_LONG).show();
}
@@ -233,7 +224,7 @@ public class NewsReaderDetailFragment extends Fragment {
}
protected void notifyDataSetChangedOnAdapter() {
- NewsListRecyclerAdapter nca = (NewsListRecyclerAdapter) recyclerView.getAdapter();
+ NewsListRecyclerAdapter nca = (NewsListRecyclerAdapter) binding.list.getAdapter();
if (nca != null) {
nca.notifyDataSetChanged();
}
@@ -244,14 +235,14 @@ public class NewsReaderDetailFragment extends Fragment {
*/
protected void refreshCurrentRssView() {
Log.v(TAG, "refreshCurrentRssView");
- NewsListRecyclerAdapter nra = ((NewsListRecyclerAdapter) recyclerView.getAdapter());
+ NewsListRecyclerAdapter nra = ((NewsListRecyclerAdapter) binding.list.getAdapter());
if (nra != null) {
nra.refreshAdapterDataAsync(() -> {
- pbLoading.setVisibility(View.GONE);
+ binding.pbLoading.setVisibility(View.GONE);
if (layoutManagerSavedState != null) {
- recyclerView.getLayoutManager().onRestoreInstanceState(layoutManagerSavedState);
+ binding.list.getLayoutManager().onRestoreInstanceState(layoutManagerSavedState);
layoutManagerSavedState = null;
}
});
@@ -282,20 +273,20 @@ public class NewsReaderDetailFragment extends Fragment {
}
public RecyclerView getRecyclerView() {
- return recyclerView;
+ return binding.list;
}
public LinearLayoutManager getLayoutManager() {
- if (recyclerView == null) return null;
- return (LinearLayoutManager) recyclerView.getLayoutManager();
+ if (binding.list == null) return null;
+ return (LinearLayoutManager) binding.list.getLayoutManager();
}
protected List<RssItem> performSearch(String searchString) {
Handler mainHandler = new Handler(mActivity.getMainLooper());
Runnable myRunnable = () -> {
- pbLoading.setVisibility(View.VISIBLE);
- tvNoItemsAvailable.setVisibility(View.GONE);
+ binding.pbLoading.setVisibility(View.VISIBLE);
+ binding.tvNoItemsAvailable.setVisibility(View.GONE);
};
mainHandler.post(myRunnable);
@@ -305,21 +296,21 @@ public class NewsReaderDetailFragment extends Fragment {
void loadRssItemsIntoView(List<RssItem> rssItems) {
previousFirstVisibleItem = -1;
try {
- NewsListRecyclerAdapter nra = ((NewsListRecyclerAdapter) recyclerView.getAdapter());
+ NewsListRecyclerAdapter nra = ((NewsListRecyclerAdapter) binding.list.getAdapter());
if (nra == null) {
- nra = new NewsListRecyclerAdapter(mActivity, recyclerView, mActivity, mPostDelayHandler, mPrefs);
- recyclerView.setAdapter(nra);
+ nra = new NewsListRecyclerAdapter(mActivity, binding.list, mActivity, mPostDelayHandler, mPrefs);
+ binding.list.setAdapter(nra);
}
nra.updateAdapterData(rssItems);
- pbLoading.setVisibility(View.GONE);
+ binding.pbLoading.setVisibility(View.GONE);
if (nra.getItemCount() <= 0) {
- tvNoItemsAvailable.setVisibility(View.VISIBLE);
+ binding.tvNoItemsAvailable.setVisibility(View.VISIBLE);
} else {
- tvNoItemsAvailable.setVisibility(View.GONE);
+ binding.tvNoItemsAvailable.setVisibility(View.GONE);
}
- recyclerView.scrollToPosition(0);
+ binding.list.scrollToPosition(0);
} catch (Exception ex) {
ex.printStackTrace();
@@ -329,16 +320,14 @@ public class NewsReaderDetailFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- View rootView = inflater.inflate(R.layout.fragment_newsreader_detail, container, false);
+ binding = FragmentNewsreaderDetailBinding.inflate(inflater, container, false);
- ButterKnife.bind(this, rootView);
-
- recyclerView.setHasFixedSize(true);
- recyclerView.setLayoutManager(new LinearLayoutManager(mActivity, RecyclerView.VERTICAL, false));
- recyclerView.setItemAnimator(new DefaultItemAnimator());
+ binding.list.setHasFixedSize(true);
+ binding.list.setLayoutManager(new LinearLayoutManager(mActivity, RecyclerView.VERTICAL, false));
+ binding.list.setItemAnimator(new DefaultItemAnimator());
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new NewsReaderItemTouchHelperCallback());
- itemTouchHelper.attachToRecyclerView(recyclerView);
+ itemTouchHelper.attachToRecyclerView(binding.list);
//recyclerView.addItemDecoration(new DividerItemDecoration(mActivity)); // Enable divider line
/*
@@ -351,10 +340,10 @@ public class NewsReaderDetailFragment extends Fragment {
});
*/
- swipeRefresh.setColorSchemeColors(accentColor);
- swipeRefresh.setOnRefreshListener((SwipeRefreshLayout.OnRefreshListener) mActivity);
+ binding.swipeRefresh.setColorSchemeColors(accentColor);
+ binding.swipeRefresh.setOnRefreshListener((SwipeRefreshLayout.OnRefreshListener) mActivity);
- recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
+ binding.list.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (dy > 0) { //check for scroll down
@@ -384,12 +373,12 @@ public class NewsReaderDetailFragment extends Fragment {
}
};
- return rootView;
+ return binding.getRoot();
}
private void handleMarkAsReadScrollEvent() {
- LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
- NewsListRecyclerAdapter adapter = (NewsListRecyclerAdapter) recyclerView.getAdapter();
+ LinearLayoutManager linearLayoutManager = (LinearLayoutManager) binding.list.getLayoutManager();
+ NewsListRecyclerAdapter adapter = (NewsListRecyclerAdapter) binding.list.getAdapter();
int firstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition();
int lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
@@ -414,7 +403,7 @@ public class NewsReaderDetailFragment extends Fragment {
for (int i = firstVisibleItem; i < firstVisibleItem + numberItemsAhead; i++) {
//Log.v(TAG, "Mark item as read: " + i);
- ViewHolder vh = (ViewHolder) recyclerView.findViewHolderForLayoutPosition(i);
+ ViewHolder vh = (ViewHolder) binding.list.findViewHolderForLayoutPosition(i);
if (vh != null && !vh.shouldStayUnread()) {
adapter.changeReadStateOfItem(vh, true);
}
@@ -422,10 +411,10 @@ public class NewsReaderDetailFragment extends Fragment {
//Check if Listview is scrolled to bottom
if (reachedBottom && visibleItemCount != 0 && //Check if list is empty
- recyclerView.getChildAt(visibleItemCount).getBottom() <= recyclerView.getHeight()) {
+ binding.list.getChildAt(visibleItemCount).getBottom() <= binding.list.getHeight()) {
for (int i = firstVisibleItem; i <= lastVisibleItem; i++) {
- RecyclerView.ViewHolder vhTemp = recyclerView.findViewHolderForLayoutPosition(i);
+ RecyclerView.ViewHolder vhTemp = binding.list.findViewHolderForLayoutPosition(i);
if (vhTemp instanceof ViewHolder) { //Check for ViewHolder instance because of ProgressViewHolder
ViewHolder vh = (ViewHolder) vhTemp;
@@ -502,7 +491,7 @@ public class NewsReaderDetailFragment extends Fragment {
}
public int getFirstVisibleScrollPosition() {
- LinearLayoutManager layoutManager = ((LinearLayoutManager) recyclerView.getLayoutManager());
+ LinearLayoutManager layoutManager = ((LinearLayoutManager) binding.list.getLayoutManager());
return layoutManager.findFirstVisibleItemPosition();
}
@@ -510,8 +499,8 @@ public class NewsReaderDetailFragment extends Fragment {
@Override
protected void onPreExecute() {
- pbLoading.setVisibility(View.VISIBLE);
- tvNoItemsAvailable.setVisibility(View.GONE);
+ binding.pbLoading.setVisibility(View.VISIBLE);
+ binding.tvNoItemsAvailable.setVisibility(View.GONE);
super.onPreExecute();
}
@@ -562,10 +551,10 @@ public class NewsReaderDetailFragment extends Fragment {
if (rssItem.size() < 10) { // Less than 10 items in the list (usually 3-5 items fit on one screen)
// There is no API to check, if this listener has already been added. We don't want to
// add it multiple times, so we take the safe route here by removing it before adding it.
- recyclerView.removeOnItemTouchListener(itemTouchListener);
- recyclerView.addOnItemTouchListener(itemTouchListener);
+ binding.list.removeOnItemTouchListener(itemTouchListener);
+ binding.list.addOnItemTouchListener(itemTouchListener);
} else {
- recyclerView.removeOnItemTouchListener(itemTouchListener);
+ binding.list.removeOnItemTouchListener(itemTouchListener);
}
}
}
@@ -618,7 +607,7 @@ public class NewsReaderDetailFragment extends Fragment {
@Override
public void onSwiped(final RecyclerView.ViewHolder viewHolder, final int direction) {
- final NewsListRecyclerAdapter adapter = (NewsListRecyclerAdapter) recyclerView.getAdapter();
+ final NewsListRecyclerAdapter adapter = (NewsListRecyclerAdapter) binding.list.getAdapter();
String swipeAction;
if (direction == ItemTouchHelper.LEFT)
@@ -643,14 +632,14 @@ public class NewsReaderDetailFragment extends Fragment {
break;
}
// Hack to reset view, see https://code.google.com/p/android/issues/detail?id=175798
- recyclerView.removeView(viewHolder.itemView);
+ binding.list.removeView(viewHolder.itemView);
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
- // swipeRefresh cancels swiping left/right when accidentally moving in the y direction;
- swipeRefresh.setEnabled(!isCurrentlyActive);
+ // binding.swipeRefresh cancels swiping left/right when accidentally moving in the y direction;
+ binding.swipeRefresh.setEnabled(!isCurrentlyActive);
if (isCurrentlyActive) {
Rect viewRect = new Rect();
viewHolder.itemView.getDrawingRect(viewRect);
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java
index 3f7a2b19..7d6feae7 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java
@@ -44,17 +44,14 @@ import android.widget.SearchView;
import android.widget.Toast;
import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AlertDialog;
-import androidx.appcompat.widget.Toolbar;
import androidx.browser.customtabs.CustomTabsIntent;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.view.GravityCompat;
import androidx.customview.widget.ViewDragHelper;
-import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
@@ -89,8 +86,6 @@ import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import javax.inject.Named;
-import butterknife.BindView;
-import butterknife.ButterKnife;
import de.luhmer.owncloudnewsreader.ListView.SubscriptionExpandableListAdapter;
import de.luhmer.owncloudnewsreader.adapter.NewsListRecyclerAdapter;
import de.luhmer.owncloudnewsreader.adapter.RecyclerItemClickListener;
@@ -99,6 +94,7 @@ import de.luhmer.owncloudnewsreader.authentication.AccountGeneral;
import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm;
import de.luhmer.owncloudnewsreader.database.model.Feed;
import de.luhmer.owncloudnewsreader.database.model.RssItem;
+import de.luhmer.owncloudnewsreader.databinding.ActivityNewsreaderBinding;
import de.luhmer.owncloudnewsreader.events.podcast.FeedPanelSlideEvent;
import de.luhmer.owncloudnewsreader.helper.DatabaseUtils;
import de.luhmer.owncloudnewsreader.helper.ThemeChooser;
@@ -111,6 +107,7 @@ import de.luhmer.owncloudnewsreader.services.events.SyncFailedEvent;
import de.luhmer.owncloudnewsreader.services.events.SyncFinishedEvent;
import de.luhmer.owncloudnewsreader.services.events.SyncStartedEvent;
import de.luhmer.owncloudnewsreader.ssl.OkHttpSSLClient;
+import de.luhmer.owncloudnewsreader.view.PodcastSlidingUpPanelLayout;
import io.reactivex.Completable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Action;
@@ -147,12 +144,10 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements
private static MenuItem menuItemDownloadMoreItems;
- protected @BindView(R.id.toolbar) Toolbar toolbar;
+ protected ActivityNewsreaderBinding binding;
//private ServiceConnection mConnection = null;
- @VisibleForTesting @Nullable @BindView(R.id.drawer_layout) public DrawerLayout drawerLayout;
-
private ActionBarDrawerToggle drawerToggle;
private SearchView mSearchView;
private String mSearchString;
@@ -183,13 +178,13 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements
PreferenceManager.setDefaultValues(this, sharedPreferencesFileName, Context.MODE_PRIVATE, R.xml.pref_notification, true);
}
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_newsreader);
+ super.onCreate(savedInstanceState);
- ButterKnife.bind(this);
+ binding = ActivityNewsreaderBinding.inflate(getLayoutInflater());
+ setContentView(binding.getRoot());
- if (toolbar != null) {
- setSupportActionBar(toolbar);
+ if (binding.toolbarLayout.toolbar != null) {
+ setSupportActionBar(binding.toolbarLayout.toolbar);
}
initAccountManager();
@@ -212,8 +207,8 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements
.replace(R.id.left_drawer, newsReaderListFragment)
.commit();
- if (drawerLayout != null) {
- drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.news_list_drawer_text, R.string.news_list_drawer_text) {
+ if (binding.drawerLayout != null) {
+ drawerToggle = new ActionBarDrawerToggle(this, binding.drawerLayout, binding.toolbarLayout.toolbar, R.string.news_list_drawer_text, R.string.news_list_drawer_text) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
@@ -233,11 +228,11 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements
}
};
- drawerLayout.addDrawerListener(drawerToggle);
+ binding.drawerLayout.addDrawerListener(drawerToggle);
adjustEdgeSizeOfDrawer();
}
- setSupportActionBar(toolbar);
+ setSupportActionBar(binding.toolbarLayout.toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
if (drawerToggle != null) {
drawerToggle.syncState();
@@ -332,7 +327,7 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements
savedInstanceState.containsKey(IS_FOLDER_BOOLEAN) &&
savedInstanceState.containsKey(OPTIONAL_FOLDER_ID)) {
- NewsListRecyclerAdapter adapter = new NewsListRecyclerAdapter(this, getNewsReaderDetailFragment().recyclerView, this, mPostDelayHandler, mPrefs);
+ NewsListRecyclerAdapter adapter = new NewsListRecyclerAdapter(this, getNewsReaderDetailFragment().binding.list, this, mPostDelayHandler, mPrefs);
adapter.setTotalItemCount(savedInstanceState.getInt(LIST_ADAPTER_TOTAL_COUNT));
adapter.setCachedPages(savedInstanceState.getInt(LIST_ADAPTER_PAGE_COUNT));
@@ -358,9 +353,9 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements
try {
// increase the size of the drag margin to prevent starting a star swipe when
// trying to open the drawer.
- Field mDragger = drawerLayout.getClass().getDeclaredField("mLeftDragger");
+ Field mDragger = binding.drawerLayout.getClass().getDeclaredField("mLeftDragger");
mDragger.setAccessible(true);
- ViewDragHelper draggerObj = (ViewDragHelper) mDragger.get(drawerLayout);
+ ViewDragHelper draggerObj = (ViewDragHelper) mDragger.get(binding.drawerLayout);
Field mEdgeSize = draggerObj.getClass().getDeclaredField("mEdgeSize");
mEdgeSize.setAccessible(true);
int edge = mEdgeSize.getInt(draggerObj);
@@ -372,9 +367,9 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements
public int getEdgeSizeOfDrawer() {
try {
- Field mDragger = drawerLayout.getClass().getDeclaredField("mLeftDragger");
+ Field mDragger = binding.drawerLayout.getClass().getDeclaredField("mLeftDragger");
mDragger.setAccessible(true);
- ViewDragHelper draggerObj = (ViewDragHelper) mDragger.get(drawerLayout);
+ ViewDragHelper draggerObj = (ViewDragHelper) mDragger.get(binding.drawerLayout);
Field mEdgeSize = draggerObj.getClass().getDeclaredField("mEdgeSize");
mEdgeSize.setAccessible(true);
return mEdgeSize.getInt(draggerObj);
@@ -501,9 +496,9 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements
config.setDelay(300); // half second between each showcase view
MaterialShowcaseSequence sequence = new MaterialShowcaseSequence(this, "SWIPE_LEFT_RIGHT_AND_PTR");
sequence.setConfig(config);
- sequence.addSequenceItem(getNewsReaderDetailFragment().pbLoading,
+ sequence.addSequenceItem(getNewsReaderDetailFragment().binding.pbLoading,
"Pull-to-Refresh to sync with server", "GOT IT", true);
- sequence.addSequenceItem(getNewsReaderDetailFragment().pbLoading,
+ sequence.addSequenceItem(getNewsReaderDetailFragment().binding.pbLoading,
"Swipe Left/Right to mark article as read", "GOT IT", true);
sequence.start();
@@ -551,6 +546,11 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements
}
@Override
+ protected PodcastSlidingUpPanelLayout getPodcastSlidingUpPanelLayout() {
+ return binding.slidingLayout;
+ }
+
+ @Override
public void onRefresh() {
startSync();
}
@@ -574,16 +574,16 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements
*/
@Override
public void onTopItemClicked(long idFeed, boolean isFolder, Long optional_folder_id) {
- if (drawerLayout != null)
- drawerLayout.closeDrawer(GravityCompat.START);
+ if (binding.drawerLayout != null)
+ binding.drawerLayout.closeDrawer(GravityCompat.START);
updateDetailFragment(idFeed, isFolder, optional_folder_id, true);
}
@Override
public void onChildItemClicked(long idFeed, Long optional_folder_id) {
- if (drawerLayout != null)
- drawerLayout.closeDrawer(GravityCompat.START);
+ if (binding.drawerLayout != null)
+ binding.drawerLayout.closeDrawer(GravityCompat.START);
updateDetailFragment(idFeed, false, optional_folder_id, true);
}
@@ -704,7 +704,7 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements
if(newsReaderListFragment != null && newsReaderDetailFragment != null) {
boolean isSyncRunning = OwnCloudSyncService.isSyncRunning();
newsReaderListFragment.setRefreshing(isSyncRunning);
- newsReaderDetailFragment.swipeRefresh.setRefreshing(isSyncRunning);
+ newsReaderDetailFragment.binding.swipeRefresh.setRefreshing(isSyncRunning);
}
}
@@ -771,11 +771,11 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements
@Override
public void onBackPressed() {
if(!handlePodcastBackPressed()) {
- if (drawerLayout != null) {
- if (drawerLayout.isDrawerOpen(GravityCompat.START))
+ if (binding.drawerLayout != null) {
+ if (binding.drawerLayout.isDrawerOpen(GravityCompat.START))
super.onBackPressed();
else
- drawerLayout.openDrawer(GravityCompat.START);
+ binding.drawerLayout.openDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListDialogFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListDialogFragment.java
index 7d384616..62c71275 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListDialogFragment.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListDialogFragment.java
@@ -12,12 +12,6 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.ListView;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
import android.widget.Toast;
import androidx.fragment.app.DialogFragment;
@@ -29,11 +23,10 @@ import java.util.Map;
import javax.inject.Inject;
-import butterknife.BindView;
-import butterknife.ButterKnife;
import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm;
import de.luhmer.owncloudnewsreader.database.model.Feed;
import de.luhmer.owncloudnewsreader.database.model.Folder;
+import de.luhmer.owncloudnewsreader.databinding.FragmentDialogFeedoptionsBinding;
import de.luhmer.owncloudnewsreader.di.ApiProvider;
import de.luhmer.owncloudnewsreader.helper.FavIconHandler;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -55,26 +48,7 @@ public class NewsReaderListDialogFragment extends DialogFragment {
private LinkedHashMap<String, MenuAction> mMenuItems;
private NewsReaderListActivity parentActivity;
- protected @BindView(R.id.lv_menu_list) ListView mListView;
- protected @BindView(R.id.folder_list) ListView mFolderList;
-
- protected @BindView(R.id.tv_menu_title) TextView tvTitle;
- protected @BindView(R.id.tv_menu_text) TextView tvText;
-
- protected @BindView(R.id.ic_menu_feedicon) ImageView imgTitle;
-
- protected @BindView(R.id.remove_feed_dialog) RelativeLayout mRemoveFeedDialogView;
- protected @BindView(R.id.rename_feed_dialog) RelativeLayout mRenameFeedDialogView;
- protected @BindView(R.id.move_feed_dialog) RelativeLayout mMoveFeedDialogView;
-
- protected @BindView(R.id.progressView) RelativeLayout mProgressView;
-
- protected @BindView(R.id.button_remove_confirm) Button mButtonRemoveConfirm;
- protected @BindView(R.id.button_remove_cancel) Button mButtonRemoveCancel;
- protected @BindView(R.id.button_rename_confirm) Button mButtonRenameConfirm;
- protected @BindView(R.id.button_rename_cancel) Button mButtonRenameCancel;
-
- protected @BindView(R.id.renamefeed_feedname) EditText mFeedName;
+ protected FragmentDialogFeedoptionsBinding binding;
static NewsReaderListDialogFragment newInstance(long feedId, String dialogTitle, String iconurl, String feedurl) {
@@ -131,17 +105,15 @@ public class NewsReaderListDialogFragment extends DialogFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- View v = inflater.inflate(R.layout.fragment_dialog_feedoptions, container, false);
-
- ButterKnife.bind(this, v);
+ binding = FragmentDialogFeedoptionsBinding.inflate(inflater, container, false);
FavIconHandler favIconHandler = new FavIconHandler(getContext());
- favIconHandler.loadFavIconForFeed(mDialogIconUrl, imgTitle);
+ favIconHandler.loadFavIconForFeed(mDialogIconUrl, binding.icMenuFeedicon);
- tvTitle.setText(mDialogTitle);
- tvText.setText(mDialogText);
+ binding.tvMenuTitle.setText(mDialogTitle);
+ binding.tvMenuText.setText(mDialogText);
- tvText.setOnClickListener(new View.OnClickListener() {
+ binding.tvMenuText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mDialogText != null) {
@@ -159,9 +131,9 @@ public class NewsReaderListDialogFragment extends DialogFragment {
R.layout.fragment_dialog_listviewitem,
menuItemsList);
- mListView.setAdapter(arrayAdapter);
+ binding.lvMenuList.setAdapter(arrayAdapter);
- mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ binding.lvMenuList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String key = arrayAdapter.getItem(i);
@@ -169,7 +141,7 @@ public class NewsReaderListDialogFragment extends DialogFragment {
mAction.execute();
}
});
- return v;
+ return binding.getRoot();
}
@@ -182,24 +154,24 @@ public class NewsReaderListDialogFragment extends DialogFragment {
public void showProgress(final boolean show) {
int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);
- mRenameFeedDialogView.setVisibility(show ? View.GONE : View.VISIBLE);
- mRemoveFeedDialogView.setVisibility(show ? View.GONE : View.VISIBLE);
+ binding.renameFeedDialog.setVisibility(show ? View.GONE : View.VISIBLE);
+ binding.removeFeedDialog.setVisibility(show ? View.GONE : View.VISIBLE);
- mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
- mProgressView.animate().setDuration(shortAnimTime).alpha(
+ binding.progressView.setVisibility(show ? View.VISIBLE : View.GONE);
+ binding.progressView.animate().setDuration(shortAnimTime).alpha(
show ? 1 : 0).setListener(new AnimatorListenerAdapter() {
});
}
private void showRenameFeedView(final long feedId, final String feedName) {
- mFeedName.setText(feedName);
- mButtonRenameConfirm.setEnabled(false);
+ binding.renamefeedFeedname.setText(feedName);
+ binding.buttonRenameConfirm.setEnabled(false);
- mListView.setVisibility(View.GONE);
- mRenameFeedDialogView.setVisibility(View.VISIBLE);
+ binding.lvMenuList.setVisibility(View.GONE);
+ binding.renameFeedDialog.setVisibility(View.VISIBLE);
- mFeedName.addTextChangedListener(new TextWatcher() {
+ binding.renamefeedFeedname.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@@ -211,20 +183,20 @@ public class NewsReaderListDialogFragment extends DialogFragment {
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.toString().equals(feedName) || s.length() == 0) {
- mButtonRenameConfirm.setEnabled(false);
+ binding.buttonRenameConfirm.setEnabled(false);
} else {
- mButtonRenameConfirm.setEnabled(true);
+ binding.buttonRenameConfirm.setEnabled(true);
}
}
});
- mButtonRenameCancel.setOnClickListener(new View.OnClickListener() {
+ binding.buttonRenameCancel.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dismiss();
}
});
- mButtonRenameConfirm.setOnClickListener(new View.OnClickListener() {
+ binding.buttonRenameConfirm.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showProgress(true);
setCancelable(false);
@@ -232,7 +204,7 @@ public class NewsReaderListDialogFragment extends DialogFragment {
Map<String, String> paramMap = new LinkedHashMap<>();
- paramMap.put("feedTitle", mFeedName.getText().toString());
+ paramMap.put("feedTitle", binding.renamefeedFeedname.getText().toString());
mApi.getNewsAPI().renameFeed(feedId, paramMap)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
@@ -240,7 +212,7 @@ public class NewsReaderListDialogFragment extends DialogFragment {
@Override
public void run() throws Exception {
DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(getContext());
- dbConn.renameFeedById(mFeedId, mFeedName.getText().toString());
+ dbConn.renameFeedById(mFeedId, binding.renamefeedFeedname.getText().toString());
parentActivity.getSlidingListFragment().reloadAdapter();
parentActivity.startSync();
@@ -260,16 +232,16 @@ public class NewsReaderListDialogFragment extends DialogFragment {
private void showRemoveFeedView(final long feedId) {
- mListView.setVisibility(View.GONE);
- mRemoveFeedDialogView.setVisibility(View.VISIBLE);
+ binding.lvMenuList.setVisibility(View.GONE);
+ binding.removeFeedDialog.setVisibility(View.VISIBLE);
- mButtonRemoveCancel.setOnClickListener(new View.OnClickListener() {
+ binding.buttonRemoveCancel.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dismiss();
}
});
- mButtonRemoveConfirm.setOnClickListener(new View.OnClickListener() {
+ binding.buttonRemoveConfirm.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showProgress(true);
setCancelable(false);
@@ -311,10 +283,10 @@ public class NewsReaderListDialogFragment extends DialogFragment {
* @param mFeedId Feed to move
*/
private void showMoveFeedView(final long mFeedId) {
- mListView.setVisibility(View.GONE);
- mMoveFeedDialogView.setVisibility(View.VISIBLE);
+ binding.lvMenuList.setVisibility(View.GONE);
+ binding.moveFeedDialog.setVisibility(View.VISIBLE);
- tvText.setText(getString(R.string.feed_move_list_description));
+ binding.tvMenuText.setText(getString(R.string.feed_move_list_description));
DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(getContext());
final List<Folder> folders = dbConn.getListOfFolders();
@@ -326,8 +298,8 @@ public class NewsReaderListDialogFragment extends DialogFragment {
}
ArrayAdapter<String> folderAdapter = new ArrayAdapter<> (getActivity(), R.layout.dialog_list_folder, android.R.id.text1, folderNames);
- mFolderList.setAdapter(folderAdapter);
- mFolderList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ binding.folderList.setAdapter(folderAdapter);
+ binding.folderList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final Folder folder = folders.get(position);
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java
index dd11c4bf..13733a71 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java
@@ -55,10 +55,9 @@ import java.io.Serializable;
import javax.inject.Inject;
-import butterknife.BindView;
-import butterknife.ButterKnife;
import de.luhmer.owncloudnewsreader.ListView.SubscriptionExpandableListAdapter;
import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm;
+import de.luhmer.owncloudnewsreader.databinding.FragmentNewsreaderListBinding;
import de.luhmer.owncloudnewsreader.di.ApiProvider;
import de.luhmer.owncloudnewsreader.interfaces.ExpListTextClicked;
import de.luhmer.owncloudnewsreader.model.AbstractItem;
@@ -90,12 +89,13 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM
private SubscriptionExpandableListAdapter lvAdapter;
- @BindView(R.id.expandableListView) protected ExpandableListView eListView;
- @BindView(R.id.urlTextView) protected TextView urlTextView;
- @BindView(R.id.userTextView) protected TextView userTextView;
- @BindView(R.id.header_view) protected ViewGroup headerView;
- @BindView(R.id.header_logo) protected ImageView headerLogo;
- @BindView(R.id.header_logo_progress) protected View headerLogoProgress;
+ protected FragmentNewsreaderListBinding binding;
+// @BindView(R.id.expandableListView) protected ExpandableListView eListView;
+// @BindView(R.id.urlTextView) protected TextView urlTextView;
+// @BindView(R.id.userTextView) protected TextView userTextView;
+// @BindView(R.id.header_view) protected ViewGroup headerView;
+// @BindView(R.id.header_logo) protected ImageView headerLogo;
+// @BindView(R.id.header_logo_progress) protected View headerLogoProgress;
/**
* The fragment's current callback object, which is notified of list item
@@ -118,12 +118,12 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM
public void setRefreshing(boolean isRefreshing) {
if(isRefreshing) {
//headerLogo.setImageResource(R.drawable.ic_launcher_background);
- headerLogo.setVisibility(View.INVISIBLE);
- headerLogoProgress.setVisibility(View.VISIBLE);
+ binding.headerLogo.setVisibility(View.INVISIBLE);
+ binding.headerLogoProgress.setVisibility(View.VISIBLE);
} else {
//headerLogo.setImageResource(R.drawable.ic_launcher);
- headerLogo.setVisibility(View.VISIBLE);
- headerLogoProgress.setVisibility(View.INVISIBLE);
+ binding.headerLogo.setVisibility(View.VISIBLE);
+ binding.headerLogoProgress.setVisibility(View.INVISIBLE);
}
}
@@ -158,25 +158,23 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment_newsreader_list, container, false);
-
- ButterKnife.bind(this, view);
+ binding = FragmentNewsreaderListBinding.inflate(requireActivity().getLayoutInflater(), container, false);
loadOwncloudOrNextcloudBanner();
- lvAdapter = new SubscriptionExpandableListAdapter(getActivity(), new DatabaseConnectionOrm(getActivity()), eListView, mPrefs);
+ lvAdapter = new SubscriptionExpandableListAdapter(getActivity(), new DatabaseConnectionOrm(getActivity()), binding.expandableListView, mPrefs);
lvAdapter.setHandlerListener(expListTextClickedListener);
- eListView.setGroupIndicator(null);
+ binding.expandableListView.setGroupIndicator(null);
- eListView.setOnChildClickListener(onChildClickListener);
- eListView.setOnItemLongClickListener(onItemLongClickListener);
+ binding.expandableListView.setOnChildClickListener(onChildClickListener);
+ binding.expandableListView.setOnItemLongClickListener(onItemLongClickListener);
- eListView.setClickable(true);
- eListView.setLongClickable(true);
- eListView.setAdapter(lvAdapter);
+ binding.expandableListView.setClickable(true);
+ binding.expandableListView.setLongClickable(true);
+ binding.expandableListView.setAdapter(lvAdapter);
- headerView.setOnClickListener(new View.OnClickListener() {
+ binding.headerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((NewsReaderListActivity) getActivity()).startSync();
@@ -186,9 +184,9 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM
lvAdapter.notifyDataSetChanged();
reloadAdapter();
- bindNavigationMenu(view, inflater);
+ bindNavigationMenu(binding.getRoot(), inflater);
- return view;
+ return binding.getRoot();
}
@Override
@@ -214,7 +212,7 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM
protected void loadOwncloudOrNextcloudBanner() {
if(!Constants.isNextCloud(mPrefs)) {
// Set ownCloud view
- headerView.setBackgroundResource(R.drawable.left_drawer_header_background);
+ binding.headerView.setBackgroundResource(R.drawable.left_drawer_header_background);
}
}
@@ -321,13 +319,13 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM
public ExpandableListView getListView() {
- return eListView;
+ return binding.expandableListView;
}
protected void showTapLogoToSyncShowcaseView() {
new MaterialShowcaseView.Builder(getActivity())
- .setTarget(headerLogo)
+ .setTarget(binding.headerLogo)
.setDismissText("GOT IT")
.setContentText("Tap this logo to sync with server")
.setDelay(300) // optional but starting animations immediately in onCreate can make them choppy
@@ -392,8 +390,8 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM
String mOc_root_path = mPrefs.getString(SettingsActivity.EDT_OWNCLOUDROOTPATH_STRING, null);
String mOc_root_path_without_protocol = mOc_root_path.replace("http://", "").replace("https://", ""); //Remove http:// or https://
- userTextView.setText(mUsername);
- urlTextView.setText(mOc_root_path_without_protocol);
+ binding.userTextView.setText(mUsername);
+ binding.urlTextView.setText(mOc_root_path_without_protocol);
String uInfo = mPrefs.getString(USER_INFO_STRING, null);
if(uInfo == null) {
@@ -403,7 +401,7 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM
try {
OcsUser userInfo = (OcsUser) fromString(uInfo);
if (userInfo.getDisplayName() != null)
- userTextView.setText(userInfo.getDisplayName());
+ binding.userTextView.setText(userInfo.getDisplayName());
final int placeHolder = R.mipmap.ic_launcher;
DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder()
.displayer(new CircleBitmapDisplayer())
@@ -416,7 +414,7 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM
if(userInfo.getId() != null) {
String avatarUrl = mOc_root_path + "/index.php/avatar/" + Uri.encode(userInfo.getId()) + "/64";
- ImageLoader.getInstance().displayImage(avatarUrl, this.headerLogo, displayImageOptions);
+ ImageLoader.getInstance().displayImage(avatarUrl, binding.headerLogo, displayImageOptions);
}
} catch (Exception ex) {
ex.printStackTrace();
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java
index b91185d6..037d1882 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java
@@ -24,17 +24,8 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
-import android.widget.FrameLayout;
-import android.widget.ImageButton;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.ListView;
import android.widget.NumberPicker;
-import android.widget.ProgressBar;
-import android.widget.RelativeLayout;
import android.widget.SeekBar;
-import android.widget.TextView;
-import android.widget.ViewSwitcher;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
@@ -49,11 +40,9 @@ import java.util.Arrays;
import java.util.Locale;
import androidx.fragment.app.Fragment;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
import de.luhmer.owncloudnewsreader.ListView.PodcastArrayAdapter;
import de.luhmer.owncloudnewsreader.ListView.PodcastFeedArrayAdapter;
+import de.luhmer.owncloudnewsreader.databinding.FragmentPodcastBinding;
import de.luhmer.owncloudnewsreader.events.podcast.CollapsePodcastView;
import de.luhmer.owncloudnewsreader.events.podcast.ExpandPodcastView;
import de.luhmer.owncloudnewsreader.events.podcast.SpeedPodcast;
@@ -90,33 +79,7 @@ public class PodcastFragment extends Fragment {
private long currentPositionInMillis = 0;
private long maxPositionInMillis = 100000;
- protected @BindView(R.id.btn_playPausePodcast) ImageButton btnPlayPausePodcast;
- protected @BindView(R.id.btn_playPausePodcastSlider) ImageButton btnPlayPausePodcastSlider;
- protected @BindView(R.id.btn_nextPodcastSlider) ImageButton btnNextPodcastSlider;
- protected @BindView(R.id.btn_previousPodcastSlider) ImageButton btnPreviousPodcastSlider;
- protected @BindView(R.id.btn_podcastSpeed) ImageButton btnPlaybackSpeed;
-
- protected @BindView(R.id.img_feed_favicon) ImageView imgFavIcon;
-
- protected @BindView(R.id.tv_title) TextView tvTitle;
- protected @BindView(R.id.tv_titleSlider) TextView tvTitleSlider;
-
- protected @BindView(R.id.tv_from) TextView tvFrom;
- protected @BindView(R.id.tv_to) TextView tvTo;
- protected @BindView(R.id.tv_fromSlider) TextView tvFromSlider;
- protected @BindView(R.id.tv_ToSlider) TextView tvToSlider;
-
- protected @BindView(R.id.sb_progress) SeekBar sb_progress;
- protected @BindView(R.id.pb_progress) ProgressBar pb_progress;
- protected @BindView(R.id.pb_progress2) ProgressBar pb_progress2;
-
- protected @BindView(R.id.podcastFeedList) ListView /* CardGridView CardListView*/ podcastFeedList;
- protected @BindView(R.id.rlPodcast) RelativeLayout rlPodcast;
- protected @BindView(R.id.ll_podcast_header) LinearLayout rlPodcastHeader;
- protected @BindView(R.id.fl_playPausePodcastWrapper) FrameLayout playPausePodcastWrapper;
- protected @BindView(R.id.podcastTitleGrid) ListView /*CardGridView*/ podcastTitleGrid;
-
- protected @BindView(R.id.viewSwitcherProgress) ViewSwitcher /*CardGridView*/ viewSwitcherProgress;
+ protected FragmentPodcastBinding binding;
/**
* Use this factory method to create a new instance of
@@ -206,9 +169,9 @@ public class PodcastFragment extends Fragment {
@Subscribe
public void onEvent(PodcastDownloadService.DownloadProgressUpdate downloadProgress) {
- PodcastArrayAdapter podcastArrayAdapter = (PodcastArrayAdapter) podcastTitleGrid.getAdapter();
+ PodcastArrayAdapter podcastArrayAdapter = (PodcastArrayAdapter) binding.podcastTitleGrid.getAdapter();
- for(int i = 0; i < podcastTitleGrid.getCount(); i++) {
+ for(int i = 0; i < binding.podcastTitleGrid.getCount(); i++) {
if(podcastArrayAdapter.getItem(i).link.equals(downloadProgress.podcast.link)) {
if(!podcastArrayAdapter.getItem(i).downloadProgress.equals(downloadProgress.podcast.downloadProgress)) { //If Progress changed
@@ -220,7 +183,7 @@ public class PodcastFragment extends Fragment {
pItem.offlineCached = file.exists();
} else
pItem.downloadProgress = downloadProgress.podcast.downloadProgress;
- podcastTitleGrid.invalidateViews();
+ binding.podcastTitleGrid.invalidateViews();
}
return;
@@ -228,29 +191,24 @@ public class PodcastFragment extends Fragment {
}
}
- @OnClick(R.id.fl_playPausePodcastWrapper)
protected void playPause() {
eventBus.post(new TogglePlayerStateEvent());
}
- @OnClick(R.id.btn_playPausePodcastSlider)
protected void playPauseSlider() {
playPause();
}
- @OnClick(R.id.btn_nextPodcastSlider)
protected void windForward() {
eventBus.post(new WindPodcast(30000));
//Toast.makeText(getActivity(), "This feature is not supported yet :(", Toast.LENGTH_SHORT).show();
}
- @OnClick(R.id.btn_previousPodcastSlider)
protected void windBack() {
eventBus.post(new WindPodcast(-10000));
}
- @OnClick(R.id.btn_podcastSpeed)
protected void openSpeedMenu() {
showPlaybackSpeedPicker();
}
@@ -263,18 +221,23 @@ public class PodcastFragment extends Fragment {
//LayoutInflater localInflater = inflater.cloneInContext(context);
// inflate using the cloned inflater, not the passed in default
//View view = localInflater.inflate(R.layout.fragment_podcast, container, false);
- View view = inflater.inflate(R.layout.fragment_podcast, container, false);
+ binding = FragmentPodcastBinding.inflate(inflater, container, false);
+
+ binding.flPlayPausePodcastWrapper.setOnClickListener((v) -> playPause());
+ binding.btnPlayPausePodcastSlider.setOnClickListener((v) -> playPauseSlider());
+ binding.btnNextPodcastSlider.setOnClickListener((v) -> windForward());
+ binding.btnPreviousPodcastSlider.setOnClickListener((v) -> windBack());
+ binding.btnPodcastSpeed.setOnClickListener((v) -> openSpeedMenu());
//View view = inflater.inflate(R.layout.fragment_podcast, container, false);
- ButterKnife.bind(this, view);
if(getActivity() instanceof PodcastFragmentActivity) {
sliding_layout = ((PodcastFragmentActivity) getActivity()).getSlidingLayout();
}
if(sliding_layout != null) {
- sliding_layout.setSlideableView(rlPodcast);
- sliding_layout.setDragView(rlPodcastHeader);
+ sliding_layout.setSlideableView(binding.rlPodcast);
+ sliding_layout.setDragView(binding.llPodcastHeader);
//sliding_layout.setEnableDragViewTouchEvents(true);
sliding_layout.setPanelSlideListener(onPanelSlideListener);
@@ -283,15 +246,15 @@ public class PodcastFragment extends Fragment {
PodcastFeedArrayAdapter mArrayAdapter = new PodcastFeedArrayAdapter(getActivity(), new PodcastFeedItem[0]);
if(mArrayAdapter.getCount() > 0) {
- view.findViewById(R.id.tv_no_podcasts_available).setVisibility(View.GONE);
+ binding.tvNoPodcastsAvailable.setVisibility(View.GONE);
}
- podcastTitleGrid.setVisibility(View.GONE);
- podcastFeedList.setVisibility(View.VISIBLE);
+ binding.podcastTitleGrid.setVisibility(View.GONE);
+ binding.podcastFeedList.setVisibility(View.VISIBLE);
- sb_progress.setOnSeekBarChangeListener(onSeekBarChangeListener);
+ binding.sbProgress.setOnSeekBarChangeListener(onSeekBarChangeListener);
- return view;
+ return binding.getRoot();
}
@@ -303,15 +266,15 @@ public class PodcastFragment extends Fragment {
@Override
public void onPanelCollapsed(View view) {
if(sliding_layout != null)
- sliding_layout.setDragView(rlPodcastHeader);
- viewSwitcherProgress.setDisplayedChild(0);
+ sliding_layout.setDragView(binding.llPodcastHeader);
+ binding.viewSwitcherProgress.setDisplayedChild(0);
}
@Override
public void onPanelExpanded(View view) {
if(sliding_layout != null)
- sliding_layout.setDragView(viewSwitcherProgress);
- viewSwitcherProgress.setDisplayedChild(1);
+ sliding_layout.setDragView(binding.viewSwitcherProgress);
+ binding.viewSwitcherProgress.setDisplayedChild(1);
}
@Override public void onPanelAnchored(View view) { }
@@ -409,19 +372,19 @@ public class PodcastFragment extends Fragment {
}
private MediaControllerCompat.Callback controllerCallback =
- new MediaControllerCompat.Callback() {
- @Override
- public void onMetadataChanged(MediaMetadataCompat metadata) {
- Log.v(TAG, "onMetadataChanged() called with: metadata = [" + metadata + "]");
- displayMetadata(metadata);
- }
+ new MediaControllerCompat.Callback() {
+ @Override
+ public void onMetadataChanged(MediaMetadataCompat metadata) {
+ Log.v(TAG, "onMetadataChanged() called with: metadata = [" + metadata + "]");
+ displayMetadata(metadata);
+ }
- @Override
- public void onPlaybackStateChanged(PlaybackStateCompat stateCompat) {
- Log.v(TAG, "onPlaybackStateChanged() called with: state = [" + stateCompat + "]");
- displayPlaybackState(stateCompat);
- }
- };
+ @Override
+ public void onPlaybackStateChanged(PlaybackStateCompat stateCompat) {
+ Log.v(TAG, "onPlaybackStateChanged() called with: state = [" + stateCompat + "]");
+ displayPlaybackState(stateCompat);
+ }
+ };
private void displayMetadata(MediaMetadataCompat metadata) {
@@ -430,8 +393,8 @@ public class PodcastFragment extends Fragment {
if(author != null) {
title += " - " + author;
}
- tvTitle.setText(title);
- tvTitleSlider.setText(title);
+ binding.tvTitle.setText(title);
+ binding.tvTitleSlider.setText(title);
String favIconUrl = metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI);
if(favIconUrl != null) {
@@ -441,7 +404,7 @@ public class PodcastFragment extends Fragment {
showImageForEmptyUri(R.drawable.default_feed_icon_light).
showImageOnFail(R.drawable.default_feed_icon_light).
build();
- ImageLoader.getInstance().displayImage(favIconUrl, imgFavIcon, displayImageOptions);
+ ImageLoader.getInstance().displayImage(favIconUrl, binding.imgFeedFavicon, displayImageOptions);
}
PlaybackService.VideoType mediaType = PlaybackService.VideoType.valueOf(metadata.getString(CURRENT_PODCAST_MEDIA_TYPE));
@@ -482,9 +445,9 @@ public class PodcastFragment extends Fragment {
// If attached to context..
if(mActivity != null) {
- btnPlayPausePodcast.setImageResource(drawableId);
- btnPlayPausePodcast.setContentDescription(getString(contentDescriptionId));
- btnPlayPausePodcastSlider.setImageResource(drawableId);
+ binding.btnPlayPausePodcast.setImageResource(drawableId);
+ binding.btnPlayPausePodcast.setContentDescription(getString(contentDescriptionId));
+ binding.btnPlayPausePodcastSlider.setImageResource(drawableId);
}
currentPositionInMillis = stateCompat.getPosition();
@@ -497,32 +460,32 @@ public class PodcastFragment extends Fragment {
int minutes = (int)(currentPositionInMillis % (1000*60*60)) / (1000*60);
int seconds = (int) ((currentPositionInMillis % (1000*60*60)) % (1000*60) / 1000);
minutes += hours * 60;
- tvFrom.setText(String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
- tvFromSlider.setText(String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
+ binding.tvFrom.setText(String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
+ binding.tvFromSlider.setText(String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
hours = (int)(maxPositionInMillis / (1000*60*60));
minutes = (int)(maxPositionInMillis % (1000*60*60)) / (1000*60);
seconds = (int) ((maxPositionInMillis % (1000*60*60)) % (1000*60) / 1000);
minutes += hours * 60;
- tvTo.setText(String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
- tvToSlider.setText(String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
+ binding.tvTo.setText(String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
+ binding.tvToSlider.setText(String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
if(state == PlaybackStateCompat.STATE_CONNECTING) {
- sb_progress.setVisibility(View.INVISIBLE);
- pb_progress2.setVisibility(View.VISIBLE);
+ binding.sbProgress.setVisibility(View.INVISIBLE);
+ binding.pbProgress2.setVisibility(View.VISIBLE);
- pb_progress.setIndeterminate(true);
+ binding.pbProgress.setIndeterminate(true);
} else {
double progress = ((double) currentPositionInMillis / (double) maxPositionInMillis) * 100d;
if(!blockSeekbarUpdate) {
- sb_progress.setVisibility(View.VISIBLE);
- pb_progress2.setVisibility(View.INVISIBLE);
- sb_progress.setProgress((int) progress);
+ binding.sbProgress.setVisibility(View.VISIBLE);
+ binding.pbProgress2.setVisibility(View.INVISIBLE);
+ binding.sbProgress.setProgress((int) progress);
}
- pb_progress.setIndeterminate(false);
- pb_progress.setProgress((int) progress);
+ binding.pbProgress.setIndeterminate(false);
+ binding.pbProgress.setProgress((int) progress);
}
}
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java
index d189ea7c..4c264e0c 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java
@@ -23,14 +23,11 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import java.io.File;
-import java.lang.reflect.Proxy;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.inject.Inject;
-import butterknife.BindView;
-import butterknife.ButterKnife;
import de.luhmer.owncloudnewsreader.ListView.SubscriptionExpandableListAdapter;
import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm;
import de.luhmer.owncloudnewsreader.database.model.RssItem;
@@ -52,7 +49,7 @@ import de.luhmer.owncloudnewsreader.widget.WidgetProvider;
import static de.luhmer.owncloudnewsreader.Constants.MIN_NEXTCLOUD_FILES_APP_VERSION_CODE;
-public class PodcastFragmentActivity extends AppCompatActivity implements IPlayPausePodcastClicked {
+public abstract class PodcastFragmentActivity extends AppCompatActivity implements IPlayPausePodcastClicked {
private static final String TAG = PodcastFragmentActivity.class.getCanonicalName();
@@ -64,11 +61,6 @@ public class PodcastFragmentActivity extends AppCompatActivity implements IPlayP
private EventBus eventBus;
private PodcastFragment mPodcastFragment;
- @BindView(R.id.sliding_layout)
- protected PodcastSlidingUpPanelLayout sliding_layout;
-
-
-
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
//Log.v(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
@@ -94,8 +86,6 @@ public class PodcastFragmentActivity extends AppCompatActivity implements IPlayP
eventBus = EventBus.getDefault();
- ButterKnife.bind(this);
-
updatePodcastView();
}
@@ -125,7 +115,7 @@ public class PodcastFragmentActivity extends AppCompatActivity implements IPlayP
if (hasWindowFocus) {
int currentOrientation = getResources().getConfiguration().orientation;
if (currentOrientation != lastOrientation) {
- sliding_layout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
+ getPodcastSlidingUpPanelLayout().setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
lastOrientation = currentOrientation;
}
}
@@ -210,12 +200,12 @@ public class PodcastFragmentActivity extends AppCompatActivity implements IPlayP
*/
public PodcastSlidingUpPanelLayout getSlidingLayout() {
- return sliding_layout;
+ return getPodcastSlidingUpPanelLayout();
}
public boolean handlePodcastBackPressed() {
- if(mPodcastFragment != null && sliding_layout.getPanelState().equals(SlidingUpPanelLayout.PanelState.EXPANDED)) {
- sliding_layout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
+ if(mPodcastFragment != null && getPodcastSlidingUpPanelLayout().getPanelState().equals(SlidingUpPanelLayout.PanelState.EXPANDED)) {
+ getPodcastSlidingUpPanelLayout().setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
return true;
}
return false;
@@ -253,17 +243,17 @@ public class PodcastFragmentActivity extends AppCompatActivity implements IPlayP
private void collapsePodcastView() {
- sliding_layout.setPanelHeight(0);
+ getPodcastSlidingUpPanelLayout().setPanelHeight(0);
}
private void expandPodcastView() {
- sliding_layout.setPanelHeight((int) dipToPx(68));
+ getPodcastSlidingUpPanelLayout().setPanelHeight((int) dipToPx(68));
}
@Subscribe
public void onEvent(PodcastCompletedEvent podcastCompletedEvent) {
collapsePodcastView();
- sliding_layout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
+ getPodcastSlidingUpPanelLayout().setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
//currentlyPlaying = false;
}
@@ -353,4 +343,6 @@ public class PodcastFragmentActivity extends AppCompatActivity implements IPlayP
}
return videoId;
}
+
+ protected abstract PodcastSlidingUpPanelLayout getPodcastSlidingUpPanelLayout();
}
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SyncIntervalSelectorActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SyncIntervalSelectorActivity.java
index 6b55e3ec..3a363d7b 100644
--- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SyncIntervalSelectorActivity.java
+++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SyncIntervalSelectorActivity.java
@@ -16,14 +16,12 @@ import android.widget.ListView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import javax.inject.Inject;
-import butterknife.BindView;
-import butterknife.ButterKnife;
import de.luhmer.owncloudnewsreader.authentication.AccountGeneral;
+import de.luhmer.owncloudnewsreader.databinding.ActivitySyncIntervalSelectorBinding;
import de.luhmer.owncloudnewsreader.helper.ThemeChooser;
@@ -31,7 +29,7 @@ public class SyncIntervalSelectorActivity extends AppCompatActivity {
private PlaceholderFragment mFragment;
private String[] items_values;
- protected @BindView(R.id.toolbar) Toolbar toolbar;
+ protected ActivitySyncIntervalSelectorBinding binding;
protected @Inject SharedPreferences mPrefs;
@Override
@@ -42,12 +40,11 @@ public class SyncIntervalSelectorActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
ThemeChooser.afterOnCreate(this);
- setContentView(R.layout.activity_sync_interval_selector);
+ binding = ActivitySyncIntervalSelectorBinding.inflate(getLayoutInflater());
+ setContentView(binding.getRoot());
- ButterKnife.bind(this);
-
- if (toolbar != null) {
- setSupportActionBar(toolbar);
+ if (binding.toolbarLayout.toolbar != null) {
+ setSupportActionBar(binding.toolbarLayout.toolbar);
}
items_values = getResources().getStringArray(R.array.array_sync_interval_values);