Migration from databinding to viewbinding

This commit is contained in:
Shinokuni 2020-07-13 19:23:02 +02:00
parent c968c53441
commit 2bc5438348
31 changed files with 1009 additions and 1013 deletions

View File

@ -47,7 +47,7 @@ android {
} }
buildFeatures { buildFeatures {
dataBinding = true viewBinding true
} }
} }

View File

@ -11,7 +11,6 @@ import android.widget.LinearLayout;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
@ -19,11 +18,11 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.readrops.app.R; import com.readrops.app.R;
import com.readrops.app.adapters.AccountTypeListAdapter; import com.readrops.app.adapters.AccountTypeListAdapter;
import com.readrops.readropsdb.entities.account.Account;
import com.readrops.readropsdb.entities.account.AccountType;
import com.readrops.app.databinding.ActivityAccountTypeListBinding; import com.readrops.app.databinding.ActivityAccountTypeListBinding;
import com.readrops.app.utils.Utils; import com.readrops.app.utils.Utils;
import com.readrops.app.viewmodels.AccountViewModel; import com.readrops.app.viewmodels.AccountViewModel;
import com.readrops.readropsdb.entities.account.Account;
import com.readrops.readropsdb.entities.account.AccountType;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -52,7 +51,9 @@ public class AccountTypeListActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_account_type_list); binding = ActivityAccountTypeListBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
viewModel = ViewModelProviders.of(this).get(AccountViewModel.class); viewModel = ViewModelProviders.of(this).get(AccountViewModel.class);
setTitle(R.string.new_account); setTitle(R.string.new_account);

View File

@ -8,16 +8,15 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import com.readrops.app.R; import com.readrops.app.R;
import com.readrops.readropsdb.entities.account.Account;
import com.readrops.readropsdb.entities.account.AccountType;
import com.readrops.app.databinding.ActivityAddAccountBinding; import com.readrops.app.databinding.ActivityAddAccountBinding;
import com.readrops.app.utils.SharedPreferencesManager; import com.readrops.app.utils.SharedPreferencesManager;
import com.readrops.app.utils.Utils; import com.readrops.app.utils.Utils;
import com.readrops.app.viewmodels.AccountViewModel; import com.readrops.app.viewmodels.AccountViewModel;
import com.readrops.readropsdb.entities.account.Account;
import com.readrops.readropsdb.entities.account.AccountType;
import io.reactivex.Completable; import io.reactivex.Completable;
import io.reactivex.CompletableObserver; import io.reactivex.CompletableObserver;
@ -44,7 +43,9 @@ public class AddAccountActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_add_account); binding = ActivityAddAccountBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
viewModel = ViewModelProviders.of(this).get(AccountViewModel.class); viewModel = ViewModelProviders.of(this).get(AccountViewModel.class);
accountType = getIntent().getParcelableExtra(ACCOUNT_TYPE); accountType = getIntent().getParcelableExtra(ACCOUNT_TYPE);

View File

@ -12,7 +12,6 @@ import android.view.View;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.ItemTouchHelper;
@ -63,7 +62,9 @@ public class AddFeedActivity extends AppCompatActivity implements View.OnClickLi
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_add_feed);
binding = ActivityAddFeedBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
binding.addFeedLoad.setOnClickListener(this); binding.addFeedLoad.setOnClickListener(this);
binding.addFeedOk.setOnClickListener(this); binding.addFeedOk.setOnClickListener(this);

View File

@ -6,7 +6,6 @@ import android.view.MenuItem;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter; import androidx.fragment.app.FragmentPagerAdapter;
@ -14,13 +13,13 @@ import androidx.lifecycle.ViewModelProviders;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.readrops.app.R; import com.readrops.app.R;
import com.readrops.readropsdb.entities.Folder;
import com.readrops.readropsdb.entities.account.Account;
import com.readrops.app.databinding.ActivityManageFeedsFoldersBinding; import com.readrops.app.databinding.ActivityManageFeedsFoldersBinding;
import com.readrops.app.fragments.FeedsFragment; import com.readrops.app.fragments.FeedsFragment;
import com.readrops.app.fragments.FoldersFragment; import com.readrops.app.fragments.FoldersFragment;
import com.readrops.app.utils.Utils; import com.readrops.app.utils.Utils;
import com.readrops.app.viewmodels.ManageFeedsFoldersViewModel; import com.readrops.app.viewmodels.ManageFeedsFoldersViewModel;
import com.readrops.readropsdb.entities.Folder;
import com.readrops.readropsdb.entities.account.Account;
import com.readrops.readropslibrary.utils.ConflictException; import com.readrops.readropslibrary.utils.ConflictException;
import com.readrops.readropslibrary.utils.UnknownFormatException; import com.readrops.readropslibrary.utils.UnknownFormatException;
@ -31,7 +30,6 @@ import static com.readrops.app.utils.ReadropsKeys.ACCOUNT;
public class ManageFeedsFoldersActivity extends AppCompatActivity { public class ManageFeedsFoldersActivity extends AppCompatActivity {
private ActivityManageFeedsFoldersBinding binding; private ActivityManageFeedsFoldersBinding binding;
private ManageFeedsFoldersViewModel viewModel; private ManageFeedsFoldersViewModel viewModel;
@ -41,7 +39,9 @@ public class ManageFeedsFoldersActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_manage_feeds_folders); binding = ActivityManageFeedsFoldersBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.manageFeedsFoldersToolbar); setSupportActionBar(binding.manageFeedsFoldersToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);

View File

@ -5,7 +5,6 @@ import android.os.Bundle
import android.view.MenuItem import android.view.MenuItem
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
@ -34,7 +33,8 @@ class NotificationPermissionActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_notification_permission) binding = ActivityNotificationPermissionBinding.inflate(layoutInflater)
setContentView(binding.root)
setTitle(R.string.notifications) setTitle(R.string.notifications)
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)

View File

@ -47,5 +47,12 @@ public class SplashActivity extends AppCompatActivity {
} }
}); });
/*PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(SyncWorker.class, 15, TimeUnit.MINUTES)
.addTag(SyncWorker.Companion.getTAG())
.build();
WorkManager.getInstance(this).enqueueUniquePeriodicWork(SyncWorker.Companion.getTAG(), ExistingPeriodicWorkPolicy.REPLACE, request);*/
} }
} }

View File

@ -2,22 +2,22 @@ package com.readrops.app.activities
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.PorterDuff
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.webkit.* import android.webkit.*
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.databinding.DataBindingUtil
import com.readrops.app.R import com.readrops.app.R
import com.readrops.app.databinding.ActivityWebViewBinding import com.readrops.app.databinding.ActivityWebViewBinding
import com.readrops.app.utils.ReadropsKeys
import com.readrops.app.utils.ReadropsKeys.ACTION_BAR_COLOR import com.readrops.app.utils.ReadropsKeys.ACTION_BAR_COLOR
import com.readrops.app.utils.ReadropsKeys.WEB_URL
class WebViewActivity : AppCompatActivity() { class WebViewActivity : AppCompatActivity() {
@ -25,21 +25,26 @@ class WebViewActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_web_view) binding = ActivityWebViewBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.activityWebViewToolbar) setSupportActionBar(binding.activityWebViewToolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
title = "" title = ""
val actionBarColor = intent.getIntExtra(ACTION_BAR_COLOR, ContextCompat.getColor(this, R.color.colorPrimary)) val actionBarColor = intent.getIntExtra(ACTION_BAR_COLOR, ContextCompat.getColor(this, R.color.colorPrimary))
supportActionBar?.setBackgroundDrawable(ColorDrawable(actionBarColor)) supportActionBar?.setBackgroundDrawable(ColorDrawable(actionBarColor))
setWebViewSettings() setWebViewSettings()
binding.activityWebViewSwipe.setOnRefreshListener { binding.webView.reload() } with(binding) {
binding.activityWebViewProgress.indeterminateDrawable.setColorFilter(actionBarColor, PorterDuff.Mode.SRC_IN) activityWebViewSwipe.setOnRefreshListener { binding.webView.reload() }
binding.activityWebViewProgress.max = 100 activityWebViewProgress.progressTintList = ColorStateList.valueOf(actionBarColor)
activityWebViewProgress.max = 100
val url: String = intent.getStringExtra(ReadropsKeys.WEB_URL)!!
webView.loadUrl(url)
}
val url: String = intent.getStringExtra(WEB_URL)
binding.webView.loadUrl(url)
} }
@SuppressLint("SetJavaScriptEnabled") @SuppressLint("SetJavaScriptEnabled")
@ -56,9 +61,11 @@ class WebViewActivity : AppCompatActivity() {
} }
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
binding.activityWebViewSwipe.isRefreshing = false with(binding) {
binding.activityWebViewProgress.progress = 0 activityWebViewSwipe.isRefreshing = false
binding.activityWebViewProgress.visibility = View.VISIBLE activityWebViewProgress.progress = 0
activityWebViewProgress.visibility = View.VISIBLE
}
super.onPageStarted(view, url, favicon) super.onPageStarted(view, url, favicon)
} }
@ -73,9 +80,11 @@ class WebViewActivity : AppCompatActivity() {
} }
override fun onProgressChanged(view: WebView?, newProgress: Int) { override fun onProgressChanged(view: WebView?, newProgress: Int) {
binding.activityWebViewProgress.progress = newProgress with(binding) {
if (newProgress == 100) activityWebViewProgress.progress = newProgress
binding.activityWebViewProgress.visibility = View.GONE if (newProgress == 100) activityWebViewProgress.visibility = View.GONE
}
super.onProgressChanged(view, newProgress) super.onProgressChanged(view, newProgress)
} }
@ -106,13 +115,15 @@ class WebViewActivity : AppCompatActivity() {
} }
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item!!)
} }
private fun shareLink() { private fun shareLink() {
val intent = Intent(Intent.ACTION_SEND) val intent = Intent(Intent.ACTION_SEND).apply {
intent.type = "text/plain" type = "text/plain"
intent.putExtra(Intent.EXTRA_TEXT, binding.webView.url.toString()) putExtra(Intent.EXTRA_TEXT, binding.webView.url.toString())
}
startActivity(Intent.createChooser(intent, getString(R.string.share_url))) startActivity(Intent.createChooser(intent, getString(R.string.share_url)))
} }

View File

@ -20,11 +20,8 @@ public class AccountArrayAdapter extends ArrayAdapter<Account> {
public AccountArrayAdapter(@NonNull Context context, @NonNull List<Account> objects) { public AccountArrayAdapter(@NonNull Context context, @NonNull List<Account> objects) {
super(context, 0, objects); super(context, 0, objects);
} }
@Override @Override
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
return createItemView(position, convertView, parent); return createItemView(position, convertView, parent);
@ -46,8 +43,8 @@ public class AccountArrayAdapter extends ArrayAdapter<Account> {
ImageView accountIcon = convertView.findViewById(R.id.account_type_logo); ImageView accountIcon = convertView.findViewById(R.id.account_type_logo);
TextView accountName = convertView.findViewById(R.id.account_type_name); TextView accountName = convertView.findViewById(R.id.account_type_name);
accountIcon.setImageResource(account.getAccountType().getIconRes()); accountIcon.setImageResource(account.getAccountType().getIconRes());
accountName.setText(account.getAccountType().getName()); accountName.setText(account.getAccountType().getName());
return convertView; return convertView;
} }

View File

@ -4,12 +4,10 @@ import android.view.LayoutInflater;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.readrops.app.R;
import com.readrops.readropsdb.entities.account.AccountType;
import com.readrops.app.databinding.AccountTypeItemBinding; import com.readrops.app.databinding.AccountTypeItemBinding;
import com.readrops.readropsdb.entities.account.AccountType;
import java.util.List; import java.util.List;
@ -25,8 +23,8 @@ public class AccountTypeListAdapter extends RecyclerView.Adapter<AccountTypeList
@NonNull @NonNull
@Override @Override
public AccountTypeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public AccountTypeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
AccountTypeItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), AccountTypeItemBinding binding = AccountTypeItemBinding.inflate(LayoutInflater.from(parent.getContext()),
R.layout.account_type_item, parent, false); parent, false);
return new AccountTypeViewHolder(binding); return new AccountTypeViewHolder(binding);
} }

View File

@ -6,15 +6,14 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListAdapter; import androidx.recyclerview.widget.ListAdapter;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.readrops.app.R; import com.readrops.app.R;
import com.readrops.app.databinding.FolderLayoutBinding;
import com.readrops.readropsdb.entities.Folder; import com.readrops.readropsdb.entities.Folder;
import com.readrops.readropsdb.pojo.FolderWithFeedCount; import com.readrops.readropsdb.pojo.FolderWithFeedCount;
import com.readrops.app.databinding.FolderLayoutBinding;
import java.util.List; import java.util.List;
@ -55,8 +54,8 @@ public class FoldersAdapter extends ListAdapter<FolderWithFeedCount, FoldersAdap
@NonNull @NonNull
@Override @Override
public FolderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public FolderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
FolderLayoutBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), FolderLayoutBinding binding = FolderLayoutBinding.inflate(LayoutInflater.from(parent.getContext()),
R.layout.folder_layout, parent, false); parent, false);
return new FolderViewHolder(binding); return new FolderViewHolder(binding);
} }

View File

@ -2,14 +2,12 @@ package com.readrops.app.adapters
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.readrops.app.R import com.readrops.app.R
import com.readrops.app.databinding.NotificationPermissionLayoutBinding import com.readrops.app.databinding.NotificationPermissionLayoutBinding
import com.readrops.app.databinding.NotificationPermissionLayoutBindingImpl
import com.readrops.app.utils.GlideApp import com.readrops.app.utils.GlideApp
import com.readrops.readropsdb.entities.Feed import com.readrops.readropsdb.entities.Feed
@ -17,8 +15,7 @@ class NotificationPermissionListAdapter(var enableAll: Boolean, val listener: (f
ListAdapter<Feed, NotificationPermissionListAdapter.NotificationPermissionViewHolder>(DIFF_CALLBACK) { ListAdapter<Feed, NotificationPermissionListAdapter.NotificationPermissionViewHolder>(DIFF_CALLBACK) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NotificationPermissionViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NotificationPermissionViewHolder {
val binding = DataBindingUtil.inflate<NotificationPermissionLayoutBinding>(LayoutInflater.from(parent.context), val binding = NotificationPermissionLayoutBinding.inflate(LayoutInflater.from(parent.context))
R.layout.notification_permission_layout, parent, false)
return NotificationPermissionViewHolder(binding) return NotificationPermissionViewHolder(binding)
} }

View File

@ -6,19 +6,19 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.readrops.app.R
import com.readrops.readropsdb.entities.account.Account
import com.readrops.readropsdb.pojo.FeedWithFolder
import com.readrops.app.databinding.FeedOptionsLayoutBinding import com.readrops.app.databinding.FeedOptionsLayoutBinding
import com.readrops.app.utils.ReadropsKeys.ACCOUNT import com.readrops.app.utils.ReadropsKeys.ACCOUNT
import com.readrops.readropsdb.entities.account.Account
import com.readrops.readropsdb.pojo.FeedWithFolder
class FeedOptionsDialogFragment : BottomSheetDialogFragment() { class FeedOptionsDialogFragment : BottomSheetDialogFragment() {
private lateinit var feedWithFolder: FeedWithFolder private lateinit var feedWithFolder: FeedWithFolder
private lateinit var account: Account private lateinit var account: Account
private lateinit var binding: FeedOptionsLayoutBinding
private var _binding: FeedOptionsLayoutBinding? = null
private val binding get() = _binding!!
companion object { companion object {
const val FEED_KEY = "FEED_KEY" const val FEED_KEY = "FEED_KEY"
@ -43,7 +43,7 @@ class FeedOptionsDialogFragment : BottomSheetDialogFragment() {
} }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.feed_options_layout, container, false) _binding = FeedOptionsLayoutBinding.inflate(inflater, container, false)
return binding.root return binding.root
} }
@ -58,6 +58,11 @@ class FeedOptionsDialogFragment : BottomSheetDialogFragment() {
binding.feedOptionsDeleteLayout.setOnClickListener { deleteFeed() } binding.feedOptionsDeleteLayout.setOnClickListener { deleteFeed() }
} }
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun openEditFeedDialog() { private fun openEditFeedDialog() {
dismiss() dismiss()
val editFeedDialogFragment = EditFeedDialogFragment.newInstance(feedWithFolder, account) val editFeedDialogFragment = EditFeedDialogFragment.newInstance(feedWithFolder, account)

View File

@ -16,13 +16,13 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.readrops.app.R; import com.readrops.app.R;
import com.readrops.app.adapters.FeedsAdapter; import com.readrops.app.adapters.FeedsAdapter;
import com.readrops.readropsdb.entities.Feed;
import com.readrops.readropsdb.entities.account.Account;
import com.readrops.readropsdb.pojo.FeedWithFolder;
import com.readrops.app.databinding.FragmentFeedsBinding; import com.readrops.app.databinding.FragmentFeedsBinding;
import com.readrops.app.utils.SharedPreferencesManager; import com.readrops.app.utils.SharedPreferencesManager;
import com.readrops.app.utils.Utils; import com.readrops.app.utils.Utils;
import com.readrops.app.viewmodels.ManageFeedsFoldersViewModel; import com.readrops.app.viewmodels.ManageFeedsFoldersViewModel;
import com.readrops.readropsdb.entities.Feed;
import com.readrops.readropsdb.entities.account.Account;
import com.readrops.readropsdb.pojo.FeedWithFolder;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.observers.DisposableCompletableObserver; import io.reactivex.observers.DisposableCompletableObserver;
@ -81,7 +81,7 @@ public class FeedsFragment extends Fragment {
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
binding = FragmentFeedsBinding.inflate(inflater); binding = FragmentFeedsBinding.inflate(inflater, container, false);
return binding.getRoot(); return binding.getRoot();
} }
@ -107,6 +107,12 @@ public class FeedsFragment extends Fragment {
binding.feedsRecyclerview.setAdapter(adapter); binding.feedsRecyclerview.setAdapter(adapter);
} }
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
public void deleteFeed(Feed feed) { public void deleteFeed(Feed feed) {
new MaterialDialog.Builder(getContext()) new MaterialDialog.Builder(getContext())
.title(R.string.delete_feed) .title(R.string.delete_feed)

View File

@ -4,16 +4,51 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.readrops.app.R
import com.readrops.readropsdb.entities.Folder
import com.readrops.app.databinding.FolderOptionsLayoutBinding import com.readrops.app.databinding.FolderOptionsLayoutBinding
import com.readrops.readropsdb.entities.Folder
class FolderOptionsDialogFragment : BottomSheetDialogFragment() { class FolderOptionsDialogFragment : BottomSheetDialogFragment() {
private lateinit var folder: Folder private lateinit var folder: Folder
private lateinit var foldersOptionsLayoutBinding: FolderOptionsLayoutBinding
private var _binding: FolderOptionsLayoutBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
folder = arguments?.getParcelable(FOLDER_KEY)!!
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = FolderOptionsLayoutBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.folderOptionsTitle.text = folder.name
binding.folderOptionsEdit.setOnClickListener { openEditFolderDialog() }
binding.folderOptionsDelete.setOnClickListener { deleteFolder() }
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun openEditFolderDialog() {
dismiss()
(parentFragment as FoldersFragment).editFolder(folder)
}
private fun deleteFolder() {
dismiss()
(parentFragment as FoldersFragment).deleteFolder(folder)
}
companion object { companion object {
const val FOLDER_KEY = "FOLDER_KEY" const val FOLDER_KEY = "FOLDER_KEY"
@ -28,34 +63,4 @@ class FolderOptionsDialogFragment : BottomSheetDialogFragment() {
return fragment return fragment
} }
} }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
folder = arguments?.getParcelable(FOLDER_KEY)!!
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
foldersOptionsLayoutBinding = DataBindingUtil.inflate(inflater, R.layout.folder_options_layout, container, false)
return foldersOptionsLayoutBinding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
foldersOptionsLayoutBinding.folderOptionsTitle.text = folder.name
foldersOptionsLayoutBinding.folderOptionsEdit.setOnClickListener { openEditFolderDialog() }
foldersOptionsLayoutBinding.folderOptionsDelete.setOnClickListener { deleteFolder() }
}
private fun openEditFolderDialog() {
dismiss()
(parentFragment as FoldersFragment).editFolder(folder)
}
private fun deleteFolder() {
dismiss()
(parentFragment as FoldersFragment).deleteFolder(folder)
}
} }

View File

@ -9,7 +9,6 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
@ -17,12 +16,12 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.readrops.app.R; import com.readrops.app.R;
import com.readrops.app.adapters.FoldersAdapter; import com.readrops.app.adapters.FoldersAdapter;
import com.readrops.readropsdb.entities.Folder;
import com.readrops.readropsdb.entities.account.Account;
import com.readrops.app.databinding.FragmentFoldersBinding; import com.readrops.app.databinding.FragmentFoldersBinding;
import com.readrops.app.utils.SharedPreferencesManager; import com.readrops.app.utils.SharedPreferencesManager;
import com.readrops.app.utils.Utils; import com.readrops.app.utils.Utils;
import com.readrops.app.viewmodels.ManageFeedsFoldersViewModel; import com.readrops.app.viewmodels.ManageFeedsFoldersViewModel;
import com.readrops.readropsdb.entities.Folder;
import com.readrops.readropsdb.entities.account.Account;
import com.readrops.readropslibrary.utils.ConflictException; import com.readrops.readropslibrary.utils.ConflictException;
import com.readrops.readropslibrary.utils.UnknownFormatException; import com.readrops.readropslibrary.utils.UnknownFormatException;
@ -101,7 +100,7 @@ public class FoldersFragment extends Fragment {
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_folders, container, false); binding = FragmentFoldersBinding.inflate(inflater, container, false);
return binding.getRoot(); return binding.getRoot();
} }

View File

@ -1,30 +1,28 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<RelativeLayout <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:padding="8dp">
<ImageView
android:id="@+id/account_type_logo"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentStart="true"
tools:src="@drawable/ic_nextcloud_news" />
<TextView
android:id="@+id/account_type_name"
style="@style/TextAppearance.AppCompat.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground" android:layout_centerInParent="true"
android:padding="8dp"> android:layout_marginStart="12dp"
android:layout_toEndOf="@id/account_type_logo"
tools:text="@string/nextcloud_news" />
<ImageView </RelativeLayout>
android:id="@+id/account_type_logo"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentStart="true"
tools:src="@drawable/ic_nextcloud_news" />
<TextView
android:id="@+id/account_type_name"
style="@style/TextAppearance.AppCompat.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginStart="12dp"
android:layout_toEndOf="@id/account_type_logo"
tools:text="@string/nextcloud_news" />
</RelativeLayout>
</layout>

View File

@ -1,81 +1,79 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.AccountTypeListActivity"> tools:context=".activities.AccountTypeListActivity">
<androidx.core.widget.NestedScrollView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/account_type_list_root"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout <TextView
android:id="@+id/account_type_list_root" android:id="@+id/account_type_list_app_name"
style="@style/TextAppearance.AppCompat.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/app_name"
android:textSize="60sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/account_type_list_choose"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:text="@string/choose_account"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/account_type_list_app_name" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/account_type_recyclerview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="wrap_content"
android:layout_marginStart="80dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="80dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/account_type_list_choose"
tools:itemCount="4"
tools:listitem="@layout/account_type_item" />
<TextView <TextView
android:id="@+id/account_type_list_app_name" android:id="@+id/account_type_or"
style="@style/TextAppearance.AppCompat.Large" style="@style/TextAppearance.AppCompat.Large"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="40dp" android:layout_marginTop="12dp"
android:ellipsize="end" android:text="@string/or"
android:maxLines="1" app:layout_constraintEnd_toEndOf="parent"
android:text="@string/app_name" app:layout_constraintStart_toStartOf="parent"
android:textSize="60sp" app:layout_constraintTop_toBottomOf="@+id/account_type_recyclerview" />
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView <Button
android:id="@+id/account_type_list_choose" android:id="@+id/account_type_opml_import"
style="@style/TextAppearance.AppCompat.Subhead" style="@style/GenericButton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="40dp" android:onClick="openOPMLFile"
android:text="@string/choose_account" android:text="@string/opml_import"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/account_type_list_app_name" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/account_type_or" />
<androidx.recyclerview.widget.RecyclerView </androidx.constraintlayout.widget.ConstraintLayout>
android:id="@+id/account_type_recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="80dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="80dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/account_type_list_choose"
tools:itemCount="4"
tools:listitem="@layout/account_type_item" />
<TextView </androidx.core.widget.NestedScrollView>
android:id="@+id/account_type_or"
style="@style/TextAppearance.AppCompat.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/or"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/account_type_recyclerview" />
<Button
android:id="@+id/account_type_opml_import"
style="@style/GenericButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/opml_import"
android:onClick="openOPMLFile"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/account_type_or" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</layout>

View File

@ -1,132 +1,130 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.AddAccountActivity"> tools:context=".activities.AddAccountActivity">
<androidx.core.widget.NestedScrollView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/add_account_root"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout <ImageView
android:id="@+id/add_account_root" android:id="@+id/provider_image"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="60dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_nextcloud_news" />
<RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:padding="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/provider_name">
<ImageView <Button
android:id="@+id/provider_image" android:id="@+id/add_account_validate"
android:layout_width="80dp" style="@style/GenericButton"
android:layout_height="80dp"
android:layout_marginTop="60dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_nextcloud_news" />
<RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="48dp" android:layout_below="@id/add_account_password_layout"
android:padding="16dp" android:layout_marginTop="12dp"
app:layout_constraintEnd_toEndOf="parent" android:onClick="createAccount"
app:layout_constraintStart_toStartOf="parent" android:text="@string/validate" />
app:layout_constraintTop_toBottomOf="@id/provider_name">
<Button <ProgressBar
android:id="@+id/add_account_validate" android:id="@+id/add_account_loading"
style="@style/GenericButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/add_account_password_layout"
android:layout_marginTop="12dp"
android:onClick="createAccount"
android:text="@string/validate" />
<ProgressBar
android:id="@+id/add_account_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/add_account_validate"
android:layout_centerInParent="true"
android:visibility="gone"
tools:visibility="visible" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/add_account_login_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/add_account_name_layout"
android:layout_marginTop="12dp"
android:hint="@string/login">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/add_account_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/add_account_password_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/add_account_login_layout"
android:layout_marginTop="12dp"
android:hint="@string/password"
app:passwordToggleEnabled="true"
app:passwordToggleTintMode="src_atop">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/add_account_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/add_account_url_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/account_url">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/add_account_url"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/add_account_name_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/add_account_url_layout"
android:layout_marginTop="12dp"
android:hint="@string/account_name">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/add_account_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
</RelativeLayout>
<TextView
android:id="@+id/provider_name"
style="@style/TextAppearance.AppCompat.Large"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_below="@id/add_account_validate"
app:layout_constraintEnd_toEndOf="parent" android:layout_centerInParent="true"
app:layout_constraintStart_toStartOf="parent" android:visibility="gone"
app:layout_constraintTop_toBottomOf="@+id/provider_image" tools:visibility="visible" />
tools:text="@string/nextcloud_news" />
</androidx.constraintlayout.widget.ConstraintLayout> <com.google.android.material.textfield.TextInputLayout
android:id="@+id/add_account_login_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/add_account_name_layout"
android:layout_marginTop="12dp"
android:hint="@string/login">
</androidx.core.widget.NestedScrollView> <com.google.android.material.textfield.TextInputEditText
android:id="@+id/add_account_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/add_account_password_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/add_account_login_layout"
android:layout_marginTop="12dp"
android:hint="@string/password"
app:passwordToggleEnabled="true"
app:passwordToggleTintMode="src_atop">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/add_account_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/add_account_url_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/account_url">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/add_account_url"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/add_account_name_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/add_account_url_layout"
android:layout_marginTop="12dp"
android:hint="@string/account_name">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/add_account_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
</RelativeLayout>
<TextView
android:id="@+id/provider_name"
style="@style/TextAppearance.AppCompat.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/provider_image"
tools:text="@string/nextcloud_news" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</layout>

View File

@ -1,167 +1,165 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/add_feed_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.AddFeedActivity"> tools:context=".activities.AddFeedActivity">
<androidx.core.widget.NestedScrollView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/add_feed_root"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:animateLayoutChanges="true">
<Spinner
android:id="@+id/add_feed_account_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:listitem="@layout/account_type_item" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/add_feed_main_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:padding="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/add_feed_account_spinner">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/add_feed_input_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toStartOf="@id/add_feed_load"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/add_feed_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableEnd="@drawable/ic_cancel_grey"
android:hint="@string/feed_url"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/add_feed_load"
style="@style/GenericButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginTop="4dp"
android:text="@string/load"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/add_feed_input_layout"
app:layout_constraintTop_toTopOf="parent" />
<ProgressBar
android:id="@+id/add_feed_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/add_feed_input_layout"
tools:visibility="gone" />
<TextView
android:id="@+id/add_feed_loading_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/add_feed_input_layout"
tools:text="No feed found"
tools:visibility="visible" />
<TextView
android:id="@+id/add_feed_results_text_view"
style="@style/TextAppearance.Design.Hint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/results"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/add_feed_loading"
tools:visibility="visible" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/add_feed_results"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/add_feed_results_text_view"
tools:itemCount="2"
tools:listitem="@layout/add_feed_item"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:animateLayoutChanges="true"> android:paddingStart="16dp"
android:paddingEnd="16dp"
app:layout_constraintTop_toBottomOf="@id/add_feed_main_layout">
<Spinner <Button
android:id="@+id/add_feed_account_spinner" android:id="@+id/add_feed_ok"
style="@style/GenericButton"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:enabled="true"
android:text="@string/validate"
android:textColor="@color/generic_button_color_selector"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.6"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ProgressBar
android:id="@+id/add_feed_insert_progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toBottomOf="@+id/add_feed_ok"
tools:listitem="@layout/account_type_item" /> tools:visibility="gone" />
<androidx.constraintlayout.widget.ConstraintLayout <androidx.recyclerview.widget.RecyclerView
android:id="@+id/add_feed_main_layout" android:id="@+id/add_feed_inserted_results_recyclerview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:animateLayoutChanges="true" android:layout_marginTop="8dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.6"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/add_feed_account_spinner" app:layout_constraintTop_toBottomOf="@+id/add_feed_insert_progressbar"
android:padding="16dp"> tools:itemCount="2"
tools:listitem="@layout/feed_insertion_result"
<com.google.android.material.textfield.TextInputLayout tools:visibility="visible" />
android:id="@+id/add_feed_input_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@id/add_feed_load">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/add_feed_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableEnd="@drawable/ic_cancel_grey"
android:hint="@string/feed_url"
android:inputType="text"/>
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/add_feed_load"
style="@style/GenericButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginStart="6dp"
android:text="@string/load"
app:layout_constraintStart_toEndOf="@id/add_feed_input_layout"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<ProgressBar
android:id="@+id/add_feed_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/add_feed_input_layout"
tools:visibility="gone" />
<TextView
android:id="@+id/add_feed_loading_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/add_feed_input_layout"
tools:visibility="visible"
tools:text="No feed found" />
<TextView
android:id="@+id/add_feed_results_text_view"
style="@style/TextAppearance.Design.Hint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/results"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/add_feed_loading"
tools:visibility="visible" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/add_feed_results"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/add_feed_results_text_view"
tools:visibility="visible"
tools:listitem="@layout/add_feed_item"
tools:itemCount="2"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toBottomOf="@id/add_feed_main_layout"
android:paddingStart="16dp"
android:paddingEnd="16dp">
<Button
android:id="@+id/add_feed_ok"
style="@style/GenericButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="true"
android:text="@string/validate"
android:textColor="@color/generic_button_color_selector"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.6"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ProgressBar
android:id="@+id/add_feed_insert_progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/add_feed_ok"
tools:visibility="gone" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/add_feed_inserted_results_recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.6"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/add_feed_insert_progressbar"
tools:visibility="visible"
tools:listitem="@layout/feed_insertion_result"
tools:itemCount="2"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</layout>

View File

@ -1,41 +1,40 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
tools:context=".activities.ManageFeedsFoldersActivity"> tools:context=".activities.ManageFeedsFoldersActivity"
android:id="@+id/manage_feeds_folders_root"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.coordinatorlayout.widget.CoordinatorLayout <com.google.android.material.appbar.AppBarLayout
android:id="@+id/manage_feeds_folders_root"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<com.google.android.material.appbar.AppBarLayout <androidx.appcompat.widget.Toolbar
android:id="@+id/manage_feeds_folders_toolbar"
style="@style/ToolbarTheme"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> app:layout_scrollFlags="scroll|enterAlways" />
<androidx.appcompat.widget.Toolbar <com.google.android.material.tabs.TabLayout
android:id="@+id/manage_feeds_folders_toolbar" android:id="@+id/manage_feeds_folders_tablayout"
style="@style/ToolbarTheme"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/manage_feeds_folders_tablayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:tabIndicator="@drawable/tab_indicator"
app:tabIndicatorColor="@android:color/white"
app:tabIndicatorHeight="4dp" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/manage_feeds_folders_viewpager"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" /> app:tabIndicator="@drawable/tab_indicator"
app:tabIndicatorColor="@android:color/white"
app:tabIndicatorHeight="4dp" />
</androidx.coordinatorlayout.widget.CoordinatorLayout> </com.google.android.material.appbar.AppBarLayout>
</layout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/manage_feeds_folders_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -1,87 +1,85 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.readrops.app.activities.NotificationPermissionActivity"> tools:context="com.readrops.app.activities.NotificationPermissionActivity">
<androidx.core.widget.NestedScrollView <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout <RelativeLayout
android:id="@+id/notif_permission_account_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="wrap_content"
android:background="@color/md_white_1000"
android:padding="12dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<RelativeLayout <TextView
android:id="@+id/notif_permission_account_layout" android:id="@+id/notif_permission_account"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginEnd="8dp"
android:layout_toStartOf="@id/notif_permission_account_switch"
android:text="@string/enable_notifications" />
<Switch
android:id="@+id/notif_permission_account_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/md_white_1000" android:layout_below="@id/notif_permission_account_switch"
android:padding="12dp" android:layout_alignParentBottom="true"
app:layout_constraintEnd_toEndOf="parent" android:paddingTop="6dp">
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView <TextView
android:id="@+id/notif_permission_account" android:id="@+id/notif_permission_feeds"
style="@style/TextAppearance.AppCompat.Subhead" style="@style/TextAppearance.AppCompat.Body1"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:layout_toStartOf="@id/notif_permission_account_switch" android:text="@string/enable_all_feeds"
android:text="@string/enable_notifications" /> app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/notif_permission_feeds_switch"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Switch <Switch
android:id="@+id/notif_permission_account_switch" android:id="@+id/notif_permission_feeds_switch"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" /> android:layout_alignParentEnd="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/notif_permission_feeds"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout </androidx.constraintlayout.widget.ConstraintLayout>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/notif_permission_account_switch"
android:layout_alignParentBottom="true"
android:paddingTop="6dp">
<TextView </RelativeLayout>
android:id="@+id/notif_permission_feeds"
style="@style/TextAppearance.AppCompat.Body1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginEnd="8dp"
android:text="@string/enable_all_feeds"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/notif_permission_feeds_switch"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Switch <androidx.recyclerview.widget.RecyclerView
android:id="@+id/notif_permission_feeds_switch" android:id="@+id/notif_permission_account_list"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" app:layout_constraintTop_toBottomOf="@id/notif_permission_account_layout"
app:layout_constraintEnd_toEndOf="parent" tools:itemCount="8"
app:layout_constraintStart_toEndOf="@id/notif_permission_feeds" tools:listitem="@layout/notification_permission_layout" />
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout> </androidx.core.widget.NestedScrollView>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/notif_permission_account_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/notif_permission_account_layout"
tools:itemCount="8"
tools:listitem="@layout/notification_permission_layout" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</layout>

View File

@ -1,60 +1,56 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
tools:context="com.readrops.app.activities.WebViewActivity"> tools:context="com.readrops.app.activities.WebViewActivity"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.coordinatorlayout.widget.CoordinatorLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<com.google.android.material.appbar.AppBarLayout <androidx.appcompat.widget.Toolbar
android:id="@+id/activity_web_view_toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> app:layout_scrollFlags="scroll|enterAlways" />
<androidx.appcompat.widget.Toolbar </com.google.android.material.appbar.AppBarLayout>
android:id="@+id/activity_web_view_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways" />
</com.google.android.material.appbar.AppBarLayout> <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/activity_web_view_swipe"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout <androidx.core.widget.NestedScrollView
android:id="@+id/activity_web_view_swipe"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<androidx.core.widget.NestedScrollView <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout <ProgressBar
android:id="@+id/activity_web_view_progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="4dp"
android:orientation="horizontal"> android:indeterminate="false" />
<ProgressBar <WebView
android:id="@+id/activity_web_view_progress" android:id="@+id/web_view"
style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent"
android:layout_width="match_parent" android:layout_height="match_parent" />
android:layout_height="4dp"
android:indeterminate="false" />
<WebView </LinearLayout>
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View File

@ -1,27 +1,25 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent" android:layout_width="match_parent"
android:gravity="center_horizontal|center_vertical" android:layout_height="match_parent"
android:orientation="vertical" android:gravity="center_horizontal|center_vertical"
tools:ignore="UseCompoundDrawables"> android:orientation="vertical"
tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
android:id="@+id/empty_list_image" android:id="@+id/empty_list_image"
android:layout_width="200dp" android:layout_width="200dp"
android:layout_height="200dp" android:layout_height="200dp"
tools:src="@drawable/ic_rss_feed_grey" /> tools:src="@drawable/ic_rss_feed_grey" />
<TextView <TextView
android:id="@+id/empty_list_text_v" android:id="@+id/empty_list_text_v"
style="@style/TextAppearance.AppCompat.Large" style="@style/TextAppearance.AppCompat.Large"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:text="@string/no_feed" /> tools:text="@string/no_feed" />
</LinearLayout> </LinearLayout>
</layout>

View File

@ -1,95 +1,93 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="16dp">
<LinearLayout
android:id="@+id/feed_options_edit_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="16dp"> android:background="?attr/selectableItemBackground"
android:clickable="true"
<LinearLayout android:focusable="true"
android:id="@+id/feed_options_edit_layout" android:orientation="horizontal"
android:layout_width="match_parent" android:paddingStart="16dp"
android:layout_height="wrap_content" android:paddingTop="8dp"
android:background="?attr/selectableItemBackground" android:paddingBottom="8dp"
android:clickable="true" app:layout_constraintStart_toStartOf="parent"
android:focusable="true" app:layout_constraintTop_toBottomOf="@id/feed_options_title">
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/feed_options_title">
<TextView
android:id="@+id/feed_edit_feed"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_edit"
android:drawablePadding="16dp"
android:text="@string/edit_feed" />
</LinearLayout>
<LinearLayout
android:id="@+id/feed_options_open_root_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/feed_options_edit_layout">
<TextView
android:id="@+id/feed_open_root"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_open_in_browser"
android:drawablePadding="16dp"
android:text="@string/open_url" />
</LinearLayout>
<LinearLayout
android:id="@+id/feed_options_delete_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/feed_options_open_root_layout">
<TextView
android:id="@+id/feed_options_delete"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_delete_grey"
android:drawablePadding="16dp"
android:text="@string/delete" />
</LinearLayout>
<TextView <TextView
android:id="@+id/feed_options_title" android:id="@+id/feed_edit_feed"
style="@style/TextAppearance.AppCompat.Small" style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="16dp" android:drawableStart="@drawable/ic_edit"
app:layout_constraintStart_toStartOf="parent" android:drawablePadding="16dp"
app:layout_constraintTop_toTopOf="parent" android:text="@string/edit_feed" />
tools:text="Feed 1" /> </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout> <LinearLayout
android:id="@+id/feed_options_open_root_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/feed_options_edit_layout">
<TextView
android:id="@+id/feed_open_root"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_open_in_browser"
android:drawablePadding="16dp"
android:text="@string/open_url" />
</LinearLayout>
<LinearLayout
android:id="@+id/feed_options_delete_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/feed_options_open_root_layout">
<TextView
android:id="@+id/feed_options_delete"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_delete_grey"
android:drawablePadding="16dp"
android:text="@string/delete" />
</LinearLayout>
<TextView
android:id="@+id/feed_options_title"
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Feed 1" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@ -1,55 +1,53 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginTop="6dp"
android:layout_marginEnd="6dp"
android:clickable="true"
android:focusable="true">
<RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_marginStart="6dp" android:background="?attr/selectableItemBackground"
android:layout_marginTop="6dp" android:paddingTop="8dp">
android:layout_marginEnd="6dp"
android:clickable="true"
android:focusable="true">
<RelativeLayout <TextView
android:id="@+id/folder_name"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="8dp"
android:layout_toStartOf="@id/folder_feeds_count"
tools:text="Folder 1" />
<TextView
android:id="@+id/folder_feeds_count"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="8dp"
tools:text="15 feeds" />
<ProgressBar
android:id="@+id/folder_progress_bar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="4dp"
android:background="?attr/selectableItemBackground" android:layout_below="@id/folder_name"
android:paddingTop="8dp"> android:layout_alignParentStart="true"
android:layout_marginTop="6dp"
android:background="@android:color/transparent"
tools:max="100"
tools:progress="50" />
<TextView </RelativeLayout>
android:id="@+id/folder_name"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="8dp"
android:layout_toStartOf="@id/folder_feeds_count"
tools:text="Folder 1" />
<TextView </androidx.cardview.widget.CardView>
android:id="@+id/folder_feeds_count"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="8dp"
tools:text="15 feeds" />
<ProgressBar
android:id="@+id/folder_progress_bar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_below="@id/folder_name"
android:layout_alignParentStart="true"
android:layout_marginTop="6dp"
android:background="@android:color/transparent"
tools:max="100"
tools:progress="50" />
</RelativeLayout>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -1,70 +1,68 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="16dp">
<LinearLayout
android:id="@+id/folder_options_edit"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="16dp"> android:background="?attr/selectableItemBackground"
android:clickable="true"
<LinearLayout android:focusable="true"
android:id="@+id/folder_options_edit" android:orientation="horizontal"
android:layout_width="match_parent" android:paddingStart="16dp"
android:layout_height="wrap_content" android:paddingTop="8dp"
android:background="?attr/selectableItemBackground" android:paddingBottom="8dp"
android:clickable="true" app:layout_constraintStart_toStartOf="parent"
android:focusable="true" app:layout_constraintTop_toBottomOf="@id/folder_options_title">
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/folder_options_title">
<TextView
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_edit_grey"
android:drawablePadding="16dp"
android:text="@string/edit_folder" />
</LinearLayout>
<LinearLayout
android:id="@+id/folder_options_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/folder_options_edit">
<TextView
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_delete_grey"
android:drawablePadding="16dp"
android:text="@string/delete" />
</LinearLayout>
<TextView <TextView
android:id="@+id/folder_options_title" style="@style/TextAppearance.AppCompat.Subhead"
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="16dp" android:drawableStart="@drawable/ic_edit_grey"
app:layout_constraintStart_toStartOf="parent" android:drawablePadding="16dp"
app:layout_constraintTop_toTopOf="parent" android:text="@string/edit_folder" />
tools:text="Folder 1" />
</androidx.constraintlayout.widget.ConstraintLayout> </LinearLayout>
<LinearLayout
android:id="@+id/folder_options_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/folder_options_edit">
<TextView
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_delete_grey"
android:drawablePadding="16dp"
android:text="@string/delete" />
</LinearLayout>
<TextView
android:id="@+id/folder_options_title"
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Folder 1" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@ -1,33 +1,31 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/feeds_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragments.FeedsFragment"> tools:context=".fragments.FeedsFragment">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.recyclerview.widget.RecyclerView
android:id="@+id/feeds_root" android:id="@+id/feeds_recyclerview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
tools:itemCount="5"
tools:listitem="@layout/feed_layout" />
<androidx.recyclerview.widget.RecyclerView <com.readrops.app.utils.EmptyListView
android:id="@+id/feeds_recyclerview" android:id="@+id/feeds_empty_list"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="wrap_content"
tools:itemCount="5" android:visibility="gone"
tools:listitem="@layout/feed_layout" /> app:image="@drawable/ic_rss_feed_grey"
app:layout_constraintBottom_toBottomOf="@+id/feeds_recyclerview"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:text="@string/no_feed" />
<com.readrops.app.utils.EmptyListView </androidx.constraintlayout.widget.ConstraintLayout>
android:id="@+id/feeds_empty_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:image="@drawable/ic_rss_feed_grey"
app:layout_constraintBottom_toBottomOf="@+id/feeds_recyclerview"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:text="@string/no_feed" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@ -1,33 +1,31 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/folders_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragments.FoldersFragment"> tools:context=".fragments.FoldersFragment">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.recyclerview.widget.RecyclerView
android:id="@+id/folders_root" android:id="@+id/folders_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
tools:itemCount="5"
tools:listitem="@layout/folder_layout" />
<androidx.recyclerview.widget.RecyclerView <com.readrops.app.utils.EmptyListView
android:id="@+id/folders_list" android:id="@+id/folders_empty_list"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="wrap_content"
tools:itemCount="5" android:visibility="gone"
tools:listitem="@layout/folder_layout" /> app:image="@drawable/ic_folder_grey"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:text="@string/no_folder" />
<com.readrops.app.utils.EmptyListView </androidx.constraintlayout.widget.ConstraintLayout>
android:id="@+id/folders_empty_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:image="@drawable/ic_folder_grey"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:text="@string/no_folder" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@ -1,153 +1,151 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="6dp">
<RelativeLayout <RelativeLayout
android:id="@+id/layout_start"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/item_image"
android:layout_width="150dp"
android:layout_height="92dp"
android:layout_alignParentEnd="true"
android:layout_marginStart="6dp"
android:visibility="gone"
tools:visibility="visible" />
<TextView
android:id="@+id/item_description"
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_title"
android:layout_alignParentStart="true"
android:layout_toStartOf="@id/item_image"
android:ellipsize="end"
android:maxLines="3"
android:minLines="1"
tools:text="This is an item description" />
<TextView
android:id="@+id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_toStartOf="@id/item_image"
android:ellipsize="end"
android:maxLines="2"
android:minLines="1"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
android:textSize="16sp"
android:textStyle="bold"
tools:text="This is an item title with sufficient length" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/layout_end"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground" android:layout_below="@id/layout_start"
android:clickable="true" android:layout_marginTop="6dp">
android:focusable="true"
android:padding="6dp"> <ImageView
android:id="@+id/item_folder_icon"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_below="@id/item_feed_title_layout"
android:layout_alignParentStart="true"
android:layout_marginTop="6dp"
android:src="@drawable/ic_folder_grey" />
<RelativeLayout <RelativeLayout
android:id="@+id/layout_start" android:id="@+id/item_feed_title_layout"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/item_image"
android:layout_width="150dp"
android:layout_height="92dp"
android:layout_alignParentEnd="true"
android:layout_marginStart="6dp"
android:visibility="gone"
tools:visibility="visible" />
<TextView
android:id="@+id/item_description"
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_title"
android:layout_alignParentStart="true"
android:layout_toStartOf="@id/item_image"
android:ellipsize="end"
android:maxLines="3"
android:minLines="1"
tools:text="This is an item description" />
<TextView
android:id="@+id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_toStartOf="@id/item_image"
android:ellipsize="end"
android:maxLines="2"
android:minLines="1"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
android:textSize="16sp"
android:textStyle="bold"
tools:text="This is an item title with sufficient length" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/layout_end"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/layout_start" android:layout_alignParentStart="true"
android:layout_marginTop="6dp"> android:layout_toStartOf="@id/item_date">
<ImageView <ImageView
android:id="@+id/item_folder_icon" android:id="@+id/item_feed_icon"
android:layout_width="20dp" android:layout_width="20dp"
android:layout_height="20dp" android:layout_height="20dp"
android:layout_below="@id/item_feed_title_layout"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_marginTop="6dp" android:src="@drawable/ic_rss_feed_grey" />
android:src="@drawable/ic_folder_grey" />
<RelativeLayout
android:id="@+id/item_feed_title_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_toStartOf="@id/item_date">
<ImageView
android:id="@+id/item_feed_icon"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentStart="true"
android:src="@drawable/ic_rss_feed_grey" />
<TextView
android:id="@+id/item_feed_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:layout_toEndOf="@id/item_feed_icon"
android:ellipsize="end"
android:maxLines="1"
tools:text="Feed Name" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/item_readtime_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_date"
android:layout_alignParentEnd="true"
android:layout_marginTop="6dp">
<ImageView
android:id="@+id/item_readtime_icon"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_centerVertical="true"
android:src="@drawable/ic_reading_time" />
<TextView
android:id="@+id/item_readtime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="4dp"
android:layout_toEndOf="@id/item_readtime_icon"
tools:text="3 mins" />
</RelativeLayout>
<TextView <TextView
android:id="@+id/item_date" android:id="@+id/item_feed_name"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_marginStart="4dp" android:layout_marginStart="4dp"
android:background="@drawable/item_date_background" android:layout_toEndOf="@id/item_feed_icon"
android:paddingStart="8dp" android:ellipsize="end"
android:paddingTop="1dp" android:maxLines="1"
android:paddingEnd="8dp" tools:text="Feed Name" />
android:paddingBottom="1dp"
android:textColor="@color/colorBackground"
tools:text="8 feb 2019" />
<TextView
android:id="@+id/item_folder_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_feed_title_layout"
android:layout_marginStart="6dp"
android:layout_marginTop="6dp"
android:layout_toEndOf="@id/item_folder_icon"
tools:text="Folder 1" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:id="@+id/item_readtime_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_date"
android:layout_alignParentEnd="true"
android:layout_marginTop="6dp">
<ImageView
android:id="@+id/item_readtime_icon"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_centerVertical="true"
android:src="@drawable/ic_reading_time" />
<TextView
android:id="@+id/item_readtime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="4dp"
android:layout_toEndOf="@id/item_readtime_icon"
tools:text="3 mins" />
</RelativeLayout>
<TextView
android:id="@+id/item_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:background="@drawable/item_date_background"
android:paddingStart="8dp"
android:paddingTop="1dp"
android:paddingEnd="8dp"
android:paddingBottom="1dp"
android:textColor="@color/colorBackground"
tools:text="8 feb 2019" />
<TextView
android:id="@+id/item_folder_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_feed_title_layout"
android:layout_marginStart="6dp"
android:layout_marginTop="6dp"
android:layout_toEndOf="@id/item_folder_icon"
tools:text="Folder 1" />
</RelativeLayout> </RelativeLayout>
</layout> </RelativeLayout>

View File

@ -1,53 +1,51 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginTop="6dp"
android:layout_marginEnd="6dp"
android:clickable="true"
android:focusable="true">
<RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="6dp" android:background="?android:attr/selectableItemBackground"
android:layout_marginTop="6dp" android:padding="8dp">
android:layout_marginEnd="6dp"
android:clickable="true"
android:focusable="true">
<RelativeLayout <ImageView
android:layout_width="match_parent" android:id="@+id/notification_feed_icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginEnd="6dp"
tools:src="@drawable/ic_rss_feed_grey" />
<TextView
android:id="@+id/notification_feed_name"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground" android:layout_centerVertical="true"
android:padding="8dp"> android:layout_marginEnd="6dp"
android:layout_toStartOf="@id/notification_switch"
android:layout_toEndOf="@id/notification_feed_icon"
android:ellipsize="end"
android:maxLines="2"
tools:text="Feed 1" />
<ImageView <Switch
android:id="@+id/notification_feed_icon" android:id="@+id/notification_switch"
android:layout_width="24dp" android:layout_width="wrap_content"
android:layout_height="24dp" android:layout_height="wrap_content"
android:layout_alignParentStart="true" android:layout_alignParentEnd="true"
android:layout_centerVertical="true" android:clickable="false" />
android:layout_marginEnd="6dp"
tools:src="@drawable/ic_rss_feed_grey" />
<TextView </RelativeLayout>
android:id="@+id/notification_feed_name"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginEnd="6dp"
android:layout_toStartOf="@id/notification_switch"
android:layout_toEndOf="@id/notification_feed_icon"
android:ellipsize="end"
android:maxLines="2"
tools:text="Feed 1" />
<Switch </androidx.cardview.widget.CardView>
android:id="@+id/notification_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:clickable="false" />
</RelativeLayout>
</androidx.cardview.widget.CardView>
</layout>