From 68b6f6b6092d76a1b167d19ab93867994b71972e Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Tue, 17 Dec 2019 16:40:46 +0200 Subject: [PATCH] Refactored code. Removed temporary files.| #793 --- FlowCrypt/src/main/AndroidManifest.xml | 3 - .../viewmodel/MessagesViewModel.kt} | 13 +- .../email/ui/activity/EmailManagerActivity.kt | 2 +- .../ui/activity/fragment/EmailListFragment.kt | 167 ++++++------------ .../ui/activity/ui/paging/PagingActivity.kt | 31 ---- .../ui/activity/ui/paging/PagingFragment.kt | 51 ------ .../main/res/layout/fragment_email_list.xml | 18 +- .../src/main/res/layout/paging_fragment.xml | 23 --- 8 files changed, 71 insertions(+), 237 deletions(-) rename FlowCrypt/src/main/java/com/flowcrypt/email/{ui/activity/ui/paging/PagingViewModel.kt => jetpack/viewmodel/MessagesViewModel.kt} (68%) delete mode 100644 FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/ui/paging/PagingActivity.kt delete mode 100644 FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/ui/paging/PagingFragment.kt delete mode 100644 FlowCrypt/src/main/res/layout/paging_fragment.xml diff --git a/FlowCrypt/src/main/AndroidManifest.xml b/FlowCrypt/src/main/AndroidManifest.xml index b50341f1fc..ee560fd2f2 100644 --- a/FlowCrypt/src/main/AndroidManifest.xml +++ b/FlowCrypt/src/main/AndroidManifest.xml @@ -233,9 +233,6 @@ android:name=".ui.activity.UserRecoverableAuthExceptionActivity" android:launchMode="singleTask" /> - - - > = roomDatabase.msgDao().msgs().toLiveData(pageSize = 20) -} +} \ No newline at end of file diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/EmailManagerActivity.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/EmailManagerActivity.kt index 6954d3320a..2a8e4f84d2 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/EmailManagerActivity.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/EmailManagerActivity.kt @@ -529,7 +529,7 @@ class EmailManagerActivity : BaseEmailListActivity(), NavigationView.OnNavigatio val fragment = supportFragmentManager .findFragmentById(R.id.emailListFragment) as EmailListFragment? - fragment?.onForceLoadNewMsgsCompleted(refreshListNeeded) + //fragment?.onForceLoadNewMsgsCompleted(refreshListNeeded) } /** diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/EmailListFragment.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/EmailListFragment.kt index 77e1aa39a0..db97c4fe91 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/EmailListFragment.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/EmailListFragment.kt @@ -13,19 +13,20 @@ import android.text.TextUtils import android.util.SparseBooleanArray import android.view.ActionMode import android.view.LayoutInflater -import android.view.Menu -import android.view.MenuItem import android.view.View import android.view.ViewGroup -import android.widget.AbsListView import android.widget.AdapterView -import android.widget.ListView import android.widget.ProgressBar import android.widget.TextView import android.widget.Toast +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import androidx.loader.app.LoaderManager import androidx.loader.content.CursorLoader import androidx.loader.content.Loader +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.flowcrypt.email.R import com.flowcrypt.email.api.email.JavaEmailConstants @@ -37,6 +38,7 @@ import com.flowcrypt.email.database.MessageState import com.flowcrypt.email.database.dao.source.AccountDao import com.flowcrypt.email.database.dao.source.AccountDaoSource import com.flowcrypt.email.database.dao.source.imap.MessageDaoSource +import com.flowcrypt.email.jetpack.viewmodel.MessagesViewModel import com.flowcrypt.email.jobscheduler.MessagesSenderJobService import com.flowcrypt.email.ui.activity.MessageDetailsActivity import com.flowcrypt.email.ui.activity.SearchMessagesActivity @@ -44,7 +46,7 @@ import com.flowcrypt.email.ui.activity.base.BaseSyncActivity import com.flowcrypt.email.ui.activity.fragment.base.BaseSyncFragment import com.flowcrypt.email.ui.activity.fragment.dialog.InfoDialogFragment import com.flowcrypt.email.ui.activity.fragment.dialog.TwoWayDialogFragment -import com.flowcrypt.email.ui.adapter.MessageListAdapter +import com.flowcrypt.email.ui.adapter.MsgsPagedListAdapter import com.flowcrypt.email.util.GeneralUtil import com.flowcrypt.email.util.UIUtil import com.flowcrypt.email.util.exception.ExceptionUtil @@ -53,7 +55,6 @@ import com.flowcrypt.email.util.idling.SingleIdlingResources import com.google.android.gms.auth.GoogleAuthException import com.google.android.gms.auth.UserRecoverableAuthException import com.google.android.material.snackbar.Snackbar -import java.util.* import javax.mail.AuthenticationFailedException /** @@ -66,17 +67,17 @@ import javax.mail.AuthenticationFailedException * E-mail: DenBond7@gmail.com */ -class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, - SwipeRefreshLayout.OnRefreshListener, AbsListView.MultiChoiceModeListener { +class EmailListFragment : BaseSyncFragment(), SwipeRefreshLayout.OnRefreshListener { - private var listView: ListView? = null + private var recyclerViewMsgs: RecyclerView? = null private var emptyView: TextView? = null private var footerProgressView: View? = null private var swipeRefreshLayout: SwipeRefreshLayout? = null private var textViewActionProgress: TextView? = null private var progressBarActionProgress: ProgressBar? = null - private var adapter: MessageListAdapter? = null + private lateinit var adapter: MsgsPagedListAdapter + private lateinit var messagesViewModel: MessagesViewModel private var listener: OnManageEmailsListener? = null private var baseSyncActivity: BaseSyncActivity? = null private var actionMode: ActionMode? = null @@ -88,37 +89,11 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, private var forceFirstLoadNeeded: Boolean = false private var isEncryptedModeEnabled: Boolean = false private var isSaveChoicesNeeded: Boolean = false - private var timeOfLastRequestEnd: Long = 0 private var lastFirstVisiblePos: Int = 0 private var originalStatusBarColor: Int = 0 - private val callbacks = object : LoaderManager.LoaderCallbacks { - override fun onCreateLoader(id: Int, args: Bundle?): Loader { - return when (id) { - R.id.loader_id_load_messages_from_cache -> { - changeViewsVisibility() - prepareCursorLoader() - } - - else -> Loader(context!!) - } - } - - override fun onLoadFinished(loader: Loader, data: Cursor) { - when (loader.id) { - R.id.loader_id_load_messages_from_cache -> handleCursor(data) - } - } - - override fun onLoaderReset(loader: Loader) { - when (loader.id) { - R.id.loader_id_load_messages_from_cache -> adapter!!.swapCursor(null) - } - } - } - override val contentView: View? - get() = listView + get() = recyclerViewMsgs override fun onAttach(context: Context) { super.onAttach(context) @@ -140,7 +115,8 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - this.adapter = MessageListAdapter(context!!, null) + adapter = MsgsPagedListAdapter() + messagesViewModel = ViewModelProvider(this).get(MessagesViewModel::class.java) val accountDaoSource = AccountDaoSource() val account = accountDaoSource.getActiveAccountInformation(context!!) @@ -154,24 +130,26 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initViews(view) + + messagesViewModel.concertList.observe(viewLifecycleOwner, Observer { + adapter.submitList(it) + }) } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - if (listener!!.currentFolder != null) { + if (listener?.currentFolder != null) { if (!TextUtils.isEmpty(listener!!.currentFolder!!.searchQuery)) { - swipeRefreshLayout!!.isEnabled = false + swipeRefreshLayout?.isEnabled = false } - LoaderManager.getInstance(this).restartLoader(R.id.loader_id_load_messages_from_cache, null, callbacks) + //LoaderManager.getInstance(this).restartLoader(R.id.loader_id_load_messages_from_cache, null, callbacks) } } override fun onPause() { super.onPause() - if (snackBar != null) { - snackBar!!.dismiss() - } + snackBar?.dismiss() } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { @@ -198,9 +176,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, } override fun onRefresh() { - if (snackBar != null) { - snackBar!!.dismiss() - } + snackBar?.dismiss() val localFolder = listener!!.currentFolder @@ -216,8 +192,8 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, } else { emptyView!!.visibility = View.GONE - if (GeneralUtil.isConnected(context!!)) { - if (adapter!!.count > 0) { + /*if (GeneralUtil.isConnected(context!!)) { + if (adapter?.count > 0) { swipeRefreshLayout!!.isRefreshing = true refreshMsgs() } else { @@ -238,33 +214,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, } showInfoSnackbar(view!!, getString(R.string.internet_connection_is_not_available), Snackbar.LENGTH_LONG) - } - } - } - - override fun onScrollStateChanged(view: AbsListView, scrollState: Int) { - - } - - /** - * This method will be used to try to load more messages if it available. - * - * @param view The view whose scroll state is being reported - * @param firstVisibleItem the index of the first visible cell (ignore if - * visibleItemCount == 0) - * @param visibleItemCount the number of visible cells - * @param totalCount the number of items in the list adaptor - */ - override fun onScroll(view: AbsListView, firstVisibleItem: Int, visibleItemCount: Int, totalCount: Int) { - if (listener!!.currentFolder != null && !(firstVisibleItem == 0 && visibleItemCount == 1 && totalCount == 1)) { - val hasMoreMsgs = listener!!.hasMoreMsgs() - if (!areNewMsgsLoadingNow - && System.currentTimeMillis() - timeOfLastRequestEnd > TIMEOUT_BETWEEN_REQUESTS - && hasMoreMsgs - && firstVisibleItem + visibleItemCount >= totalCount - LOADING_SHIFT_IN_ITEMS - && !JavaEmailConstants.FOLDER_OUTBOX.equals(listener!!.currentFolder!!.fullName, ignoreCase = true)) { - loadNextMsgs(adapter!!.count) - } + }*/ } } @@ -284,7 +234,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, super.onErrorOccurred(requestCode, errorType, e) } - footerProgressView!!.visibility = View.GONE + footerProgressView?.visibility = View.GONE emptyView!!.visibility = View.GONE LoaderManager.getInstance(this).destroyLoader(R.id.loader_id_load_messages_from_cache) @@ -328,7 +278,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, } } - override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean { +/* override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean { swipeRefreshLayout!!.isEnabled = false val inflater = mode.menuInflater inflater.inflate(R.menu.message_list_context_menu, menu) @@ -380,7 +330,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, override fun onItemCheckedStateChanged(mode: ActionMode, position: Int, id: Long, checked: Boolean) { adapter!!.updateItemState(position, checked) mode.title = if (listView!!.checkedItemCount > 0) listView!!.checkedItemCount.toString() else null - } + }*/ /** * Update a current messages list. @@ -393,7 +343,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, if (listener!!.currentFolder != null) { isFetchMesgsNeeded = !isFolderChanged - if (isFolderChanged) { + /*if (isFolderChanged) { adapter!!.clearSelection() if (JavaEmailConstants.FOLDER_OUTBOX.equals(listener!!.currentFolder!!.fullName, ignoreCase = true)) { listView!!.choiceMode = ListView.CHOICE_MODE_MULTIPLE_MODAL @@ -426,19 +376,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, if (adapter!!.count == 0) { LoaderManager.getInstance(this).restartLoader(R.id.loader_id_load_messages_from_cache, null, callbacks) - } - } - } - - /** - * Handle a result from the load new messages action. - * - * @param isRefreshListNeeded true if we must refresh the emails list. - */ - fun onForceLoadNewMsgsCompleted(isRefreshListNeeded: Boolean) { - swipeRefreshLayout!!.isRefreshing = false - if (isRefreshListNeeded || adapter!!.count == 0) { - updateList(false, false) + }*/ } } @@ -448,18 +386,17 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, * @param isUpdateListNeeded true if we must reload the emails list. */ fun onNextMsgsLoaded(isUpdateListNeeded: Boolean) { - footerProgressView!!.visibility = View.GONE + footerProgressView?.visibility = View.GONE progressView!!.visibility = View.GONE - if (isUpdateListNeeded || adapter!!.count == 0) { + /*if (isUpdateListNeeded || adapter!!.count == 0) { updateList(false, false) } else if (adapter!!.count == 0) { emptyView!!.setText(if (isEncryptedModeEnabled) R.string.no_encrypted_messages else R.string.no_results) UIUtil.exchangeViewVisibility(false, progressView!!, emptyView!!) - } + }*/ areNewMsgsLoadingNow = false - timeOfLastRequestEnd = System.currentTimeMillis() } /** @@ -506,7 +443,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, this.isEncryptedModeEnabled = isEncryptedModeEnabled if (isEncryptedModeEnabled) { - lastFirstVisiblePos = listView!!.firstVisiblePosition + //lastFirstVisiblePos = listView!!.firstVisiblePosition } updateList(true, true) @@ -523,7 +460,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, for (i in 0 until checkedItemPositions!!.size()) { val key = checkedItemPositions!!.keyAt(i) val value = checkedItemPositions!!.valueAt(i) - listView!!.setItemChecked(key, value) + //listView!!.setItemChecked(key, value) } } } @@ -552,7 +489,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, } private fun deleteSelectedMsgs() { - val checkedItemPositions = listView!!.checkedItemPositions + /*val checkedItemPositions = listView!!.checkedItemPositions if (checkedItemPositions != null && checkedItemPositions.size() > 0) { val detailsList = ArrayList() @@ -578,16 +515,16 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, } actionMode!!.finish() - } + }*/ } private fun changeViewsVisibility() { emptyView!!.visibility = View.GONE statusView!!.visibility = View.GONE - if (!isFetchMesgsNeeded || adapter!!.count == 0) { + /*if (!isFetchMesgsNeeded || adapter!!.count == 0) { UIUtil.exchangeViewVisibility(true, progressView!!, listView!!) - } + }*/ if (supportActionBar != null) { supportActionBar!!.title = listener!!.currentFolder!!.folderAlias @@ -595,7 +532,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, } private fun handleCursor(data: Cursor?) { - adapter!!.localFolder = listener!!.currentFolder + /*adapter!!.localFolder = listener!!.currentFolder adapter!!.swapCursor(data) if (data != null && data.count != 0) { emptyView!!.visibility = View.GONE @@ -633,7 +570,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, }) UIUtil.exchangeViewVisibility(false, progressView!!, emptyView!!) } - } + }*/ } private fun prepareCursorLoader(): Loader { @@ -744,7 +681,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, */ private fun loadNextMsgs(totalItemsCount: Int) { if (GeneralUtil.isConnected(context!!)) { - footerProgressView!!.visibility = View.VISIBLE + footerProgressView?.visibility = View.VISIBLE areNewMsgsLoadingNow = true listener?.msgsLoadingIdlingResource?.setIdleState(false) val localFolder = listener!!.currentFolder @@ -754,7 +691,7 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, baseSyncActivity!!.searchNextMsgs(R.id.sync_request_code_search_messages, localFolder, totalItemsCount) } } else { - footerProgressView!!.visibility = View.GONE + footerProgressView?.visibility = View.GONE showSnackbar(view!!, getString(R.string.internet_connection_is_not_available), getString(R.string.retry), Snackbar.LENGTH_LONG, View.OnClickListener { loadNextMsgs(totalItemsCount) }) } @@ -764,16 +701,14 @@ class EmailListFragment : BaseSyncFragment(), AbsListView.OnScrollListener, textViewActionProgress = view.findViewById(R.id.textViewActionProgress) progressBarActionProgress = view.findViewById(R.id.progressBarActionProgress) - listView = view.findViewById(R.id.listViewMessages) - listView!!.onItemClickListener = CustomOnItemClickListener() - listView!!.setMultiChoiceModeListener(this) - - footerProgressView = LayoutInflater.from(context).inflate(R.layout.list_view_progress_footer, listView, false) - footerProgressView!!.visibility = View.GONE + recyclerViewMsgs = view.findViewById(R.id.recyclerViewMsgs) + val layoutManager = LinearLayoutManager(context) + recyclerViewMsgs?.layoutManager = layoutManager + recyclerViewMsgs?.addItemDecoration(DividerItemDecoration(context, layoutManager.orientation)) + recyclerViewMsgs?.adapter = adapter - listView!!.addFooterView(footerProgressView) - listView!!.adapter = adapter - listView!!.setOnScrollListener(this) + /*footerProgressView = LayoutInflater.from(context).inflate(R.layout.list_view_progress_footer, listView, false) + footerProgressView?.visibility = View.GONE*/ emptyView = view.findViewById(R.id.emptyView) swipeRefreshLayout = view.findViewById(R.id.swipeRefreshLayout) diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/ui/paging/PagingActivity.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/ui/paging/PagingActivity.kt deleted file mode 100644 index 2b7ba67e83..0000000000 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/ui/paging/PagingActivity.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * © 2016-2019 FlowCrypt Limited. Limitations apply. Contact human@flowcrypt.com - * Contributors: DenBond7 - */ - -package com.flowcrypt.email.ui.activity.ui.paging - -import android.content.Context -import android.content.Intent -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity -import com.flowcrypt.email.R - -class PagingActivity : AppCompatActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.paging_activity) - if (savedInstanceState == null) { - supportFragmentManager.beginTransaction() - .replace(R.id.container, PagingFragment.newInstance()) - .commitNow() - } - } - - companion object { - fun newIntent(context: Context): Intent { - return Intent(context, PagingActivity::class.java) - } - } -} diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/ui/paging/PagingFragment.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/ui/paging/PagingFragment.kt deleted file mode 100644 index 7c4df98bda..0000000000 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/ui/paging/PagingFragment.kt +++ /dev/null @@ -1,51 +0,0 @@ -/* - * © 2016-2019 FlowCrypt Limited. Limitations apply. Contact human@flowcrypt.com - * Contributors: DenBond7 - */ - -package com.flowcrypt.email.ui.activity.ui.paging - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.DividerItemDecoration -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import com.flowcrypt.email.R -import com.flowcrypt.email.ui.activity.fragment.base.BaseFragment -import com.flowcrypt.email.ui.adapter.MsgsPagedListAdapter - -class PagingFragment : BaseFragment() { - - companion object { - fun newInstance() = PagingFragment() - } - - private lateinit var viewModel: PagingViewModel - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle?): View { - return inflater.inflate(R.layout.paging_fragment, container, false) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - viewModel = ViewModelProvider(this).get(PagingViewModel::class.java) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - val recyclerView = view.findViewById(R.id.recyclerViewMsgs) - val layoutManager = LinearLayoutManager(context) - recyclerView.layoutManager = layoutManager - recyclerView.addItemDecoration(DividerItemDecoration(context, layoutManager.orientation)) - val adapter = MsgsPagedListAdapter() - recyclerView.adapter = adapter - viewModel.concertList.observe(viewLifecycleOwner, Observer { - adapter.submitList(it) - }) - } -} diff --git a/FlowCrypt/src/main/res/layout/fragment_email_list.xml b/FlowCrypt/src/main/res/layout/fragment_email_list.xml index a12965247d..59853c426d 100644 --- a/FlowCrypt/src/main/res/layout/fragment_email_list.xml +++ b/FlowCrypt/src/main/res/layout/fragment_email_list.xml @@ -19,8 +19,8 @@ android:id="@+id/textViewActionProgress" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginEnd="@dimen/default_margin_content_small" android:layout_marginStart="@dimen/default_margin_content_small" + android:layout_marginEnd="@dimen/default_margin_content_small" android:textSize="@dimen/default_text_size_very_small" android:visibility="gone" app:layout_constraintBottom_toTopOf="@+id/progressBarActionProgress" @@ -45,7 +45,6 @@ - - + @@ -72,6 +73,7 @@ android:id="@id/viewIdProgressView" style="?android:attr/progressBarStyle" android:layout_width="wrap_content" + android:visibility="gone" android:layout_height="wrap_content" android:layout_gravity="center" /> diff --git a/FlowCrypt/src/main/res/layout/paging_fragment.xml b/FlowCrypt/src/main/res/layout/paging_fragment.xml deleted file mode 100644 index 3a555e1fe7..0000000000 --- a/FlowCrypt/src/main/res/layout/paging_fragment.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - -