Merge pull request #3244 from criticalAY/replace_deprecated_methods

replaced the deprecated setHasOptionsMenu(true) with new API
This commit is contained in:
Kelson 2023-03-30 09:14:18 +02:00 committed by GitHub
commit 660b376969
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 175 additions and 120 deletions

View File

@ -26,6 +26,9 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.core.view.MenuHost
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
@ -103,11 +106,40 @@ class LanguageFragment : BaseFragment() {
container: ViewGroup?, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
setHasOptionsMenu(true) setupMenu()
activityLanguageBinding = ActivityLanguageBinding.inflate(inflater, container, false) activityLanguageBinding = ActivityLanguageBinding.inflate(inflater, container, false)
return activityLanguageBinding?.root return activityLanguageBinding?.root
} }
private fun setupMenu() {
(requireActivity() as MenuHost).addMenuProvider(
object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.menu_language, menu)
val search = menu.findItem(R.id.menu_language_search)
(search.actionView as SearchView).setOnQueryTextListener(
SimpleTextListener {
languageViewModel.actions.offer(Filter(it))
}
)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
return when (menuItem.itemId) {
R.id.menu_language_save -> {
languageViewModel.actions.offer(Action.SaveAll)
closeKeyboard()
true
}
else -> false
}
}
},
viewLifecycleOwner,
Lifecycle.State.RESUMED
)
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
compositeDisposable.clear() compositeDisposable.clear()
@ -122,28 +154,6 @@ class LanguageFragment : BaseFragment() {
Saving -> Unit Saving -> Unit
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_language, menu)
val search = menu.findItem(R.id.menu_language_search)
(search.actionView as SearchView).setOnQueryTextListener(
SimpleTextListener {
languageViewModel.actions.offer(Filter(it))
}
)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.menu_language_save -> {
languageViewModel.actions.offer(Action.SaveAll)
closeKeyboard()
true
}
else -> super.onOptionsItemSelected(item)
}
}
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
activityLanguageBinding = null activityLanguageBinding = null

View File

@ -45,6 +45,9 @@ import androidx.annotation.RequiresApi
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.MenuHost
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import org.kiwix.kiwixmobile.R import org.kiwix.kiwixmobile.R
@ -110,14 +113,9 @@ class LocalFileTransferFragment :
return fragmentLocalFileTransferBinding?.root return fragmentLocalFileTransferBinding?.root
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.wifi_file_share_items, menu)
super.onCreateOptionsMenu(menu, inflater)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setHasOptionsMenu(true) setupMenu()
val activity = requireActivity() as CoreMainActivity val activity = requireActivity() as CoreMainActivity
val filesForTransfer = getFilesForTransfer() val filesForTransfer = getFilesForTransfer()
val isReceiver = filesForTransfer.isEmpty() val isReceiver = filesForTransfer.isEmpty()
@ -134,6 +132,45 @@ class LocalFileTransferFragment :
wifiDirectManager.startWifiDirectManager(filesForTransfer) wifiDirectManager.startWifiDirectManager(filesForTransfer)
} }
private fun setupMenu() {
(requireActivity() as MenuHost).addMenuProvider(
object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.wifi_file_share_items, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
if (menuItem.itemId == R.id.menu_item_search_devices) {
/* Permissions essential for this module */
return when {
!checkFineLocationAccessPermission() ->
true
!checkExternalStorageWritePermission() ->
true
/* Initiate discovery */
!wifiDirectManager.isWifiP2pEnabled -> {
requestEnableWifiP2pServices()
true
}
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !isLocationServiceEnabled -> {
requestEnableLocationServices()
true
}
else -> {
showPeerDiscoveryProgressBar()
wifiDirectManager.discoverPeerDevices()
true
}
}
}
return false
}
},
viewLifecycleOwner,
Lifecycle.State.RESUMED
)
}
private fun setupPeerDevicesList(activity: CoreMainActivity) { private fun setupPeerDevicesList(activity: CoreMainActivity) {
fragmentLocalFileTransferBinding?.listPeerDevices?.apply { fragmentLocalFileTransferBinding?.listPeerDevices?.apply {
adapter = wifiPeerListAdapter adapter = wifiPeerListAdapter
@ -156,33 +193,6 @@ class LocalFileTransferFragment :
LocalFileTransferFragmentArgs.fromBundle(requireArguments()).uris?.map(::FileItem) LocalFileTransferFragmentArgs.fromBundle(requireArguments()).uris?.map(::FileItem)
?: emptyList() ?: emptyList()
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.menu_item_search_devices) {
/* Permissions essential for this module */
return when {
!checkFineLocationAccessPermission() ->
true
!checkExternalStorageWritePermission() ->
true
/* Initiate discovery */
!wifiDirectManager.isWifiP2pEnabled -> {
requestEnableWifiP2pServices()
true
}
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !isLocationServiceEnabled -> {
requestEnableLocationServices()
true
}
else -> {
showPeerDiscoveryProgressBar()
wifiDirectManager.discoverPeerDevices()
true
}
}
}
return super.onOptionsItemSelected(item)
}
private fun showPeerDiscoveryProgressBar() { // Setup UI for searching peers private fun showPeerDiscoveryProgressBar() { // Setup UI for searching peers
fragmentLocalFileTransferBinding?.progressBarSearchingPeers?.visibility = View.VISIBLE fragmentLocalFileTransferBinding?.progressBarSearchingPeers?.visibility = View.VISIBLE
fragmentLocalFileTransferBinding?.listPeerDevices?.visibility = View.INVISIBLE fragmentLocalFileTransferBinding?.listPeerDevices?.visibility = View.INVISIBLE

View File

@ -42,7 +42,10 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.core.view.MenuHost
import androidx.core.view.MenuProvider
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
@ -140,11 +143,37 @@ class LocalLibraryFragment : BaseFragment() {
if (toolbar != null) { if (toolbar != null) {
activity.setupDrawerToggle(toolbar) activity.setupDrawerToggle(toolbar)
} }
setHasOptionsMenu(true) setupMenu()
return fragmentDestinationLibraryBinding?.root return fragmentDestinationLibraryBinding?.root
} }
private fun setupMenu() {
(requireActivity() as MenuHost).addMenuProvider(
object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.menu_zim_manager, menu)
val searchItem = menu.findItem(R.id.action_search)
val languageItem = menu.findItem(R.id.select_language)
languageItem.isVisible = false
searchItem.isVisible = false
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
when (menuItem.itemId) {
R.id.get_zim_nearby_device -> {
navigateToLocalFileTransferFragment()
return true
}
}
return false
}
},
viewLifecycleOwner,
Lifecycle.State.RESUMED
)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
fragmentDestinationLibraryBinding?.zimSwiperefresh?.setOnRefreshListener( fragmentDestinationLibraryBinding?.zimSwiperefresh?.setOnRefreshListener(
@ -279,22 +308,6 @@ class LocalLibraryFragment : BaseFragment() {
} }
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_zim_manager, menu)
val searchItem = menu.findItem(R.id.action_search)
val languageItem = menu.findItem(R.id.select_language)
languageItem.isVisible = false
searchItem.isVisible = false
super.onCreateOptionsMenu(menu, inflater)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.get_zim_nearby_device -> navigateToLocalFileTransferFragment()
}
return super.onOptionsItemSelected(item)
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
if (!sharedPreferenceUtil.isPlayStoreBuildWithAndroid11OrAbove() && if (!sharedPreferenceUtil.isPlayStoreBuildWithAndroid11OrAbove() &&

View File

@ -41,6 +41,9 @@ import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.MenuHost
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.observe import androidx.lifecycle.observe
@ -143,7 +146,6 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions {
container: ViewGroup?, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
setHasOptionsMenu(true)
fragmentDestinationDownloadBinding = fragmentDestinationDownloadBinding =
FragmentDestinationDownloadBinding.inflate(inflater, container, false) FragmentDestinationDownloadBinding.inflate(inflater, container, false)
val toolbar = fragmentDestinationDownloadBinding?.root?.findViewById<Toolbar>(R.id.toolbar) val toolbar = fragmentDestinationDownloadBinding?.root?.findViewById<Toolbar>(R.id.toolbar)
@ -183,6 +185,7 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions {
showInternetAccessViaMobileNetworkDialog() showInternetAccessViaMobileNetworkDialog()
} }
} }
setupMenu()
// hides keyboard when scrolled // hides keyboard when scrolled
fragmentDestinationDownloadBinding?.libraryList?.addOnScrollListener( fragmentDestinationDownloadBinding?.libraryList?.addOnScrollListener(
@ -194,6 +197,37 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions {
) )
} }
private fun setupMenu() {
(requireActivity() as MenuHost).addMenuProvider(
object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.menu_zim_manager, menu)
val searchItem = menu.findItem(R.id.action_search)
val getZimItem = menu.findItem(R.id.get_zim_nearby_device)
getZimItem?.isVisible = false
(searchItem?.actionView as? SearchView)?.setOnQueryTextListener(
SimpleTextListener(zimManageViewModel.requestFiltering::onNext)
)
zimManageViewModel.requestFiltering.onNext("")
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
when (menuItem.itemId) {
R.id.select_language -> {
requireActivity().navigate(R.id.languageFragment)
closeKeyboard()
return true
}
}
return false
}
},
viewLifecycleOwner,
Lifecycle.State.RESUMED
)
}
private fun showInternetAccessViaMobileNetworkDialog() { private fun showInternetAccessViaMobileNetworkDialog() {
dialogShower.show( dialogShower.show(
WifiOnly, WifiOnly,
@ -231,29 +265,6 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions {
} }
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super<BaseFragment>.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_zim_manager, menu)
val searchItem = menu.findItem(R.id.action_search)
val getZimItem = menu.findItem(R.id.get_zim_nearby_device)
getZimItem?.isVisible = false
(searchItem?.actionView as? SearchView)?.setOnQueryTextListener(
SimpleTextListener(zimManageViewModel.requestFiltering::onNext)
)
zimManageViewModel.requestFiltering.onNext("")
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.select_language -> {
requireActivity().navigate(R.id.languageFragment)
closeKeyboard()
}
}
return super.onOptionsItemSelected(item)
}
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
availableSpaceCalculator.dispose() availableSpaceCalculator.dispose()

View File

@ -31,6 +31,9 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode import androidx.appcompat.view.ActionMode
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.view.MenuHost
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
@ -91,14 +94,11 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv
} }
} }
override fun onCreate(savedInstanceState: Bundle?) { private fun setupMenu() {
super.onCreate(savedInstanceState) (requireActivity() as MenuHost).addMenuProvider(
setHasOptionsMenu(true) object : MenuProvider {
} override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.menu_page, menu)
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super<BaseFragment>.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_page, menu)
val search = menu.findItem(R.id.menu_page_search).actionView as SearchView val search = menu.findItem(R.id.menu_page_search).actionView as SearchView
search.queryHint = searchQueryHint search.queryHint = searchQueryHint
search.setOnQueryTextListener( search.setOnQueryTextListener(
@ -108,18 +108,29 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv
) )
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { @Suppress("ReturnCount")
if (item.itemId == android.R.id.home) { override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
when (menuItem.itemId) {
android.R.id.home -> {
pageViewModel.actions.offer(Action.Exit) pageViewModel.actions.offer(Action.Exit)
return true
} }
if (item.itemId == R.id.menu_pages_clear) { R.id.menu_pages_clear -> {
pageViewModel.actions.offer(Action.UserClickedDeleteButton) pageViewModel.actions.offer(Action.UserClickedDeleteButton)
return true
} }
return super.onOptionsItemSelected(item) }
return false
}
},
viewLifecycleOwner,
Lifecycle.State.RESUMED
)
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setupMenu()
val activity = requireActivity() as CoreMainActivity val activity = requireActivity() as CoreMainActivity
fragmentPageBinding?.recyclerView?.layoutManager = fragmentPageBinding?.recyclerView?.layoutManager =
LinearLayoutManager(activity, RecyclerView.VERTICAL, false) LinearLayoutManager(activity, RecyclerView.VERTICAL, false)