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.ViewGroup
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.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
@ -103,11 +106,40 @@ class LanguageFragment : BaseFragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
setHasOptionsMenu(true)
setupMenu()
activityLanguageBinding = ActivityLanguageBinding.inflate(inflater, container, false)
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() {
super.onDestroy()
compositeDisposable.clear()
@ -122,28 +154,6 @@ class LanguageFragment : BaseFragment() {
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() {
super.onDestroyView()
activityLanguageBinding = null

View File

@ -45,6 +45,9 @@ import androidx.annotation.RequiresApi
import androidx.appcompat.widget.Toolbar
import androidx.core.app.ActivityCompat
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.recyclerview.widget.LinearLayoutManager
import org.kiwix.kiwixmobile.R
@ -110,14 +113,9 @@ class LocalFileTransferFragment :
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?) {
super.onViewCreated(view, savedInstanceState)
setHasOptionsMenu(true)
setupMenu()
val activity = requireActivity() as CoreMainActivity
val filesForTransfer = getFilesForTransfer()
val isReceiver = filesForTransfer.isEmpty()
@ -134,6 +132,45 @@ class LocalFileTransferFragment :
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) {
fragmentLocalFileTransferBinding?.listPeerDevices?.apply {
adapter = wifiPeerListAdapter
@ -156,33 +193,6 @@ class LocalFileTransferFragment :
LocalFileTransferFragmentArgs.fromBundle(requireArguments()).uris?.map(::FileItem)
?: 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
fragmentLocalFileTransferBinding?.progressBarSearchingPeers?.visibility = View.VISIBLE
fragmentLocalFileTransferBinding?.listPeerDevices?.visibility = View.INVISIBLE

View File

@ -42,7 +42,10 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.net.toUri
import androidx.core.view.MenuHost
import androidx.core.view.MenuProvider
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
@ -140,11 +143,37 @@ class LocalLibraryFragment : BaseFragment() {
if (toolbar != null) {
activity.setupDrawerToggle(toolbar)
}
setHasOptionsMenu(true)
setupMenu()
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?) {
super.onViewCreated(view, savedInstanceState)
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() {
super.onResume()
if (!sharedPreferenceUtil.isPlayStoreBuildWithAndroid11OrAbove() &&

View File

@ -41,6 +41,9 @@ import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.Toolbar
import androidx.core.app.ActivityCompat
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.ViewModelProvider
import androidx.lifecycle.observe
@ -143,7 +146,6 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
setHasOptionsMenu(true)
fragmentDestinationDownloadBinding =
FragmentDestinationDownloadBinding.inflate(inflater, container, false)
val toolbar = fragmentDestinationDownloadBinding?.root?.findViewById<Toolbar>(R.id.toolbar)
@ -183,6 +185,7 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions {
showInternetAccessViaMobileNetworkDialog()
}
}
setupMenu()
// hides keyboard when scrolled
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() {
dialogShower.show(
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() {
super.onDestroyView()
availableSpaceCalculator.dispose()

View File

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