From 65a9a4b4f24f468ea2ea7a5d08fd86e12aa66331 Mon Sep 17 00:00:00 2001 From: tarsin Date: Thu, 17 Nov 2022 21:34:12 +0800 Subject: [PATCH] Make Settings appbar liftonscroll --- .../com/hippo/ehviewer/ui/SettingsActivity.kt | 24 +- .../ehviewer/ui/fragment/BaseFragment.kt | 67 ++-- .../ehviewer/ui/fragment/FilterFragment.kt | 28 +- .../ehviewer/ui/fragment/HostsFragment.kt | 367 ++++++++---------- app/src/main/res/layout/activity_filter.xml | 49 --- app/src/main/res/layout/activity_hosts.xml | 50 --- .../main/res/layout/activity_preference.xml | 51 ++- app/src/main/res/layout/rv_layout.xml | 21 + 8 files changed, 292 insertions(+), 365 deletions(-) delete mode 100644 app/src/main/res/layout/activity_filter.xml delete mode 100644 app/src/main/res/layout/activity_hosts.xml create mode 100644 app/src/main/res/layout/rv_layout.xml diff --git a/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.kt b/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.kt index 9ecf40430..b05ec9dc7 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.kt @@ -18,21 +18,29 @@ package com.hippo.ehviewer.ui import android.content.res.Configuration import android.os.Bundle import android.view.MenuItem +import android.widget.TextView import androidx.annotation.StringRes import androidx.core.view.WindowCompat import androidx.fragment.app.FragmentTransaction +import com.google.android.material.appbar.AppBarLayout +import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.snackbar.Snackbar import com.hippo.ehviewer.R import com.hippo.ehviewer.ui.fragment.SettingsFragment import com.hippo.ehviewer.ui.scene.BaseScene class SettingsActivity : EhActivity() { + private var mFab: FloatingActionButton? = null + private var mContentText: TextView? = null + private var mAppbarLayout: AppBarLayout? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_preference) setSupportActionBar(findViewById(R.id.toolbar)) - val bar = supportActionBar - bar?.setDisplayHomeAsUpEnabled(true) + mContentText = findViewById(R.id.tip) + mFab = findViewById(R.id.fab) + mAppbarLayout = findViewById(R.id.appbar) + supportActionBar?.setDisplayHomeAsUpEnabled(true) WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars = (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_YES) <= 0 if (savedInstanceState == null) { @@ -62,4 +70,16 @@ class SettingsActivity : EhActivity() { } return super.onOptionsItemSelected(item) } + + fun getMFab(): FloatingActionButton { + return mFab!! + } + + fun getMContentText(): TextView { + return mContentText!! + } + + fun resetAppbarLiftStatus() { + mAppbarLayout?.setExpanded(true) + } } \ No newline at end of file diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/BaseFragment.kt b/app/src/main/java/com/hippo/ehviewer/ui/fragment/BaseFragment.kt index 0d82d1225..f3597c5a5 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/BaseFragment.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/BaseFragment.kt @@ -15,36 +15,59 @@ * You should have received a copy of the GNU General Public License along with EhViewer. * If not, see . */ +package com.hippo.ehviewer.ui.fragment -package com.hippo.ehviewer.ui.fragment; +import android.view.View +import android.widget.TextView +import androidx.annotation.StringRes +import androidx.fragment.app.Fragment +import com.google.android.material.floatingactionbutton.FloatingActionButton +import com.hippo.ehviewer.ui.SettingsActivity -import androidx.annotation.StringRes; -import androidx.fragment.app.Fragment; - -import com.hippo.ehviewer.ui.SettingsActivity; - -public class BaseFragment extends Fragment { - - @Override - public void onStart() { - super.onStart(); - setTitle(getFragmentTitle()); +abstract class BaseFragment : Fragment() { + override fun onStart() { + super.onStart() + setTitle(getFragmentTitle()) + (requireActivity() as SettingsActivity).resetAppbarLiftStatus() } - @StringRes - public int getFragmentTitle() { - return -1; + override fun onDestroyView() { + hideFabAndClearTip() + super.onDestroyView() } - private void setTitle(@StringRes int string) { - requireActivity().setTitle(string); + abstract fun getFragmentTitle(): Int + + private fun setTitle(@StringRes string: Int) { + requireActivity().setTitle(string) } - public void showTip(@StringRes int id, int length) { - ((SettingsActivity) requireActivity()).showTip(getString(id), length); + fun showTip(@StringRes id: Int, length: Int) { + (requireActivity() as SettingsActivity).showTip(getString(id), length) } - public void showTip(CharSequence message, int length) { - ((SettingsActivity) requireActivity()).showTip(message, length); + fun showTip(message: CharSequence?, length: Int) { + (requireActivity() as SettingsActivity).showTip(message, length) } -} + + fun getTipView(@StringRes res: Int? = null): TextView { + return (requireActivity() as SettingsActivity).getMContentText().apply { + visibility = View.VISIBLE + res?.let { text = getString(it) } + } + } + + fun getFabViewAndShow(): FloatingActionButton { + return (requireActivity() as SettingsActivity).getMFab().apply { visibility = View.VISIBLE } + } + + private fun hideFabAndClearTip() { + getFabViewAndShow().apply { + visibility = View.GONE + setOnClickListener(null) + } + getTipView().apply { + visibility = View.GONE + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/FilterFragment.kt b/app/src/main/java/com/hippo/ehviewer/ui/fragment/FilterFragment.kt index 6d7972d87..cdc0caee2 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/FilterFragment.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/FilterFragment.kt @@ -20,7 +20,12 @@ package com.hippo.ehviewer.ui.fragment import android.content.DialogInterface import android.os.Bundle import android.text.TextUtils -import android.view.* +import android.view.LayoutInflater +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import android.view.View +import android.view.ViewGroup import android.widget.EditText import android.widget.ImageView import android.widget.TextView @@ -31,10 +36,8 @@ import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.checkbox.MaterialCheckBox -import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.textfield.TextInputLayout import com.hippo.app.BaseDialogBuilder -import com.hippo.easyrecyclerview.EasyRecyclerView import com.hippo.ehviewer.R import com.hippo.ehviewer.client.EhFilter import com.hippo.ehviewer.dao.Filter @@ -66,26 +69,23 @@ class FilterFragment : BaseFragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - val view = inflater.inflate(R.layout.activity_filter, container, false) - val recyclerView: RecyclerView = - ViewUtils.`$$`(view, R.id.recycler_view) as EasyRecyclerView - val tip = ViewUtils.`$$`(view, R.id.tip) as TextView + ): View { + val recyclerView = + inflater.inflate(R.layout.rv_layout, container, false) as RecyclerView + val tip = getTipView(R.string.filter) mViewTransition = ViewTransition(recyclerView, tip) - val fab = view.findViewById(R.id.fab) + val fab = getFabViewAndShow() val drawable = ContextCompat.getDrawable(requireActivity(), R.drawable.big_filter) - drawable!!.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight) + drawable?.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight) tip.setCompoundDrawables(null, drawable, null, null) mAdapter.setHasStableIds(true) recyclerView.adapter = mAdapter - recyclerView.clipToPadding = false - recyclerView.clipChildren = false recyclerView.layoutManager = LinearLayoutManager(requireContext()) recyclerView.setHasFixedSize(true) val defaultItemAnimator = recyclerView.itemAnimator as DefaultItemAnimator? defaultItemAnimator?.supportsChangeAnimations = false fab.setOnClickListener { showAddFilterDialog() } - return view + return recyclerView } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -106,9 +106,9 @@ class FilterFragment : BaseFragment() { } override fun onDestroyView() { - super.onDestroyView() mViewTransition = null requireActivity().removeMenuProvider(mMenuProvider) + super.onDestroyView() } private fun showTipDialog() { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/HostsFragment.kt b/app/src/main/java/com/hippo/ehviewer/ui/fragment/HostsFragment.kt index 180289d46..104abe699 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/HostsFragment.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/HostsFragment.kt @@ -15,269 +15,214 @@ * You should have received a copy of the GNU General Public License along with EhViewer. * If not, see . */ +package com.hippo.ehviewer.ui.fragment -package com.hippo.ehviewer.ui.fragment; +import android.app.Dialog +import android.content.DialogInterface +import android.os.Bundle +import android.util.Pair +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.DialogFragment +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.textfield.TextInputLayout +import com.hippo.app.BaseDialogBuilder +import com.hippo.ehviewer.EhApplication +import com.hippo.ehviewer.Hosts +import com.hippo.ehviewer.R +import com.hippo.view.ViewTransition -import android.app.Dialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.util.Pair; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.fragment.app.DialogFragment; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.google.android.material.textfield.TextInputLayout; -import com.hippo.app.BaseDialogBuilder; -import com.hippo.ehviewer.EhApplication; -import com.hippo.ehviewer.Hosts; -import com.hippo.ehviewer.R; -import com.hippo.view.ViewTransition; -import com.hippo.yorozuya.ViewUtils; - -import java.util.List; -import java.util.Locale; - -public class HostsFragment extends BaseFragment - implements View.OnClickListener { - - private static final String DIALOG_TAG_ADD_HOST = AddHostDialogFragment.class.getName(); - private static final String DIALOG_TAG_EDIT_HOST = EditHostDialogFragment.class.getName(); - - private static final String KEY_HOST = "com.hippo.ehviewer.ui.fragment.HostsFragment.HOST"; - private static final String KEY_IP = "com.hippo.ehviewer.ui.fragment.HostsFragment.IP"; - - private Hosts hosts; - private List> data; - - private ViewTransition mViewTransition; - private HostsAdapter adapter; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - hosts = EhApplication.getHosts(requireContext()); - data = hosts.getAll(); +class HostsFragment : BaseFragment(), View.OnClickListener { + private var hosts: Hosts? = null + private var data: List>? = null + private var mViewTransition: ViewTransition? = null + private var adapter: HostsAdapter? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + EhApplication.getHosts(requireContext()).apply { + hosts = this + data = all + } } - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.activity_hosts, container, false); - RecyclerView recyclerView = view.findViewById(R.id.recycler_view); - TextView tip = (TextView) ViewUtils.$$(view, R.id.tip); - mViewTransition = new ViewTransition(recyclerView, tip); - FloatingActionButton fab = view.findViewById(R.id.fab); - - adapter = new HostsAdapter(); - recyclerView.setAdapter(adapter); - recyclerView.setLayoutManager(new LinearLayoutManager(requireActivity(), RecyclerView.VERTICAL, false)); - recyclerView.setHasFixedSize(true); - - fab.setOnClickListener(this); - - return view; + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + val recyclerView = inflater.inflate(R.layout.rv_layout, container, false) as RecyclerView + val tip = getTipView(R.string.hosts) + mViewTransition = ViewTransition(recyclerView, tip) + val fab = getFabViewAndShow() + adapter = HostsAdapter() + recyclerView.adapter = adapter + recyclerView.layoutManager = + LinearLayoutManager(requireActivity(), RecyclerView.VERTICAL, false) + recyclerView.setHasFixedSize(true) + fab.setOnClickListener(this) + return recyclerView } - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - updateView(false); + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + updateView(false) } - public boolean onItemClick(int position) { - Pair pair = data.get(position); - Bundle args = new Bundle(); - args.putString(KEY_HOST, pair.first); - args.putString(KEY_IP, pair.second); - - DialogFragment fragment = new EditHostDialogFragment(); - fragment.setArguments(args); - fragment.show(getChildFragmentManager(), DIALOG_TAG_EDIT_HOST); - - return true; + fun onItemClick(position: Int): Boolean { + val pair = data!![position] + val args = Bundle() + args.putString(KEY_HOST, pair.first) + args.putString(KEY_IP, pair.second) + val fragment: DialogFragment = EditHostDialogFragment() + fragment.arguments = args + fragment.show(childFragmentManager, DIALOG_TAG_EDIT_HOST) + return true } - @Override - public void onClick(View v) { - new AddHostDialogFragment().show(getChildFragmentManager(), DIALOG_TAG_ADD_HOST); + override fun onClick(v: View) { + AddHostDialogFragment().show(childFragmentManager, DIALOG_TAG_ADD_HOST) } - private void updateView(boolean animation) { + private fun updateView(animation: Boolean) { if (null == mViewTransition) { - return; + return } - - data = hosts.getAll(); - if (data.isEmpty()) { - mViewTransition.showView(1, animation); + data = hosts!!.all + if ((data as MutableList>?)?.isEmpty() == true) { + mViewTransition!!.showView(1, animation) } else { - mViewTransition.showView(0, animation); + mViewTransition!!.showView(0, animation) } - adapter.notifyDataSetChanged(); + adapter!!.notifyDataSetChanged() } - @Override - public int getFragmentTitle() { - return R.string.hosts; + override fun getFragmentTitle(): Int { + return R.string.hosts } - public abstract static class HostDialogFragment extends DialogFragment { - - private HostsFragment hostsFragment; - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - hostsFragment = (HostsFragment) getParentFragment(); - View view = getLayoutInflater().inflate(R.layout.dialog_hosts, null, false); - TextView host = view.findViewById(R.id.host); - TextView ip = view.findViewById(R.id.ip); - - Bundle arguments = getArguments(); + abstract class HostDialogFragment : DialogFragment() { + private var hostsFragment: HostsFragment? = null + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + hostsFragment = parentFragment as HostsFragment? + val view = layoutInflater.inflate(R.layout.dialog_hosts, null, false) + val host = view.findViewById(R.id.host) + val ip = view.findViewById(R.id.ip) + val arguments = arguments if (savedInstanceState == null && arguments != null) { - host.setText(arguments.getString(KEY_HOST)); - ip.setText(arguments.getString(KEY_IP)); + host.text = arguments.getString(KEY_HOST) + ip.text = arguments.getString(KEY_IP) } - - BaseDialogBuilder builder = new BaseDialogBuilder(requireContext()); - builder.setView(view); - onCreateDialogBuilder(builder); - AlertDialog dialog = builder.create(); - dialog.setOnShowListener(d -> onCreateDialog((AlertDialog) d)); - - return dialog; + val builder = BaseDialogBuilder(requireContext()) + builder.setView(view) + onCreateDialogBuilder(builder) + val dialog = builder.create() + dialog.setOnShowListener { d: DialogInterface -> onCreateDialog(d as AlertDialog) } + return dialog } - protected abstract void onCreateDialogBuilder(AlertDialog.Builder builder); - - protected abstract void onCreateDialog(AlertDialog dialog); - - protected void put(AlertDialog dialog) { - TextView host = dialog.findViewById(R.id.host); - TextView ip = dialog.findViewById(R.id.ip); + protected abstract fun onCreateDialogBuilder(builder: AlertDialog.Builder) + protected abstract fun onCreateDialog(dialog: AlertDialog) + protected fun put(dialog: AlertDialog) { + val host = dialog.findViewById(R.id.host) + val ip = dialog.findViewById(R.id.ip) if (host == null || ip == null) { - return; + return } - String hostString = host.getText().toString().trim().toLowerCase(Locale.US); - String ipString = ip.getText().toString().trim(); - + val hostString = host.text.toString().trim { it <= ' ' }.lowercase() + val ipString = ip.text.toString().trim { it <= ' ' } if (!Hosts.isValidHost(hostString)) { - TextInputLayout hostInputLayout = dialog.findViewById(R.id.host_input_layout); - if (hostInputLayout == null) { - return; - } - hostInputLayout.setError(getString(R.string.invalid_host)); - return; + val hostInputLayout = + dialog.findViewById(R.id.host_input_layout) ?: return + hostInputLayout.error = getString(R.string.invalid_host) + return } - if (!Hosts.isValidIp(ipString)) { - TextInputLayout ipInputLayout = dialog.findViewById(R.id.ip_input_layout); - if (ipInputLayout == null) { - return; - } - ipInputLayout.setError(getString(R.string.invalid_ip)); - return; + val ipInputLayout = + dialog.findViewById(R.id.ip_input_layout) ?: return + ipInputLayout.error = getString(R.string.invalid_ip) + return } - - hostsFragment.hosts.put(hostString, ipString); - hostsFragment.updateView(true); - - dialog.dismiss(); + hostsFragment!!.hosts!!.put(hostString, ipString) + hostsFragment!!.updateView(true) + dialog.dismiss() } - protected void delete(AlertDialog dialog) { - TextView host = dialog.findViewById(R.id.host); - if (host == null) { - return; - } - String hostString = host.getText().toString().trim().toLowerCase(Locale.US); - - hostsFragment.hosts.delete(hostString); - hostsFragment.updateView(true); - - dialog.dismiss(); + protected fun delete(dialog: AlertDialog) { + val host = dialog.findViewById(R.id.host) ?: return + val hostString = host.text.toString().trim { it <= ' ' }.lowercase() + hostsFragment!!.hosts!!.delete(hostString) + hostsFragment!!.updateView(true) + dialog.dismiss() } } - public static class AddHostDialogFragment extends HostDialogFragment { - - @Override - protected void onCreateDialogBuilder(AlertDialog.Builder builder) { - builder.setTitle(R.string.add_host); - builder.setPositiveButton(R.string.add_host_add, null); - builder.setNegativeButton(android.R.string.cancel, null); + class AddHostDialogFragment : HostDialogFragment() { + override fun onCreateDialogBuilder(builder: AlertDialog.Builder) { + builder.setTitle(R.string.add_host) + builder.setPositiveButton(R.string.add_host_add, null) + builder.setNegativeButton(android.R.string.cancel, null) } - @Override - protected void onCreateDialog(AlertDialog dialog) { - dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(v -> put(dialog)); + override fun onCreateDialog(dialog: AlertDialog) { + dialog.getButton(DialogInterface.BUTTON_POSITIVE) + .setOnClickListener { put(dialog) } } } - public static class EditHostDialogFragment extends HostDialogFragment { - - @Override - protected void onCreateDialogBuilder(AlertDialog.Builder builder) { - builder.setTitle(R.string.edit_host); - builder.setPositiveButton(R.string.edit_host_confirm, null); - builder.setNegativeButton(R.string.edit_host_delete, null); + class EditHostDialogFragment : HostDialogFragment() { + override fun onCreateDialogBuilder(builder: AlertDialog.Builder) { + builder.setTitle(R.string.edit_host) + builder.setPositiveButton(R.string.edit_host_confirm, null) + builder.setNegativeButton(R.string.edit_host_delete, null) } - @Override - protected void onCreateDialog(AlertDialog dialog) { - TextInputLayout hostInputLayout = dialog.findViewById(R.id.host_input_layout); - if (hostInputLayout == null) { - return; - } - hostInputLayout.setEnabled(false); - dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(v -> put(dialog)); - dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setOnClickListener(v -> delete(dialog)); + override fun onCreateDialog(dialog: AlertDialog) { + val hostInputLayout = + dialog.findViewById(R.id.host_input_layout) ?: return + hostInputLayout.isEnabled = false + dialog.getButton(DialogInterface.BUTTON_POSITIVE) + .setOnClickListener { put(dialog) } + dialog.getButton(DialogInterface.BUTTON_NEGATIVE) + .setOnClickListener { delete(dialog) } } } - private static class HostsHolder extends RecyclerView.ViewHolder { + private class HostsHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val host: TextView + val ip: TextView - public final TextView host; - public final TextView ip; - - public HostsHolder(View itemView) { - super(itemView); - host = itemView.findViewById(R.id.host); - ip = itemView.findViewById(R.id.ip); + init { + host = itemView.findViewById(R.id.host) + ip = itemView.findViewById(R.id.ip) } } - private class HostsAdapter extends RecyclerView.Adapter { - - private final LayoutInflater inflater = getLayoutInflater(); - - @NonNull - @Override - public HostsHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new HostsHolder(inflater.inflate(R.layout.item_hosts, parent, false)); + private inner class HostsAdapter : RecyclerView.Adapter() { + private val inflater = layoutInflater + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HostsHolder { + return HostsHolder(inflater.inflate(R.layout.item_hosts, parent, false)) } - @Override - public void onBindViewHolder(@NonNull HostsHolder holder, int position) { - Pair pair = data.get(position); - holder.host.setText(pair.first); - holder.ip.setText(pair.second); - holder.itemView.setOnClickListener(v -> onItemClick(position)); + override fun onBindViewHolder(holder: HostsHolder, position: Int) { + val pair = data!![position] + holder.host.text = pair.first + holder.ip.text = pair.second + holder.itemView.setOnClickListener { onItemClick(position) } } - @Override - public int getItemCount() { - return data.size(); + override fun getItemCount(): Int { + return data!!.size } } -} + + companion object { + private val DIALOG_TAG_ADD_HOST = AddHostDialogFragment::class.java.name + private val DIALOG_TAG_EDIT_HOST = EditHostDialogFragment::class.java.name + private const val KEY_HOST = "com.hippo.ehviewer.ui.fragment.HostsFragment.HOST" + private const val KEY_IP = "com.hippo.ehviewer.ui.fragment.HostsFragment.IP" + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_filter.xml b/app/src/main/res/layout/activity_filter.xml deleted file mode 100644 index 75c22b801..000000000 --- a/app/src/main/res/layout/activity_filter.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/layout/activity_hosts.xml b/app/src/main/res/layout/activity_hosts.xml deleted file mode 100644 index a4b7f4dc9..000000000 --- a/app/src/main/res/layout/activity_hosts.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/layout/activity_preference.xml b/app/src/main/res/layout/activity_preference.xml index e2d7b4cf9..9f87e7995 100644 --- a/app/src/main/res/layout/activity_preference.xml +++ b/app/src/main/res/layout/activity_preference.xml @@ -15,17 +15,16 @@ ~ You should have received a copy of the GNU General Public License along with EhViewer. ~ If not, see . --> - + app:edgeToEdge="true"> @@ -33,19 +32,37 @@ + android:layout_height="?attr/actionBarSize" + app:layout_scrollEffect="compress" + app:layout_scrollFlags="scroll|enterAlways|snap" /> - + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> - - + - + + + diff --git a/app/src/main/res/layout/rv_layout.xml b/app/src/main/res/layout/rv_layout.xml new file mode 100644 index 000000000..517ef0b45 --- /dev/null +++ b/app/src/main/res/layout/rv_layout.xml @@ -0,0 +1,21 @@ + + \ No newline at end of file