Menu: extract management to a common interface / Migrate Activities
This commit is contained in:
parent
f7a0615105
commit
be099dcae0
@ -31,7 +31,6 @@ import android.view.WindowManager
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.CallSuper
|
||||
import androidx.annotation.MainThread
|
||||
import androidx.annotation.MenuRes
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
@ -90,6 +89,7 @@ import im.vector.app.features.themes.ThemeUtils
|
||||
import im.vector.app.receivers.DebugReceiver
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import org.matrix.android.sdk.api.extensions.orFalse
|
||||
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||
import org.matrix.android.sdk.api.failure.GlobalError
|
||||
import org.matrix.android.sdk.api.failure.InitialSyncRequestReason
|
||||
@ -257,21 +257,23 @@ abstract class VectorBaseActivity<VB : ViewBinding> : AppCompatActivity(), Maver
|
||||
|
||||
private fun setupMenu() {
|
||||
// Always add a MenuProvider to handle the back action from the Toolbar
|
||||
val vectorMenuProvider = this as? VectorMenuProvider
|
||||
addMenuProvider(
|
||||
object : MenuProvider {
|
||||
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
|
||||
getMenuRes()
|
||||
.takeIf { it != -1 }
|
||||
?.let { menuInflater.inflate(it, menu) }
|
||||
handlePostCreateMenu(menu)
|
||||
vectorMenuProvider?.let {
|
||||
menuInflater.inflate(it.getMenuRes(), menu)
|
||||
it.handlePostCreateMenu(menu)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPrepareMenu(menu: Menu) {
|
||||
handlePrepareMenu(menu)
|
||||
vectorMenuProvider?.handlePrepareMenu(menu)
|
||||
}
|
||||
|
||||
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
|
||||
return handleMenuItemSelected(menuItem)
|
||||
return vectorMenuProvider?.handleMenuItemSelected(menuItem).orFalse() ||
|
||||
handleMenuItemHome(menuItem)
|
||||
}
|
||||
},
|
||||
this,
|
||||
@ -492,21 +494,7 @@ abstract class VectorBaseActivity<VB : ViewBinding> : AppCompatActivity(), Maver
|
||||
}
|
||||
}
|
||||
|
||||
/* ==========================================================================================
|
||||
* MENU MANAGEMENT
|
||||
* ========================================================================================== */
|
||||
|
||||
@MenuRes
|
||||
open fun getMenuRes() = -1
|
||||
|
||||
// No op by default
|
||||
open fun handlePostCreateMenu(menu: Menu) = Unit
|
||||
|
||||
// No op by default
|
||||
open fun handlePrepareMenu(menu: Menu) = Unit
|
||||
|
||||
@CallSuper
|
||||
open fun handleMenuItemSelected(item: MenuItem): Boolean {
|
||||
private fun handleMenuItemHome(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
android.R.id.home -> {
|
||||
onBackPressed(true)
|
||||
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (c) 2022 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package im.vector.app.core.platform
|
||||
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import androidx.annotation.MenuRes
|
||||
|
||||
/**
|
||||
* Let your Activity of Fragment implement this interface if they provide a Menu
|
||||
*/
|
||||
interface VectorMenuProvider {
|
||||
@MenuRes
|
||||
fun getMenuRes(): Int
|
||||
|
||||
// No op by default
|
||||
fun handlePostCreateMenu(menu: Menu) = Unit
|
||||
|
||||
// No op by default
|
||||
fun handlePrepareMenu(menu: Menu) = Unit
|
||||
|
||||
fun handleMenuItemSelected(item: MenuItem): Boolean
|
||||
}
|
@ -51,6 +51,7 @@ import im.vector.app.R
|
||||
import im.vector.app.core.extensions.registerStartForActivityResult
|
||||
import im.vector.app.core.extensions.setTextOrHide
|
||||
import im.vector.app.core.platform.VectorBaseActivity
|
||||
import im.vector.app.core.platform.VectorMenuProvider
|
||||
import im.vector.app.core.utils.PERMISSIONS_FOR_AUDIO_IP_CALL
|
||||
import im.vector.app.core.utils.PERMISSIONS_FOR_VIDEO_IP_CALL
|
||||
import im.vector.app.core.utils.checkPermissions
|
||||
@ -95,7 +96,10 @@ data class CallArgs(
|
||||
private val loggerTag = LoggerTag("VectorCallActivity", LoggerTag.VOIP)
|
||||
|
||||
@AndroidEntryPoint
|
||||
class VectorCallActivity : VectorBaseActivity<ActivityCallBinding>(), CallControlsView.InteractionListener {
|
||||
class VectorCallActivity :
|
||||
VectorBaseActivity<ActivityCallBinding>(),
|
||||
CallControlsView.InteractionListener,
|
||||
VectorMenuProvider {
|
||||
|
||||
override fun getBinding() = ActivityCallBinding.inflate(layoutInflater)
|
||||
|
||||
@ -229,7 +233,7 @@ class VectorCallActivity : VectorBaseActivity<ActivityCallBinding>(), CallContro
|
||||
onBackPressed()
|
||||
true
|
||||
}
|
||||
else -> super.handleMenuItemSelected(item)
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,6 +36,7 @@ import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.replaceFragment
|
||||
import im.vector.app.core.platform.SimpleFragmentActivity
|
||||
import im.vector.app.core.platform.VectorMenuProvider
|
||||
import im.vector.app.core.resources.ColorProvider
|
||||
import im.vector.app.core.utils.createJSonViewerStyleProvider
|
||||
import kotlinx.parcelize.Parcelize
|
||||
@ -43,7 +44,10 @@ import org.billcarsonfr.jsonviewer.JSonViewerFragment
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
class RoomDevToolActivity : SimpleFragmentActivity(), FragmentManager.OnBackStackChangedListener {
|
||||
class RoomDevToolActivity :
|
||||
SimpleFragmentActivity(),
|
||||
FragmentManager.OnBackStackChangedListener,
|
||||
VectorMenuProvider {
|
||||
|
||||
@Inject lateinit var colorProvider: ColorProvider
|
||||
|
||||
@ -143,7 +147,7 @@ class RoomDevToolActivity : SimpleFragmentActivity(), FragmentManager.OnBackStac
|
||||
viewModel.handle(RoomDevToolAction.MenuItemSend)
|
||||
true
|
||||
}
|
||||
else -> super.handleMenuItemSelected(item)
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -43,6 +43,7 @@ import im.vector.app.core.extensions.registerStartForActivityResult
|
||||
import im.vector.app.core.extensions.replaceFragment
|
||||
import im.vector.app.core.extensions.validateBackPressed
|
||||
import im.vector.app.core.platform.VectorBaseActivity
|
||||
import im.vector.app.core.platform.VectorMenuProvider
|
||||
import im.vector.app.core.pushers.PushersManager
|
||||
import im.vector.app.core.pushers.UnifiedPushHelper
|
||||
import im.vector.app.databinding.ActivityHomeBinding
|
||||
@ -103,7 +104,8 @@ class HomeActivity :
|
||||
VectorBaseActivity<ActivityHomeBinding>(),
|
||||
NavigationInterceptor,
|
||||
SpaceInviteBottomSheet.InteractionListener,
|
||||
MatrixToBottomSheet.InteractionListener {
|
||||
MatrixToBottomSheet.InteractionListener,
|
||||
VectorMenuProvider {
|
||||
|
||||
private lateinit var sharedActionViewModel: HomeSharedActionViewModel
|
||||
|
||||
@ -584,7 +586,7 @@ class HomeActivity :
|
||||
navigator.openSettings(this)
|
||||
true
|
||||
}
|
||||
else -> super.handleMenuItemSelected(item)
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,7 @@ import com.airbnb.mvrx.withState
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.platform.VectorBaseActivity
|
||||
import im.vector.app.core.platform.VectorMenuProvider
|
||||
import im.vector.app.databinding.ActivityBugReportBinding
|
||||
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||
import timber.log.Timber
|
||||
@ -36,7 +37,9 @@ import timber.log.Timber
|
||||
* Form to send a bug report.
|
||||
*/
|
||||
@AndroidEntryPoint
|
||||
class BugReportActivity : VectorBaseActivity<ActivityBugReportBinding>() {
|
||||
class BugReportActivity :
|
||||
VectorBaseActivity<ActivityBugReportBinding>(),
|
||||
VectorMenuProvider {
|
||||
|
||||
override fun getBinding() = ActivityBugReportBinding.inflate(layoutInflater)
|
||||
|
||||
@ -139,7 +142,7 @@ class BugReportActivity : VectorBaseActivity<ActivityBugReportBinding>() {
|
||||
}
|
||||
true
|
||||
}
|
||||
else -> super.handleMenuItemSelected(item)
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,6 +32,7 @@ import im.vector.app.EmojiCompatFontProvider
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.observeEvent
|
||||
import im.vector.app.core.platform.VectorBaseActivity
|
||||
import im.vector.app.core.platform.VectorMenuProvider
|
||||
import im.vector.app.databinding.ActivityEmojiReactionPickerBinding
|
||||
import im.vector.app.features.reactions.data.EmojiDataSource
|
||||
import im.vector.lib.core.utils.flow.throttleFirst
|
||||
@ -47,13 +48,17 @@ import javax.inject.Inject
|
||||
* TODO Finish Refactor to vector base activity
|
||||
*/
|
||||
@AndroidEntryPoint
|
||||
class EmojiReactionPickerActivity : VectorBaseActivity<ActivityEmojiReactionPickerBinding>(),
|
||||
EmojiCompatFontProvider.FontProviderListener {
|
||||
class EmojiReactionPickerActivity :
|
||||
VectorBaseActivity<ActivityEmojiReactionPickerBinding>(),
|
||||
EmojiCompatFontProvider.FontProviderListener,
|
||||
VectorMenuProvider {
|
||||
|
||||
lateinit var viewModel: EmojiChooserViewModel
|
||||
|
||||
override fun getMenuRes() = R.menu.menu_emoji_reaction_picker
|
||||
|
||||
override fun handleMenuItemSelected(item: MenuItem) = false
|
||||
|
||||
override fun getBinding() = ActivityEmojiReactionPickerBinding.inflate(layoutInflater)
|
||||
|
||||
override fun getCoordinatorLayout() = views.coordinatorLayout
|
||||
|
Loading…
x
Reference in New Issue
Block a user