diff --git a/vector/src/main/java/im/vector/app/features/call/dialpad/CallDialPadBottomSheet.kt b/vector/src/main/java/im/vector/app/features/call/dialpad/CallDialPadBottomSheet.kt new file mode 100644 index 0000000000..07a5320a10 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/call/dialpad/CallDialPadBottomSheet.kt @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 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.features.call.dialpad + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import im.vector.app.R +import im.vector.app.core.extensions.addChildFragment +import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment +import im.vector.app.databinding.BottomSheetCallDialPadBinding +import im.vector.app.features.settings.VectorLocale + +class CallDialPadBottomSheet private constructor() : VectorBaseBottomSheetDialogFragment() { + + companion object { + + private const val EXTRA_SHOW_ACTIONS = "EXTRA_SHOW_ACTIONS" + + fun newInstance(showActions: Boolean): CallDialPadBottomSheet { + return CallDialPadBottomSheet().apply { + arguments = Bundle().apply { + putBoolean(EXTRA_SHOW_ACTIONS, showActions) + } + } + } + } + + override val showExpanded = true + + var callback: DialPadFragment.Callback? = null + set(value) { + field = value + setCallbackToFragment(callback) + } + + override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): BottomSheetCallDialPadBinding { + return BottomSheetCallDialPadBinding.inflate(inflater, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + if (savedInstanceState == null) { + val showActions = arguments?.getBoolean(EXTRA_SHOW_ACTIONS, false) ?: false + DialPadFragment().apply { + arguments = Bundle().apply { + putBoolean(DialPadFragment.EXTRA_ENABLE_DELETE, showActions) + putBoolean(DialPadFragment.EXTRA_ENABLE_OK, showActions) + putString(DialPadFragment.EXTRA_REGION_CODE, VectorLocale.applicationLocale.country) + } + callback = this@CallDialPadBottomSheet.callback + }.also { + addChildFragment(R.id.callDialPadFragmentContainer, it) + } + } else { + setCallbackToFragment(callback) + } + } + + override fun onDestroyView() { + setCallbackToFragment(null) + super.onDestroyView() + } + + private fun setCallbackToFragment(callback: DialPadFragment.Callback?) { + if (!isAdded) return + val dialPadFragment = childFragmentManager.findFragmentById(R.id.callDialPadFragmentContainer) as? DialPadFragment + dialPadFragment?.callback = callback + } +} diff --git a/vector/src/main/res/layout/bottom_sheet_call_dial_pad.xml b/vector/src/main/res/layout/bottom_sheet_call_dial_pad.xml new file mode 100644 index 0000000000..cb8c0114ab --- /dev/null +++ b/vector/src/main/res/layout/bottom_sheet_call_dial_pad.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 61f79444c7..7e4e813e6c 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -2773,4 +2773,5 @@ %1$s declined this call This call has ended Call back + Dial pad